summaryrefslogtreecommitdiffstats
path: root/initramfs-init
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2009-04-15 12:41:42 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2009-04-15 12:41:42 +0000
commitafecd8751082649dec346cd1fc087f69b59bddf8 (patch)
treeaf010421b678cbe4a9be5d7a2a256beb7cab370e /initramfs-init
parent1e80b3f1c96d7f26e994b8f16bea1cdc955616f8 (diff)
downloadabuild-afecd8751082649dec346cd1fc087f69b59bddf8.tar.bz2
abuild-afecd8751082649dec346cd1fc087f69b59bddf8.tar.xz
initram: support for encrypted apkovls
Diffstat (limited to 'initramfs-init')
-rwxr-xr-xinitramfs-init32
1 files changed, 30 insertions, 2 deletions
diff --git a/initramfs-init b/initramfs-init
index bec66db..c245a3a 100755
--- a/initramfs-init
+++ b/initramfs-init
@@ -64,6 +64,34 @@ retry_mount() {
return 1
}
+unpack_apkovl() {
+ local ovl="$1"
+ local dest="$2"
+ local suffix=${ovl##*.}
+ local i
+ if [ "$suffix" = "gz" ]; then
+ tar -C "$dest" -zxf "$ovl"
+ return $?
+ fi
+
+ for i in $ALPINE_MNT/*/*/openssl-[0-9]*.apk $ALPINE_MNT/*/openssl-[0-9]*.apk; do
+ [ -f "$i" ] && tar -C / -zxf $i && break
+ done
+
+ if ! openssl list-cipher-commands | grep "^$suffix$" > /dev/null; then
+ errstr="Cipher $suffix is not supported"
+ return 1
+ fi
+ local count=0
+ echo ""
+ while [ $count -lt 3 ]; do
+ openssl enc -d -$suffix -in "$ovl" | tar -C "$dest" -zx \
+ 2>/dev/null && return 0
+ count=$(( $count + 1 ))
+ done
+ return 1
+}
+
# gotta start from somewhere :)
echo "Alpine Init $VERSION"
@@ -222,8 +250,8 @@ fi
if [ -f "$ovl" ]; then
ebegin "Loading user settings from $ovl"
- tar -C $NEWROOT -zxf "$ovl"
- eend $?
+ unpack_apkovl "$ovl" $NEWROOT
+ eend $? $errstr
umount /media/$i 2>/dev/null &
pkgs=$(sed 's/\#.*//' $NEWROOT/etc/lbu/packages.list 2>/dev/null)
fi