#!/bin/sh -e # update-kernel # # Kernel and firmware update script for Alpine installations set up # with setup-bootable # # Copyright (c) 2014 Timo Teräs # Copyright (c) 2014 Kaarle Ritvanen TMPDIR= SIGNALS="HUP INT TERM" SCRIPT=update-kernel VIRTUAL=.tmp-$SCRIPT while read MOUNT; do set -- $MOUNT [ $2 = /.modloop ] || continue DESTDIR=$(dirname $(losetup $1 | cut -d " " -f 3)) MNTDIR=$(dirname $DESTDIR) break done < /proc/mounts if [ -z "$MNTDIR" ]; then echo "Module loopback device not mounted" >&2 exit 1 fi remount() { mount $1 -o remount $MNTDIR } ignore_sigs() { trap "" $SIGNALS } clean_up() { set +e ignore_sigs apk del $VIRTUAL rm -fr $TMPDIR } trap clean_up EXIT $SIGNALS apk add -U --virtual $VIRTUAL mkinitfs squashfs-tools . /etc/mkinitfs/mkinitfs.conf ARCH=$(apk --print-arch) FLAVOR=$(uname -r | cut -d - -f 3-) TMPDIR=$(mktemp -dt $SCRIPT.XXXXXX) ROOT=$TMPDIR/root apk add --arch $ARCH --root $ROOT --keys-dir /etc/apk/keys \ --repositories /etc/apk/repositories \ --initdb -U alpine-base dahdi-linux linux-$FLAVOR linux-firmware KVER=$(ls $ROOT/lib/modules) depmod -b $ROOT $KVER STAGING=$TMPDIR/boot MODLOOP=$TMPDIR/modloop 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 mkinitfs -F "$features squashfs" -b $ROOT -o $STAGING/$FLAVOR.gz $KVER cp $ROOT/boot/vmlinuz-$FLAVOR $STAGING/$FLAVOR ignore_sigs remount -w rm -f $DESTDIR/$MODIMG mv $STAGING/* $DESTDIR set +e sync remount -r exit 0