Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
L
lxc
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
lxc
Commits
832cb182
Unverified
Commit
832cb182
authored
Feb 27, 2018
by
Christian Brauner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lxc-download: make POSIX shellcheck clean
Signed-off-by:
Christian Brauner
<
christian.brauner@ubuntu.com
>
parent
b80f86f2
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
51 additions
and
60 deletions
+51
-60
lxc-download.in
templates/lxc-download.in
+51
-60
No files found.
templates/lxc-download.in
View file @
832cb182
...
...
@@ -74,7 +74,7 @@ cleanup() {
}
wget_wrapper
()
{
for
i
in
$(
seq
3
)
;
do
for
_
in
$(
seq
3
)
;
do
if
wget
"
$@
"
;
then
return
0
fi
...
...
@@ -94,8 +94,8 @@ download_file() {
fi
elif
[
"
${
DOWNLOAD_SHOW_HTTP_WARNING
}
"
=
"true"
]
;
then
DOWNLOAD_SHOW_HTTP_WARNING
=
"false"
echo
"WARNING: Failed to download the file over HTTPs.
"
1>&2
echo
" The file was instead download over HTTP.
"
1>&2
echo
"WARNING: Failed to download the file over HTTPs
"
1>&2
echo
" The file was instead download over HTTP
"
1>&2
echo
"A server replay attack may be possible!"
1>&2
fi
fi
...
...
@@ -132,7 +132,7 @@ gpg_setup() {
export
GNUPGHOME
=
"
${
DOWNLOAD_TEMP
}
/gpg"
success
=
for
i
in
$(
seq
3
)
;
do
for
_
in
$(
seq
3
)
;
do
if
gpg
--keyserver
"
${
DOWNLOAD_KEYSERVER
}
"
\
--recv-keys
"
${
DOWNLOAD_KEYID
}
"
>
/dev/null 2>&1
;
then
success
=
1
...
...
@@ -142,7 +142,7 @@ gpg_setup() {
done
if
[
-z
"
${
success
}
"
]
;
then
echo
"ERROR: Unable to fetch GPG key from keyserver.
"
echo
"ERROR: Unable to fetch GPG key from keyserver
"
exit
1
fi
...
...
@@ -178,16 +178,17 @@ in_userns() {
fi
done
< /proc/self/uid_map
[
"
$(
cat
/proc/self/uid_map
)
"
=
"
$(
cat
/proc/1/uid_map
)
"
]
&&
\
{
echo
userns-root
;
return
;
}
[
"
$(
cat
/proc/self/uid_map
)
"
=
"
$(
cat
/proc/1/uid_map
)
"
]
&&
{
echo
userns-root
;
return
;
}
echo yes
}
relevant_file
()
{
FILE_PATH
=
"
${
LXC_CACHE_PATH
}
/
$1
"
if
[
-e
"
${
FILE_PATH
}
-
${
DOWNLOAD_MODE
}
"
]
;
then
FILE_PATH
=
"
${
FILE_PATH
}
-
${
DOWNLOAD_MODE
}
"
fi
if
[
-e
"
${
FILE_PATH
}
.
${
DOWNLOAD_COMPAT_LEVEL
}
"
]
;
then
FILE_PATH
=
"
${
FILE_PATH
}
.
${
DOWNLOAD_COMPAT_LEVEL
}
"
fi
...
...
@@ -200,8 +201,8 @@ usage() {
LXC container image downloader
Special arguments:
[ -h | --help ]: Print this help message and exit
.
[ -l | --list ]: List all available images and exit
.
[ -h | --help ]: Print this help message and exit
[ -l | --list ]: List all available images and exit
Required arguments:
[ -d | --dist <distribution> ]: The name of the distribution
...
...
@@ -275,7 +276,7 @@ done
if
[
"
${
DOWNLOAD_VALIDATE
}
"
=
"true"
]
;
then
if
!
command
-V
gpg
>
/dev/null 2>&1
;
then
echo
"ERROR: Missing recommended tool: gpg"
1>&2
echo
"You can workaround this by using --no-validate.
"
1>&2
echo
"You can workaround this by using --no-validate
"
1>&2
exit
1
fi
fi
...
...
@@ -283,7 +284,7 @@ fi
# Check that we have all variables we need
if
[
-z
"
${
LXC_NAME
}
"
]
||
[
-z
"
${
LXC_PATH
}
"
]
||
[
-z
"
${
LXC_ROOTFS
}
"
]
;
then
if
[
"
${
DOWNLOAD_LIST_IMAGES
}
"
!=
"true"
]
;
then
echo
"ERROR: Not running through LXC.
"
1>&2
echo
"ERROR: Please pass the name, path, and rootfs for the container
"
1>&2
exit
1
fi
fi
...
...
@@ -293,7 +294,7 @@ USERNS="$(in_userns)"
if
[
"
${
USERNS
}
"
!=
"no"
]
;
then
if
[
"
${
USERNS
}
"
=
"yes"
]
;
then
if
[
-z
"
${
LXC_MAPPED_UID
}
"
]
||
[
"
${
LXC_MAPPED_UID
}
"
=
"-1"
]
;
then
echo
"ERROR: In a user namespace without a map.
"
1>&2
echo
"ERROR: In a user namespace without a map
"
1>&2
exit
1
fi
DOWNLOAD_MODE
=
"user"
...
...
@@ -304,8 +305,7 @@ if [ "${USERNS}" != "no" ]; then
fi
fi
if
[
-z
"
${
DOWNLOAD_DIST
}
"
]
||
[
-z
"
${
DOWNLOAD_RELEASE
}
"
]
||
\
[
-z
"
${
DOWNLOAD_ARCH
}
"
]
;
then
if
[
-z
"
${
DOWNLOAD_DIST
}
"
]
||
[
-z
"
${
DOWNLOAD_RELEASE
}
"
]
||
[
-z
"
${
DOWNLOAD_ARCH
}
"
]
;
then
DOWNLOAD_INTERACTIVE
=
"true"
fi
...
...
@@ -324,8 +324,7 @@ else
fi
# Simply list images
if
[
"
${
DOWNLOAD_LIST_IMAGES
}
"
=
"true"
]
||
\
[
"
${
DOWNLOAD_INTERACTIVE
}
"
=
"true"
]
;
then
if
[
"
${
DOWNLOAD_LIST_IMAGES
}
"
=
"true"
]
||
[
"
${
DOWNLOAD_INTERACTIVE
}
"
=
"true"
]
;
then
# Initialize GPG
gpg_setup
...
...
@@ -333,13 +332,10 @@ if [ "${DOWNLOAD_LIST_IMAGES}" = "true" ] || \
DOWNLOAD_INDEX_PATH
=
"/meta/1.0/index-
${
DOWNLOAD_MODE
}
"
echo
"Downloading the image index"
if
!
download_file
"
${
DOWNLOAD_INDEX_PATH
}
.
${
DOWNLOAD_COMPAT_LEVEL
}
"
\
"
${
DOWNLOAD_TEMP
}
/index"
noexit
||
!
download_sig
"
${
DOWNLOAD_INDEX_PATH
}
.
${
DOWNLOAD_COMPAT_LEVEL
}
.asc"
\
"
${
DOWNLOAD_TEMP
}
/index.asc"
noexit
;
then
if
!
download_file
"
${
DOWNLOAD_INDEX_PATH
}
.
${
DOWNLOAD_COMPAT_LEVEL
}
"
"
${
DOWNLOAD_TEMP
}
/index"
noexit
||
!
download_sig
"
${
DOWNLOAD_INDEX_PATH
}
.
${
DOWNLOAD_COMPAT_LEVEL
}
.asc"
"
${
DOWNLOAD_TEMP
}
/index.asc"
noexit
;
then
download_file
"
${
DOWNLOAD_INDEX_PATH
}
"
"
${
DOWNLOAD_TEMP
}
/index"
normal
download_sig
"
${
DOWNLOAD_INDEX_PATH
}
.asc"
\
"
${
DOWNLOAD_TEMP
}
/index.asc"
normal
download_sig
"
${
DOWNLOAD_INDEX_PATH
}
.asc"
"
${
DOWNLOAD_TEMP
}
/index.asc"
normal
fi
gpg_validate
"
${
DOWNLOAD_TEMP
}
/index.asc"
...
...
@@ -350,7 +346,6 @@ if [ "${DOWNLOAD_LIST_IMAGES}" = "true" ] || \
printf
"DIST
\t
RELEASE
\t
ARCH
\t
VARIANT
\t
BUILD
\n
"
echo
"---"
while
IFS
=
';'
read
-r
f1 f2 f3 f4 f5 f6
;
do
[
-n
"
${
DOWNLOAD_DIST
}
"
]
&&
[
"
$f1
"
!=
"
${
DOWNLOAD_DIST
}
"
]
&&
continue
[
-n
"
${
DOWNLOAD_RELEASE
}
"
]
&&
[
"
$f2
"
!=
"
${
DOWNLOAD_RELEASE
}
"
]
&&
continue
[
-n
"
${
DOWNLOAD_ARCH
}
"
]
&&
[
"
$f3
"
!=
"
${
DOWNLOAD_ARCH
}
"
]
&&
continue
...
...
@@ -426,20 +421,16 @@ if [ "${DOWNLOAD_USE_CACHE}" = "false" ]; then
DOWNLOAD_INDEX_PATH
=
"/meta/1.0/index-
${
DOWNLOAD_MODE
}
"
echo
"Downloading the image index"
if
!
download_file
"
${
DOWNLOAD_INDEX_PATH
}
.
${
DOWNLOAD_COMPAT_LEVEL
}
"
\
"
${
DOWNLOAD_TEMP
}
/index"
noexit
||
!
download_sig
"
${
DOWNLOAD_INDEX_PATH
}
.
${
DOWNLOAD_COMPAT_LEVEL
}
.asc"
\
"
${
DOWNLOAD_TEMP
}
/index.asc"
noexit
;
then
if
!
download_file
"
${
DOWNLOAD_INDEX_PATH
}
.
${
DOWNLOAD_COMPAT_LEVEL
}
"
"
${
DOWNLOAD_TEMP
}
/index"
noexit
||
!
download_sig
"
${
DOWNLOAD_INDEX_PATH
}
.
${
DOWNLOAD_COMPAT_LEVEL
}
.asc"
"
${
DOWNLOAD_TEMP
}
/index.asc"
noexit
;
then
download_file
"
${
DOWNLOAD_INDEX_PATH
}
"
"
${
DOWNLOAD_TEMP
}
/index"
normal
download_sig
"
${
DOWNLOAD_INDEX_PATH
}
.asc"
\
"
${
DOWNLOAD_TEMP
}
/index.asc"
normal
download_sig
"
${
DOWNLOAD_INDEX_PATH
}
.asc"
"
${
DOWNLOAD_TEMP
}
/index.asc"
normal
fi
gpg_validate
"
${
DOWNLOAD_TEMP
}
/index.asc"
# Parse it
while
IFS
=
';'
read
-r
f1 f2 f3 f4 f5 f6
;
do
if
[
"
${
f1
}
"
!=
"
${
DOWNLOAD_DIST
}
"
]
||
\
[
"
${
f2
}
"
!=
"
${
DOWNLOAD_RELEASE
}
"
]
||
\
[
"
${
f3
}
"
!=
"
${
DOWNLOAD_ARCH
}
"
]
||
\
...
...
@@ -456,28 +447,24 @@ if [ "${DOWNLOAD_USE_CACHE}" = "false" ]; then
done
<
"
${
DOWNLOAD_TEMP
}
/index"
if
[
-z
"
${
DOWNLOAD_URL
}
"
]
;
then
echo
"ERROR: Couldn't find a matching image.
"
1>&1
echo
"ERROR: Couldn't find a matching image
"
1>&1
exit
1
fi
if
[
-d
"
${
LXC_CACHE_PATH
}
"
]
&&
[
-f
"
${
LXC_CACHE_PATH
}
/build_id"
]
&&
\
[
"
$(
cat
"
${
LXC_CACHE_PATH
}
/build_id"
)
"
=
"
${
DOWNLOAD_BUILD
}
"
]
;
then
echo
"The cache is already up to date.
"
echo
"The cache is already up to date
"
echo
"Using image from local cache"
else
# Download the actual files
echo
"Downloading the rootfs"
download_file
"
${
DOWNLOAD_URL
}
/rootfs.tar.xz"
\
"
${
DOWNLOAD_TEMP
}
/rootfs.tar.xz"
normal
download_sig
"
${
DOWNLOAD_URL
}
/rootfs.tar.xz.asc"
\
"
${
DOWNLOAD_TEMP
}
/rootfs.tar.xz.asc"
normal
download_file
"
${
DOWNLOAD_URL
}
/rootfs.tar.xz"
"
${
DOWNLOAD_TEMP
}
/rootfs.tar.xz"
normal
download_sig
"
${
DOWNLOAD_URL
}
/rootfs.tar.xz.asc"
"
${
DOWNLOAD_TEMP
}
/rootfs.tar.xz.asc"
normal
gpg_validate
"
${
DOWNLOAD_TEMP
}
/rootfs.tar.xz.asc"
echo
"Downloading the metadata"
download_file
"
${
DOWNLOAD_URL
}
/meta.tar.xz"
\
"
${
DOWNLOAD_TEMP
}
/meta.tar.xz"
normal
download_sig
"
$DOWNLOAD_URL
/meta.tar.xz.asc"
\
"
${
DOWNLOAD_TEMP
}
/meta.tar.xz.asc"
normal
download_file
"
${
DOWNLOAD_URL
}
/meta.tar.xz"
"
${
DOWNLOAD_TEMP
}
/meta.tar.xz"
normal
download_sig
"
$DOWNLOAD_URL
/meta.tar.xz.asc"
"
${
DOWNLOAD_TEMP
}
/meta.tar.xz.asc"
normal
gpg_validate
"
${
DOWNLOAD_TEMP
}
/meta.tar.xz.asc"
if
[
-d
"
${
LXC_CACHE_PATH
}
"
]
;
then
...
...
@@ -523,8 +510,7 @@ fi
# is to use a function wrapper, but the latter can't be used here as the args
# are dynamic. We thus need to ignore the warning brought by shellcheck.
# shellcheck disable=SC2086
tar
--anchored
${
EXCLUDES
}
--numeric-owner
-xpJf
\
"
${
LXC_CACHE_PATH
}
/rootfs.tar.xz"
-C
"
${
LXC_ROOTFS
}
"
tar
--anchored
${
EXCLUDES
}
--numeric-owner
-xpJf
"
${
LXC_CACHE_PATH
}
/rootfs.tar.xz"
-C
"
${
LXC_ROOTFS
}
"
mkdir
-p
"
${
LXC_ROOTFS
}
/dev/pts/"
...
...
@@ -537,35 +523,40 @@ if [ ! -e "${configfile}" ]; then
fi
## Extract all the network config entries
sed
-i
-e
"/lxc.net.0/{w
${
LXC_PATH
}
/config-network"
-e
"d}"
\
"
${
LXC_PATH
}
/config"
sed
-i
-e
"/lxc.net.0/{w
${
LXC_PATH
}
/config-network"
-e
"d}"
"
${
LXC_PATH
}
/config"
## Extract any other config entry
sed
-i
-e
"/lxc./{w
${
LXC_PATH
}
/config-auto"
-e
"d}"
"
${
LXC_PATH
}
/config"
## Append the defaults
echo
""
>>
"
${
LXC_PATH
}
/config"
echo
"# Distribution configuration"
>>
"
${
LXC_PATH
}
/config"
cat
"
$configfile
"
>>
"
${
LXC_PATH
}
/config"
{
echo
""
echo
"# Distribution configuration"
cat
"
$configfile
"
}
>>
"
${
LXC_PATH
}
/config"
## Add the container-specific config
echo
""
>>
"
${
LXC_PATH
}
/config"
echo
"# Container specific configuration"
>>
"
${
LXC_PATH
}
/config"
if
[
-e
"
${
LXC_PATH
}
/config-auto"
]
;
then
cat
"
${
LXC_PATH
}
/config-auto"
>>
"
${
LXC_PATH
}
/config"
{
echo
""
echo
"# Container specific configuration"
if
[
-e
"
${
LXC_PATH
}
/config-auto"
]
;
then
cat
"
${
LXC_PATH
}
/config-auto"
rm
"
${
LXC_PATH
}
/config-auto"
fi
if
[
-e
"
${
fstab
}
"
]
;
then
echo
"lxc.mount.fstab =
${
LXC_PATH
}
/fstab"
>>
"
${
LXC_PATH
}
/config"
fi
echo
"lxc.uts.name =
${
LXC_NAME
}
"
>>
"
${
LXC_PATH
}
/config"
fi
if
[
-e
"
${
fstab
}
"
]
;
then
echo
"lxc.mount.fstab =
${
LXC_PATH
}
/fstab"
fi
echo
"lxc.uts.name =
${
LXC_NAME
}
"
}
>>
"
${
LXC_PATH
}
/config"
## Re-add the previously removed network config
if
[
-e
"
${
LXC_PATH
}
/config-network"
]
;
then
echo
""
>>
"
${
LXC_PATH
}
/config"
echo
"# Network configuration"
>>
"
${
LXC_PATH
}
/config"
cat
"
${
LXC_PATH
}
/config-network"
>>
"
${
LXC_PATH
}
/config"
{
echo
""
echo
"# Network configuration"
cat
"
${
LXC_PATH
}
/config-network"
rm
"
${
LXC_PATH
}
/config-network"
}
>>
"
${
LXC_PATH
}
/config"
fi
TEMPLATE_FILES
=
"
${
LXC_PATH
}
/config"
...
...
@@ -590,7 +581,6 @@ OLD_IFS=${IFS}
IFS
=
";"
for
file
in
${
TEMPLATE_FILES
}
;
do
[
!
-f
"
${
file
}
"
]
&&
continue
sed
-i
"s#LXC_NAME#
${
LXC_NAME
}
#g"
"
${
file
}
"
sed
-i
"s#LXC_PATH#
${
LXC_PATH
}
#g"
"
${
file
}
"
sed
-i
"s#LXC_ROOTFS#
${
LXC_ROOTFS
}
#g"
"
${
file
}
"
...
...
@@ -607,6 +597,7 @@ fi
if
[
-n
"
${
LXC_MAPPED_UID
}
"
]
&&
[
"
${
LXC_MAPPED_UID
}
"
!=
"-1"
]
;
then
chown
"
${
LXC_MAPPED_UID
}
"
"
${
LXC_PATH
}
/config"
"
${
LXC_PATH
}
/fstab"
>
/dev/null 2>&1
||
:
fi
if
[
-n
"
${
LXC_MAPPED_GID
}
"
]
&&
[
"
${
LXC_MAPPED_GID
}
"
!=
"-1"
]
;
then
chgrp
"
${
LXC_MAPPED_GID
}
"
"
${
LXC_PATH
}
/config"
"
${
LXC_PATH
}
/fstab"
>
/dev/null 2>&1
||
:
fi
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment