| Message ID | 20260220144259.1876444-1-wzh@ilbers.de |
|---|---|
| State | Under Review |
| Headers | show |
| Series | [v2] qemuarm-trixie: Workaround with missing drivers in qemuarm-trixie initramfs | expand |
On 20.02.26 15:42, Zhihang Wei wrote: > This is a workaround to fix the current qemuarm-trixie image unbootable > issue. > > Starting with Debian Trixie, update-initramfs invokes "dracut-install" > to collect and install required drivers into the generated initramfs. > "dracut-install" relies on fts_open() / fts_read() from glibc to > traverse directories and locate drivers. > > Due to a long-standing bug [1] between qemu and glibc, the fts_* > functions may fail to find files on certain 32-bit architectures. As a > result, required modules such as virtio_blk are not detected and not > added to the initramfs. The produced image then fails to boot under > qemu because the block device driver is missing. > > A similiar dracut bug report was filed in 2024 [2], pointing to this > upstream glibc issue reported in 2018 [1]. No upstream fix has been > applied, and the issue appears to affect only qemu builds for specific > 32-bit targets. > > As a temporary workaround, use a customized initramfs-hook to append > the neccessary drivers that are currently missed from the initramfs. > > For a complete fix, we either need to push for an upstream glibc/qemu > fix, or convince dracut to avoid using these non-POSIX fts_* functions > and use opendir() / readdir() instead. > > [1] https://sourceware.org/bugzilla/show_bug.cgi?id=23960 > [2] https://bugs-devel.debian.org/cgi-bin/bugreport.cgi?bug=1079443 > > Signed-off-by: Zhihang Wei <wzh@ilbers.de> > --- > Changes in v2: > - Use initramfs-hook to install the driver, instead of adding another > variable > > meta-isar/conf/multiconfig/qemuarm-trixie.conf | 4 +++- > .../initramfs-virtio-blk-hook_0.1.bb | 8 ++++++++ > 2 files changed, 11 insertions(+), 1 deletion(-) > create mode 100644 meta/recipes-initramfs/initramfs-virtio-blk-hook/initramfs-virtio-blk-hook_0.1.bb > > diff --git a/meta-isar/conf/multiconfig/qemuarm-trixie.conf b/meta-isar/conf/multiconfig/qemuarm-trixie.conf > index 5600ab23..20eecd92 100644 > --- a/meta-isar/conf/multiconfig/qemuarm-trixie.conf > +++ b/meta-isar/conf/multiconfig/qemuarm-trixie.conf > @@ -1,7 +1,9 @@ > # This software is a part of Isar. > -# Copyright (C) 2024 ilbers GmbH > +# Copyright (C) 2024-2026 ilbers GmbH > # > # SPDX-License-Identifier: MIT > > MACHINE ?= "qemuarm" > DISTRO ?= "debian-trixie" > + > +IMAGE_INSTALL += "initramfs-virtio-blk-hook" This covers the initramfs-tools based generation. What if someone enables dracut (kas/opt/dracut.yaml)? > diff --git a/meta/recipes-initramfs/initramfs-virtio-blk-hook/initramfs-virtio-blk-hook_0.1.bb b/meta/recipes-initramfs/initramfs-virtio-blk-hook/initramfs-virtio-blk-hook_0.1.bb > new file mode 100644 > index 00000000..229d91d6 > --- /dev/null > +++ b/meta/recipes-initramfs/initramfs-virtio-blk-hook/initramfs-virtio-blk-hook_0.1.bb > @@ -0,0 +1,8 @@ > +# This software is a part of Isar. > +# Copyright (C) 2026 ilbers GmbH > +# > +# SPDX-License-Identifier: MIT > + > +inherit initramfs-hook > + > +HOOK_ADD_MODULES = "virtio-blk" Jan
On 2/20/26 16:36, Jan Kiszka wrote: > On 20.02.26 15:42, Zhihang Wei wrote: >> This is a workaround to fix the current qemuarm-trixie image unbootable >> issue. >> >> Starting with Debian Trixie, update-initramfs invokes "dracut-install" >> to collect and install required drivers into the generated initramfs. >> "dracut-install" relies on fts_open() / fts_read() from glibc to >> traverse directories and locate drivers. >> >> Due to a long-standing bug [1] between qemu and glibc, the fts_* >> functions may fail to find files on certain 32-bit architectures. As a >> result, required modules such as virtio_blk are not detected and not >> added to the initramfs. The produced image then fails to boot under >> qemu because the block device driver is missing. >> >> A similiar dracut bug report was filed in 2024 [2], pointing to this >> upstream glibc issue reported in 2018 [1]. No upstream fix has been >> applied, and the issue appears to affect only qemu builds for specific >> 32-bit targets. >> >> As a temporary workaround, use a customized initramfs-hook to append >> the neccessary drivers that are currently missed from the initramfs. >> >> For a complete fix, we either need to push for an upstream glibc/qemu >> fix, or convince dracut to avoid using these non-POSIX fts_* functions >> and use opendir() / readdir() instead. >> >> [1] https://sourceware.org/bugzilla/show_bug.cgi?id=23960 >> [2] https://bugs-devel.debian.org/cgi-bin/bugreport.cgi?bug=1079443 >> >> Signed-off-by: Zhihang Wei <wzh@ilbers.de> >> --- >> Changes in v2: >> - Use initramfs-hook to install the driver, instead of adding another >> variable >> >> meta-isar/conf/multiconfig/qemuarm-trixie.conf | 4 +++- >> .../initramfs-virtio-blk-hook_0.1.bb | 8 ++++++++ >> 2 files changed, 11 insertions(+), 1 deletion(-) >> create mode 100644 meta/recipes-initramfs/initramfs-virtio-blk-hook/initramfs-virtio-blk-hook_0.1.bb >> >> diff --git a/meta-isar/conf/multiconfig/qemuarm-trixie.conf b/meta-isar/conf/multiconfig/qemuarm-trixie.conf >> index 5600ab23..20eecd92 100644 >> --- a/meta-isar/conf/multiconfig/qemuarm-trixie.conf >> +++ b/meta-isar/conf/multiconfig/qemuarm-trixie.conf >> @@ -1,7 +1,9 @@ >> # This software is a part of Isar. >> -# Copyright (C) 2024 ilbers GmbH >> +# Copyright (C) 2024-2026 ilbers GmbH >> # >> # SPDX-License-Identifier: MIT >> >> MACHINE ?= "qemuarm" >> DISTRO ?= "debian-trixie" >> + >> +IMAGE_INSTALL += "initramfs-virtio-blk-hook" > This covers the initramfs-tools based generation. What if someone > enables dracut (kas/opt/dracut.yaml)? A pure dracut generated initramfs for qemuarm-trixie cannot boot. It surprisingly has virtio_blk, but still not bootable. Need to find the reason. Actually, there should be more drivers installed into initramfs by initramfs-tools, but they are now missing due to the same bug. Adding virtio-blk just makes this initramfs-tools generated initramfs "minimally" bootable. My guess is that the dracut generated initramfs is missing some other necessary drivers. Zhihang >> diff --git a/meta/recipes-initramfs/initramfs-virtio-blk-hook/initramfs-virtio-blk-hook_0.1.bb b/meta/recipes-initramfs/initramfs-virtio-blk-hook/initramfs-virtio-blk-hook_0.1.bb >> new file mode 100644 >> index 00000000..229d91d6 >> --- /dev/null >> +++ b/meta/recipes-initramfs/initramfs-virtio-blk-hook/initramfs-virtio-blk-hook_0.1.bb >> @@ -0,0 +1,8 @@ >> +# This software is a part of Isar. >> +# Copyright (C) 2026 ilbers GmbH >> +# >> +# SPDX-License-Identifier: MIT >> + >> +inherit initramfs-hook >> + >> +HOOK_ADD_MODULES = "virtio-blk" > Jan >
On 20.02.26 16:55, Zhihang Wei wrote: > > > On 2/20/26 16:36, Jan Kiszka wrote: >> On 20.02.26 15:42, Zhihang Wei wrote: >>> This is a workaround to fix the current qemuarm-trixie image unbootable >>> issue. >>> >>> Starting with Debian Trixie, update-initramfs invokes "dracut-install" >>> to collect and install required drivers into the generated initramfs. >>> "dracut-install" relies on fts_open() / fts_read() from glibc to >>> traverse directories and locate drivers. >>> >>> Due to a long-standing bug [1] between qemu and glibc, the fts_* >>> functions may fail to find files on certain 32-bit architectures. As a >>> result, required modules such as virtio_blk are not detected and not >>> added to the initramfs. The produced image then fails to boot under >>> qemu because the block device driver is missing. >>> >>> A similiar dracut bug report was filed in 2024 [2], pointing to this >>> upstream glibc issue reported in 2018 [1]. No upstream fix has been >>> applied, and the issue appears to affect only qemu builds for specific >>> 32-bit targets. >>> >>> As a temporary workaround, use a customized initramfs-hook to append >>> the neccessary drivers that are currently missed from the initramfs. >>> >>> For a complete fix, we either need to push for an upstream glibc/qemu >>> fix, or convince dracut to avoid using these non-POSIX fts_* functions >>> and use opendir() / readdir() instead. >>> >>> [1] https://sourceware.org/bugzilla/show_bug.cgi?id=23960 >>> [2] https://bugs-devel.debian.org/cgi-bin/bugreport.cgi?bug=1079443 >>> >>> Signed-off-by: Zhihang Wei <wzh@ilbers.de> >>> --- >>> Changes in v2: >>> - Use initramfs-hook to install the driver, instead of adding another >>> variable >>> >>> meta-isar/conf/multiconfig/qemuarm-trixie.conf | 4 +++- >>> .../initramfs-virtio-blk-hook_0.1.bb | 8 ++++++++ >>> 2 files changed, 11 insertions(+), 1 deletion(-) >>> create mode 100644 meta/recipes-initramfs/initramfs-virtio-blk- >>> hook/initramfs-virtio-blk-hook_0.1.bb >>> >>> diff --git a/meta-isar/conf/multiconfig/qemuarm-trixie.conf b/meta- >>> isar/conf/multiconfig/qemuarm-trixie.conf >>> index 5600ab23..20eecd92 100644 >>> --- a/meta-isar/conf/multiconfig/qemuarm-trixie.conf >>> +++ b/meta-isar/conf/multiconfig/qemuarm-trixie.conf >>> @@ -1,7 +1,9 @@ >>> # This software is a part of Isar. >>> -# Copyright (C) 2024 ilbers GmbH >>> +# Copyright (C) 2024-2026 ilbers GmbH >>> # >>> # SPDX-License-Identifier: MIT >>> MACHINE ?= "qemuarm" >>> DISTRO ?= "debian-trixie" >>> + >>> +IMAGE_INSTALL += "initramfs-virtio-blk-hook" >> This covers the initramfs-tools based generation. What if someone >> enables dracut (kas/opt/dracut.yaml)? > A pure dracut generated initramfs for qemuarm-trixie cannot boot. It > surprisingly has virtio_blk, but still not bootable. Need to find the > reason. > > Actually, there should be more drivers installed into initramfs by > initramfs-tools, but they are now missing due to the same bug. Adding > virtio-blk just makes this initramfs-tools generated initramfs > "minimally" bootable. My guess is that the dracut generated initramfs > is missing some other necessary drivers. initramfs and "necessary" drivers is tricky for us. Normally, those are probed on the machine that will use the initramfs afterwards, but that does not work with Isar. With trixie, some unconditionally installed modules were dropped, and that already caused extra efforts downstream (unless you are on Debian kernels, it's often best to simply compile them in). But maybe there is more involved with plain dracut, and Quirin has some idea. Jan
diff --git a/meta-isar/conf/multiconfig/qemuarm-trixie.conf b/meta-isar/conf/multiconfig/qemuarm-trixie.conf index 5600ab23..20eecd92 100644 --- a/meta-isar/conf/multiconfig/qemuarm-trixie.conf +++ b/meta-isar/conf/multiconfig/qemuarm-trixie.conf @@ -1,7 +1,9 @@ # This software is a part of Isar. -# Copyright (C) 2024 ilbers GmbH +# Copyright (C) 2024-2026 ilbers GmbH # # SPDX-License-Identifier: MIT MACHINE ?= "qemuarm" DISTRO ?= "debian-trixie" + +IMAGE_INSTALL += "initramfs-virtio-blk-hook" diff --git a/meta/recipes-initramfs/initramfs-virtio-blk-hook/initramfs-virtio-blk-hook_0.1.bb b/meta/recipes-initramfs/initramfs-virtio-blk-hook/initramfs-virtio-blk-hook_0.1.bb new file mode 100644 index 00000000..229d91d6 --- /dev/null +++ b/meta/recipes-initramfs/initramfs-virtio-blk-hook/initramfs-virtio-blk-hook_0.1.bb @@ -0,0 +1,8 @@ +# This software is a part of Isar. +# Copyright (C) 2026 ilbers GmbH +# +# SPDX-License-Identifier: MIT + +inherit initramfs-hook + +HOOK_ADD_MODULES = "virtio-blk"
This is a workaround to fix the current qemuarm-trixie image unbootable issue. Starting with Debian Trixie, update-initramfs invokes "dracut-install" to collect and install required drivers into the generated initramfs. "dracut-install" relies on fts_open() / fts_read() from glibc to traverse directories and locate drivers. Due to a long-standing bug [1] between qemu and glibc, the fts_* functions may fail to find files on certain 32-bit architectures. As a result, required modules such as virtio_blk are not detected and not added to the initramfs. The produced image then fails to boot under qemu because the block device driver is missing. A similiar dracut bug report was filed in 2024 [2], pointing to this upstream glibc issue reported in 2018 [1]. No upstream fix has been applied, and the issue appears to affect only qemu builds for specific 32-bit targets. As a temporary workaround, use a customized initramfs-hook to append the neccessary drivers that are currently missed from the initramfs. For a complete fix, we either need to push for an upstream glibc/qemu fix, or convince dracut to avoid using these non-POSIX fts_* functions and use opendir() / readdir() instead. [1] https://sourceware.org/bugzilla/show_bug.cgi?id=23960 [2] https://bugs-devel.debian.org/cgi-bin/bugreport.cgi?bug=1079443 Signed-off-by: Zhihang Wei <wzh@ilbers.de> --- Changes in v2: - Use initramfs-hook to install the driver, instead of adding another variable meta-isar/conf/multiconfig/qemuarm-trixie.conf | 4 +++- .../initramfs-virtio-blk-hook_0.1.bb | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 meta/recipes-initramfs/initramfs-virtio-blk-hook/initramfs-virtio-blk-hook_0.1.bb