On Wed, Mar 09, 2011, Loïc Minier wrote: > I'm attaching a naive implementation which doesn't deal with removals > and only keeps track of the latest initrd ABI (not of the kernel one).
I had forgotten the actual flash-kernel call. I've also added a --supported test at the top in this v2. -- Loïc Minier
diff -Nru flash-kernel-2.39/debian/changelog flash-kernel-2.40/debian/changelog --- flash-kernel-2.39/debian/changelog 2011-03-02 18:59:05.000000000 +0100 +++ flash-kernel-2.40/debian/changelog 2011-03-09 04:37:13.000000000 +0100 @@ -1,3 +1,16 @@ +flash-kernel (2.40) UNRELEASED; urgency=low + + * Add support for triggers. + * Add support for tracking and installing only the highest kernel ABI. + - Add /etc/initramfs/post-update.d/flash-kernel: write kernel ABI to + /var/lib/flash-kernel/highest-abi only if it's the highest we've seen, + and call flash-kernel. + - Change flash-kernel to call itself with + /var/lib/flash-kernel/highest-abi as the explicit ABI to install if it's + present. + + -- Loïc Minier <[email protected]> Wed, 09 Mar 2011 02:14:19 +0100 + flash-kernel (2.39) unstable; urgency=low * Add support for Buffalo Linkstation LiveV3 (LS-CHL). Closes: #612167 diff -Nru flash-kernel-2.39/debian/dirs flash-kernel-2.40/debian/dirs --- flash-kernel-2.39/debian/dirs 2011-03-02 18:59:05.000000000 +0100 +++ flash-kernel-2.40/debian/dirs 2011-03-09 04:04:15.000000000 +0100 @@ -1 +1,2 @@ usr/sbin +var/lib/flash-kernel diff -Nru flash-kernel-2.39/debian/flash-kernel.postinst flash-kernel-2.40/debian/flash-kernel.postinst --- flash-kernel-2.39/debian/flash-kernel.postinst 1970-01-01 01:00:00.000000000 +0100 +++ flash-kernel-2.40/debian/flash-kernel.postinst 2011-03-09 02:19:34.000000000 +0100 @@ -0,0 +1,9 @@ +#!/bin/sh + +set -e + +if [ "$1" = "triggered" ]; then + FLASH_KERNEL_NOTRIGGER=y flash-kernel +fi + +#DEBHELPER# diff -Nru flash-kernel-2.39/debian/initramfs/post-update.d/flash-kernel flash-kernel-2.40/debian/initramfs/post-update.d/flash-kernel --- flash-kernel-2.39/debian/initramfs/post-update.d/flash-kernel 1970-01-01 01:00:00.000000000 +0100 +++ flash-kernel-2.40/debian/initramfs/post-update.d/flash-kernel 2011-03-09 04:36:44.000000000 +0100 @@ -0,0 +1,35 @@ +#!/bin/sh + +set -e + +if [ $# != 2 ]; then + echo "$0 called without expected arguments (ABI and initrd)" >&2 + exit 1 +fi + +abi="$1" +# ignored for now +_initrd="$2" + +if ! flash-kernel --supported; then + exit 0 +fi + +ABI_FILE="/var/lib/flash-kernel/highest-abi" + +current="" +if [ -r "$ABI_FILE" ]; then + current="$(cat "$ABI_FILE")" +fi + +if dpkg --compare-version "$current" ge "$abi"; then + echo "$1: Current ABI $current is already as high or higher" >&2 + exit 0 +fi + +echo "$1: Updating to new ABI $abi" >&2 +echo "$abi" >"$ABI_FILE.tmp" +mv -f "$ABI_FILE.tmp" "$ABI_FILE" + +flash-kernel + diff -Nru flash-kernel-2.39/debian/install flash-kernel-2.40/debian/install --- flash-kernel-2.39/debian/install 1970-01-01 01:00:00.000000000 +0100 +++ flash-kernel-2.40/debian/install 2011-03-09 04:04:33.000000000 +0100 @@ -0,0 +1 @@ +debian/initramfs/post-update.d/flash-kernel etc/initramfs/post-update.d/ diff -Nru flash-kernel-2.39/debian/triggers flash-kernel-2.40/debian/triggers --- flash-kernel-2.39/debian/triggers 1970-01-01 01:00:00.000000000 +0100 +++ flash-kernel-2.40/debian/triggers 2011-03-09 02:28:23.000000000 +0100 @@ -0,0 +1 @@ +interest flash-kernel diff -Nru flash-kernel-2.39/flash-kernel flash-kernel-2.40/flash-kernel --- flash-kernel-2.39/flash-kernel 2011-03-02 18:59:05.000000000 +0100 +++ flash-kernel-2.40/flash-kernel 2011-03-09 04:04:02.000000000 +0100 @@ -111,6 +111,9 @@ esac fi +# kernel + initrd installation/upgrade mode, with optional version + +# if an explicit version was given, just try installing that if [ -n "$1" ]; then kvers="$1" kfile="/boot/vmlinuz-$kvers" @@ -118,6 +121,31 @@ desc="Debian kernel $1" idesc="Debian ramdisk $1" else + # no version was given, just accumulate multiple calls in a trigger to + # only run flash-kernel once; the trigger will just call flash-kernel + # again with FLASH_KERNEL_NOTRIGGER set to force a real + if [ -z "$FLASH_KERNEL_NOTRIGGER" ] && [ -n "$DPKG_MAINTSCRIPT_PACKAGE" ] && dpkg-trigger --check-supported 2>/dev/null; then + # flash-kernel trigger isn't disabled, and we're called from + # some package maintainer script (e.g. some postinst calls + # flash-kernel), and dpkg-trigger is installed and confirms + # that the running dpkg support triggers: we can use the + # flash-kernel trigger (asynchronously) + if dpkg-trigger --no-await flash-kernel; then + exit 0 + fi + # dpkg-trigger failed for some reason, proceed to a normal run + fi + + # if the highest ABI file information is present, call ourselves again + # in "install kernel and initrd for this ABI" mode + ABI_FILE="/var/lib/flash-kernel/highest-abi" + if [ -r "$ABI_FILE" ]; then + abi="$(cat "$ABI_FILE")" + if [ -n "$abi" ]; then + exec flash-kernel "$abi" + fi + fi + if [ -e /vmlinuz ]; then kfile=/vmlinuz ifile=/initrd.img

