Skip to content

Commit

Permalink
lxc-alpine: cache APK packages instead of rootfs
Browse files Browse the repository at this point in the history
Signed-off-by: Jakub Jirutka <jakub@jirutka.cz>
  • Loading branch information
jirutka committed Feb 26, 2016
1 parent 5845ac2 commit 20f39db
Showing 1 changed file with 15 additions and 29 deletions.
44 changes: 15 additions & 29 deletions templates/lxc-alpine.in
Expand Up @@ -85,7 +85,8 @@ usage() {
APK_KEYS_DIR Path to directory with GPG keys for APK. If not set and
/etc/apk/keys does not contain alpine keys, then the script
will download the keys from ${APK_KEYS_URI}.
LXC_CACHE_PATH Path to the cache directory where to store cached rootfs.
LXC_CACHE_PATH Path to the cache directory where to store bootstrap files
and APK packages.
EOF
}

Expand Down Expand Up @@ -226,36 +227,23 @@ fetch_apk_static() {
#============================ Install ============================#

install() {
local rootfs="$1"
local arch="$2"
local branch="$3"
local cache_dir="$LXC_CACHE_DIR/rootfs-$branch-$arch"

if [ "$FLUSH_CACHE" = 'yes' ] && [ -d "$cache_dir" ]; then
einfo "Cleaning cached rootfs of Alpine $branch $arch"
rm -Rf "$cache_dir"
fi

if [ ! -d "$cache_dir/rootfs" ]; then
einfo "Building Alpine rootfs in $cache_dir/rootfs"
build_alpine "$cache_dir/rootfs" "$arch" "$branch"
fi

einfo "Copying cached rootfs to $rootfs"
mkdir -p "$rootfs"
cp -a "$cache_dir"/rootfs/* "$rootfs"/
}

build_alpine() {
local dest="$1"
local arch="$2"
local branch="$3"
local apk_cache="$LXC_CACHE_DIR/apk/$arch"
local repo_url="$MIRROR_URL/$branch/main"

rm -Rf "$dest.part" 2>/dev/null
mkdir -p "$dest.part"
if [ "$FLUSH_CACHE" = 'yes' ] && [ -d "$apk_cache" ]; then
einfo "Cleaning cached APK packages for $arch"
rm -Rf "$apk_cache"
fi
mkdir -p "$apk_cache"

einfo "Installing Alpine Linux in $dest"
cd "$dest"

cd "$dest.part"
mkdir -p etc/apk
ln -s "$apk_cache" etc/apk/cache

$APK --update-cache --initdb --arch="$arch" \
--root=. --keys-dir="$APK_KEYS_DIR" --repository="$repo_url" \
Expand All @@ -272,10 +260,8 @@ build_alpine() {
chroot . /bin/true \
|| die 3 'Failed to execute /bin/true in chroot, the builded rootfs is broken!'

rm etc/apk/cache
cd - >/dev/null

rm -Rf "$dest"
mv "$dest.part" "$dest"
}

make_dev_nodes() {
Expand Down Expand Up @@ -496,7 +482,7 @@ fi

# Here we go!
run_exclusively 'bootstrap' 10 bootstrap
run_exclusively "$release-$arch" 30 install "$rootfs" "$arch" "$release"
run_exclusively "$arch" 30 install "$rootfs" "$arch" "$release"
configure_container "$path/config" "$name" "$arch"

einfo "Container's rootfs and config have been created"
Expand Down

0 comments on commit 20f39db

Please sign in to comment.