Comment 35 for bug 759725

Revision history for this message
James Cuzella (trinitronx) wrote :

The "statoverride" script appears to work on the first run for each kernel. However, any subsequent times the `dpkg-statoverride` command exits with errorcode 2:

    $ apt-get install something-triggering-dkms

    Processing triggers for linux-image-5.4.0-96-generic (5.4.0-96.109) ...
    /etc/kernel/postinst.d/dkms:
     * dkms: running auto installation service for kernel 5.4.0-96-generic
       ...done.
    /etc/kernel/postinst.d/initramfs-tools:
    update-initramfs: Generating /boot/initrd.img-5.4.0-96-generic
    /etc/kernel/postinst.d/statoverride:
    dpkg-statoverride: error: an override for '/boot/vmlinuz-5.4.0-96-generic' already exists; aborting
    run-parts: /etc/kernel/postinst.d/statoverride exited with return code 2
    dpkg: error processing package linux-image-5.4.0-96-generic (--configure):
     installed linux-image-5.4.0-96-generic package post-installation script subprocess returned error exit status 1
    Errors were encountered while processing:
     linux-image-5.4.0-96-generic

    E: Sub-process /usr/bin/dpkg returned an error code (1)

Adding the `--force-statoverride-add` flag fixed the issue:

    #!/bin/sh

    # https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725

    set -e
    version="$1"
    if [ -z "$version" ]; then
        exit 0
    fi
    exec dpkg-statoverride --force-statoverride-add --update --add root root 0644 "/boot/vmlinuz-${version}"

After that change, now the kernel dkms trigger succeeds:

    Setting up linux-image-5.4.0-96-generic (5.4.0-96.109) ...
    Processing triggers for linux-image-5.4.0-96-generic (5.4.0-96.109) ...
    /etc/kernel/postinst.d/dkms:
     * dkms: running auto installation service for kernel 5.4.0-96-generic
       ...done.
    /etc/kernel/postinst.d/initramfs-tools:
    update-initramfs: Generating /boot/initrd.img-5.4.0-96-generic
    /etc/kernel/postinst.d/statoverride:
    dpkg-statoverride: warning: an override for '/boot/vmlinuz-5.4.0-96-generic' already exists, but --force specified so will be ignored
    /etc/kernel/postinst.d/zz-update-grub:
    Sourcing file `/etc/default/grub'
    Sourcing file `/etc/default/grub.d/init-select.cfg'
    Generating grub configuration file ...
    Found linux image: /boot/vmlinuz-5.4.0-96-generic
    Found initrd image: /boot/initrd.img-5.4.0-96-generic
    Found linux image: /boot/vmlinuz-5.4.0-94-generic
    Found initrd image: /boot/initrd.img-5.4.0-94-generic
    Found linux image: /boot/vmlinuz-5.4.0-91-generic
    Found initrd image: /boot/initrd.img-5.4.0-91-generic
    Found memtest86+ image: /boot/memtest86+.elf
    Found memtest86+ image: /boot/memtest86+.bin
    Found Ubuntu 20.04.3 LTS (20.04) on /dev/md126p1
    done

If this is to be added as a postinst.d to the libguestfs-tools package, please don't forget the `--force-statoverride-add` flag... or else we introduce a new dkms / kernel postinst.d trigger idempotency bug.