diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-10-24 15:11:45 +0300 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-11-03 13:13:45 +0200 |
commit | 8c64e9debee97248ba616e9ab9cb7eee55d8abd4 (patch) | |
tree | 83887b01b94c7c7bdfd5db9c9fdc7d54c28ed3f1 | |
parent | 89306b4ee7165cb3cc2cf518a983f59208d4e801 (diff) | |
download | alpine-conf-8c64e9debee97248ba616e9ab9cb7eee55d8abd4.tar.bz2 alpine-conf-8c64e9debee97248ba616e9ab9cb7eee55d8abd4.tar.xz |
update-kernel: do not require superuser rights
-rw-r--r-- | update-kernel.in | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/update-kernel.in b/update-kernel.in index 4baf0da..ff91dff 100644 --- a/update-kernel.in +++ b/update-kernel.in @@ -12,6 +12,9 @@ SCRIPT=update-kernel VIRTUAL=.tmp-$SCRIPT +SUPERUSER= +[ $(id -u) -eq 0 ] && SUPERUSER=Y + BUILDDIR= FLAVOR= MNTDIR= @@ -80,6 +83,9 @@ if [ -z "$DESTDIR" ]; then [ "$FLAVOR" ] && \ usage 1 "Cannot specify flavor when updating the current kernel" + [ "$SUPERUSER" ] || \ + usage 1 "Specify destination directory or run as superuser" + while read MOUNT; do set -- $MOUNT [ $2 = /.modloop ] || continue @@ -107,14 +113,16 @@ clean_up() { set +e ignore_sigs - apk del -q $VIRTUAL + [ "$SUPERUSER" ] && apk del -q $VIRTUAL rm -fr $TMPDIR } trap clean_up EXIT $SIGNALS -apk add -qU -t $VIRTUAL mkinitfs squashfs-tools +if [ "$SUPERUSER" ]; then + apk add -qU -t $VIRTUAL mkinitfs squashfs-tools +fi if [ -z "$features" ]; then . /etc/mkinitfs/mkinitfs.conf @@ -128,11 +136,28 @@ fi TMPDIR=$(mktemp -d /tmp/$SCRIPT.XXXXXX) ROOT=$TMPDIR/root BOOT=$ROOT/boot +WRAPPER=eval + +_exec() { + $WRAPPER "$1" +} _apk() { local cmd=$1 shift - apk $cmd -p $ROOT --keys-dir /etc/apk/keys \ + + local wrapper= + if [ -z "$SUPERUSER" ]; then + local opt= + local fake_env=$TMPDIR/fake-env + if [ -f $fake_env ]; then + opt="-i $fake_env" + WRAPPER="fakeroot $opt --" + fi + wrapper="fakeroot $opt -s $fake_env --" + fi + + $wrapper apk $cmd -p $ROOT --keys-dir /etc/apk/keys \ --repositories-file /etc/apk/repositories $* } @@ -174,10 +199,10 @@ MODIMG=$FLAVOR.modloop.squashfs mkdir $MODLOOP $STAGING cp -a $ROOT/lib/modules $MODLOOP cp -a $ROOT/lib/firmware $MODLOOP/modules -mksquashfs $MODLOOP $STAGING/$MODIMG -comp xz +_exec "mksquashfs $MODLOOP $STAGING/$MODIMG -comp xz" -mkinitfs -q -b $ROOT -F "$features base squashfs" -o "$STAGING/$FLAVOR.gz" \ - "$KVER" +_exec "mkinitfs -q -b $ROOT -F '$features base squashfs' \ + -o '$STAGING/$FLAVOR.gz' '$KVER'" cp "$BOOT/vmlinuz$KVER_FLAVOR" "$STAGING/$FLAVOR" |