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:
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.
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) ... kernel/ postinst. d/dkms: kernel/ postinst. d/initramfs- tools: initramfs: Generating /boot/initrd. img-5.4. 0-96-generic kernel/ postinst. d/statoverride: statoverride: error: an override for '/boot/ vmlinuz- 5.4.0-96- generic' already exists; aborting postinst. d/statoverride exited with return code 2 5.4.0-96- generic (--configure): 5.4.0-96- generic package post-installation script subprocess returned error exit status 1 image-5. 4.0-96- generic
/etc/
* dkms: running auto installation service for kernel 5.4.0-96-generic
...done.
/etc/
update-
/etc/
dpkg-
run-parts: /etc/kernel/
dpkg: error processing package linux-image-
installed linux-image-
Errors were encountered while processing:
linux-
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 statoverride- add --update --add root root 0644 "/boot/ vmlinuz- ${version} "
version="$1"
if [ -z "$version" ]; then
exit 0
fi
exec dpkg-statoverride --force-
After that change, now the kernel dkms trigger succeeds:
Setting up linux-image- 5.4.0-96- generic (5.4.0-96.109) ... 5.4.0-96- generic (5.4.0-96.109) ... kernel/ postinst. d/dkms: kernel/ postinst. d/initramfs- tools: initramfs: Generating /boot/initrd. img-5.4. 0-96-generic kernel/ postinst. d/statoverride: statoverride: warning: an override for '/boot/ vmlinuz- 5.4.0-96- generic' already exists, but --force specified so will be ignored kernel/ postinst. d/zz-update- grub: grub.d/ init-select. cfg' 5.4.0-96- generic img-5.4. 0-96-generic 5.4.0-94- generic img-5.4. 0-94-generic 5.4.0-91- generic img-5.4. 0-91-generic +.elf +.bin
Processing triggers for linux-image-
/etc/
* dkms: running auto installation service for kernel 5.4.0-96-generic
...done.
/etc/
update-
/etc/
dpkg-
/etc/
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-
Found initrd image: /boot/initrd.
Found linux image: /boot/vmlinuz-
Found initrd image: /boot/initrd.
Found linux image: /boot/vmlinuz-
Found initrd image: /boot/initrd.
Found memtest86+ image: /boot/memtest86
Found memtest86+ image: /boot/memtest86
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.