Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Bug#1020396: systemd-boot: kernel installation/initrd update hooks double the initrd like #970213 since #826045

15 views
Skip to first unread message

наб

unread,
Sep 20, 2022, 9:30:03 PM9/20/22
to
Package: systemd-boot
Version: 251.4-3
Severity: normal
Tags: patch

Dear Maintainer,

In the default installation, both a bare initrd and a versioned one are
installed:
/boot/efi/HASH/5.16.0-1-amd64/initrd.img-5.16.0-1-amd64
/boot/efi/HASH/5.16.0-1-amd64/linux
/boot/efi/HASH/5.16.0-1-amd64/initrd

In #970213, I worked around this by only installing the generated
as the standard "initrd" fallback if none was passed;
I've been using a simple
#!/bin/sh
bootctl is-installed > /dev/null || exit 0
exec kernel-install add "$1" "/boot/vmlinuz-$1" "/boot/initrd.img-$1"
/etc/kernel/postinst.d/kernel-install (and analogous remove),
so this works for that case perfectly.

In #826045, upstream hooks were added:
debian/extra/kernel/post{inst,rm}.d/systemd-boot
(74127387dacf23f037f3a55a808951fae93024c6)
and
debian/extra/initramfs/post-update.d/systemd-boot
(9a6d87f1c6f7fbde8ff8e7beab30973944221244)
to integrate with bootctl out-of-box. This is great!

However, /etc/kernel/postinst.d/systemd-boot runs:
kernel-install add "$1" "$2"
and /etc/initramfs/post-update.d/systemd-boot runs:
kernel-install add "$1" "/boot/vmlinuz-$1" "$2"

And the former installs:
/boot/efi/HASH/5.16.0-1-amd64/linux
/boot/efi/HASH/5.16.0-1-amd64/initrd
but the latter installs:
/boot/efi/HASH/5.16.0-1-amd64/initrd.img-5.16.0-1-amd64
/boot/efi/HASH/5.16.0-1-amd64/linux
hence the situation at the top I wanted to avoid in #970213;
ESPs tend to be really small!

I've opened MR 169 on Salsa:
https://salsa.debian.org/systemd-team/systemd/-/merge_requests/169
and am attaching a patch for this that makes it so
/etc/kernel/postinst.d/systemd-boot calls
kernel-install add "$1" "$2" "/boot/initrd.img-$1"
if the latter exists, and the previous
kernel-install add "$1" "$2"
otherwise, which always installs the versioned initrd,
as well as one that will order this bootloader hook
with the other bootloader hooks at the end (cf. message).


Installation logs that demonstrate this follow.

Implicit image:
root@zoot2:~# kernel-install -v add $(uname -r) /boot/vmlinuz-5.16.0-1-amd64
Reading /usr/lib/kernel/install.conf…
BOOT_ROOT=/tmp/br set via environment or install.conf
machine-id d42f27f4670847aeae24b01bd283a4e0 acquired from /etc/machine-id
Entry-token candidates: d42f27f4670847aeae24b01bd283a4e0 debian Default
/tmp/br/d42f27f4670847aeae24b01bd283a4e0 exists, using BOOT_ROOT=/tmp/br, ENTRY_TOKEN=d42f27f4670847aeae24b01bd283a4e0
/tmp/br/d42f27f4670847aeae24b01bd283a4e0 exists, using layout=bls
Using ENTRY_DIR_ABS=/tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64
Plugin files:
/usr/lib/kernel/install.d/50-depmod.install
/usr/lib/kernel/install.d/85-initrd.install
/usr/lib/kernel/install.d/90-loaderentry.install
+mkdir -v -p /tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64
mkdir: created directory '/tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64'
+/usr/lib/kernel/install.d/50-depmod.install add 5.16.0-1-amd64 /tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64 /boot/vmlinuz-5.16.0-1-amd64
+depmod -a 5.16.0-1-amd64
+/usr/lib/kernel/install.d/85-initrd.install add 5.16.0-1-amd64 /tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64 /boot/vmlinuz-5.16.0-1-amd64
Installing '/boot/initrd.img-5.16.0-1-amd64' as '/tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64/initrd'
+/usr/lib/kernel/install.d/90-loaderentry.install add 5.16.0-1-amd64 /tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64 /boot/vmlinuz-5.16.0-1-amd64
Creating /tmp/br/loader/entries/d42f27f4670847aeae24b01bd283a4e0-5.16.0-1-amd64.conf
root@zoot2:~# find /tmp/br/
/tmp/br/
/tmp/br/loader
/tmp/br/loader/entries
/tmp/br/loader/entries/d42f27f4670847aeae24b01bd283a4e0-5.16.0-1-amd64.conf
/tmp/br/d42f27f4670847aeae24b01bd283a4e0
/tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64
/tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64/linux
/tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64/initrd

Explicit image:
root@zoot2:~# kernel-install -v add $(uname -r) /boot/vmlinuz-5.16.0-1-amd64 /boot/initrd.img-5.16.0-1-amd64
Reading /usr/lib/kernel/install.conf…
BOOT_ROOT=/tmp/br set via environment or install.conf
machine-id d42f27f4670847aeae24b01bd283a4e0 acquired from /etc/machine-id
Entry-token candidates: d42f27f4670847aeae24b01bd283a4e0 debian Default
/tmp/br/d42f27f4670847aeae24b01bd283a4e0 exists, using BOOT_ROOT=/tmp/br, ENTRY_TOKEN=d42f27f4670847aeae24b01bd283a4e0
/tmp/br/d42f27f4670847aeae24b01bd283a4e0 exists, using layout=bls
Using ENTRY_DIR_ABS=/tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64
Plugin files:
/usr/lib/kernel/install.d/50-depmod.install
/usr/lib/kernel/install.d/85-initrd.install
/usr/lib/kernel/install.d/90-loaderentry.install
+mkdir -v -p /tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64
mkdir: created directory '/tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64'
+/usr/lib/kernel/install.d/50-depmod.install add 5.16.0-1-amd64 /tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64 /boot/vmlinuz-5.16.0-1-amd64 /boot/initrd.img-5.16.4
+depmod -a 5.16.0-1-amd64
+/usr/lib/kernel/install.d/85-initrd.install add 5.16.0-1-amd64 /tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64 /boot/vmlinuz-5.16.0-1-amd64 /boot/initrd.img-5.16.4
+/usr/lib/kernel/install.d/90-loaderentry.install add 5.16.0-1-amd64 /tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64 /boot/vmlinuz-5.16.0-1-amd64 /boot/initrd.img-4
Installing /tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64/initrd.img-5.16.0-1-amd64
Creating /tmp/br/loader/entries/d42f27f4670847aeae24b01bd283a4e0-5.16.0-1-amd64.conf
root@zoot2:~# find /tmp/br/
/tmp/br/
/tmp/br/d42f27f4670847aeae24b01bd283a4e0
/tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64
/tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64/initrd.img-5.16.0-1-amd64
/tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64/linux
/tmp/br/loader
/tmp/br/loader/entries
/tmp/br/loader/entries/d42f27f4670847aeae24b01bd283a4e0-5.16.0-1-amd64.conf

One then the other:
root@zoot2:~# kernel-install -v add $(uname -r) /boot/vmlinuz-5.16.0-1-amd64 /boot/initrd.img-5.16.0-1-amd64
Reading /usr/lib/kernel/install.conf…
BOOT_ROOT=/tmp/br set via environment or install.conf
machine-id d42f27f4670847aeae24b01bd283a4e0 acquired from /etc/machine-id
Entry-token candidates: d42f27f4670847aeae24b01bd283a4e0 debian Default
/tmp/br/d42f27f4670847aeae24b01bd283a4e0 exists, using BOOT_ROOT=/tmp/br, ENTRY_TOKEN=d42f27f4670847aeae24b01bd283a4e0
/tmp/br/d42f27f4670847aeae24b01bd283a4e0 exists, using layout=bls
Using ENTRY_DIR_ABS=/tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64
Plugin files:
/usr/lib/kernel/install.d/50-depmod.install
/usr/lib/kernel/install.d/85-initrd.install
/usr/lib/kernel/install.d/90-loaderentry.install
+mkdir -v -p /tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64
+/usr/lib/kernel/install.d/50-depmod.install add 5.16.0-1-amd64 /tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64 /boot/vmlinuz-5.16.0-1-amd64 /boot/initrd.img-5.16.4
+depmod -a 5.16.0-1-amd64
+/usr/lib/kernel/install.d/85-initrd.install add 5.16.0-1-amd64 /tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64 /boot/vmlinuz-5.16.0-1-amd64 /boot/initrd.img-5.16.4
+/usr/lib/kernel/install.d/90-loaderentry.install add 5.16.0-1-amd64 /tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64 /boot/vmlinuz-5.16.0-1-amd64 /boot/initrd.img-4
Installing /tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64/initrd.img-5.16.0-1-amd64
Creating /tmp/br/loader/entries/d42f27f4670847aeae24b01bd283a4e0-5.16.0-1-amd64.conf
root@zoot2:~# find /tmp/br/
/tmp/br/
/tmp/br/loader
/tmp/br/loader/entries
/tmp/br/loader/entries/d42f27f4670847aeae24b01bd283a4e0-5.16.0-1-amd64.conf
/tmp/br/d42f27f4670847aeae24b01bd283a4e0
/tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64
/tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64/initrd.img-5.16.0-1-amd64
/tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64/linux
/tmp/br/d42f27f4670847aeae24b01bd283a4e0/5.16.0-1-amd64/initrd

-- System Information:
Debian Release: 11.5
APT prefers stable-updates
APT policy: (500, 'stable-updates'), (500, 'stable-security'), (500, 'stable-debug'), (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 5.10.0-17-amd64 (SMP w/24 CPU threads)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_FIRMWARE_WORKAROUND, TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8), LANGUAGE=en_GB:en
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages systemd-boot depends on:
ii libc6 2.31-13+deb11u4
pn libsystemd-shared <none>
pn systemd-boot-efi <none>

Versions of packages systemd-boot recommends:
ii efibootmgr 17-1

systemd-boot suggests no packages.
signature.asc

Michael Biebl

unread,
Sep 28, 2022, 11:30:04 AM9/28/22
to
Control: tags -1 + pending

Supposed to be fixed by
https://salsa.debian.org/systemd-team/systemd/-/merge_requests/170

So marking as pending

Michael
OpenPGP_signature
0 new messages