#!/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 DESTDIR=$1 MNTDIR= if [ -z "$DESTDIR" ]; then 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 fi remount() { mount $1 -o remount "$MNTDIR" } ignore_sigs() { trap "" $SIGNALS } clean_up() { set +e ignore_sigs apk del -q $VIRTUAL rm -fr "$TMPDIR" } trap clean_up EXIT $SIGNALS apk add -qU -t $VIRTUAL mkinitfs squashfs-tools . /etc/mkinitfs/mkinitfs.conf FLAVOR=$(uname -r | cut -d - -f 3-) KVER_FLAVOR=-$FLAVOR if [ -z "$FLAVOR" ]; then FLAVOR=vanilla KVER_FLAVOR= fi TMPDIR=$(mktemp -dt $SCRIPT.XXXXXX) ROOT=$TMPDIR/root _apk() { local cmd=$1 shift apk $cmd -p "$ROOT" --keys-dir /etc/apk/keys \ --repositories-file /etc/apk/repositories $* } add_pkgs() { _apk add -q --no-scripts $* } extra_pkgs() { local res=$(_apk search -x $1) if [ "$res" ]; then add_pkgs $* fi } add_pkgs -U --initdb alpine-base linux-$FLAVOR linux-firmware extra_pkgs dahdi-linux-$FLAVOR dahdi-linux extra_pkgs xtables-addons-$FLAVOR 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 -q -F "$features squashfs" -b "$ROOT" -o "$STAGING/$FLAVOR.gz" $KVER cp "$ROOT/boot/vmlinuz$KVER_FLAVOR" "$STAGING/$FLAVOR" if [ "$MNTDIR" ]; then ignore_sigs remount -w rm -f "$DESTDIR/$MODIMG" fi mv "$STAGING"/* "$DESTDIR" if [ "$MNTDIR" ]; then set +e sync remount -r fi exit 0