Debian Patches

Status for dracut/112-6

Patch Description Author Forwarded Bugs Origin Last update
fix-busybox-do-not-install-blkid-unconditionally.patch fix(busybox): do not install blkid unconditionally
The busybox `blkid` applet does not support the option `-o` and `-s`,
but `blkid` is used with those options in
`modules.d/70dmsquash-live-autooverlay/create-overlay.sh` and
`modules.d/70dmsquash-live/dmsquash-live-root.sh`.

So always exclude the `blkid` busybox applet.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/059d602de0e48ce8acd83f03cec443be69ba6aa9 2026-09-05
feat-dracut-add-prefer-option.patch feat(dracut): add --prefer option
Add a `--prefer` option and a `prefer_dracutmodules` config option to
specify Dracut modules that should be included if their preconditions
are met.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/4b8c11c0590b546e37908968042eaf7c7d669b17 2026-09-03
feat-debian.conf-prefer-busybox.patch feat(debian.conf): prefer busybox
Include busybox on Debian/Ubuntu if available. This reduces the size of
the initrd significantly. Some data for Ubuntu 26.04 LTS "resolute"
using the current `ubuntu:rolling` container with a modified test 10.
The data is collected with `ls -l` and `3cpio --examine`.

## Without plymouth

An initrd without plymouth and without busybox uses 42.0 MB (42001866
bytes) when zstd compressed:

```
Start End Size Compr. Extracted
0 B 92.0 kB 92.0 kB cpio 91.1 kB
92.0 kB 17.3 MB 17.2 MB cpio 17.0 MB
17.3 MB 42.0 MB 24.7 MB zstd 77.9 MB
```

The same initrd with busybox needs only 37.9 MB (37861705 bytes) when
zstd compressed:

```
Start End Size Compr. Extracted
0 B 92.0 kB 92.0 kB cpio 91.1 kB
92.0 kB 17.3 MB 17.2 MB cpio 17.0 MB
17.3 MB 37.9 MB 20.6 MB zstd 65.4 MB
```

So 4.1 MB (9.9 %) disk space is saved and 12.5 MB (16.0 %) memory after
decompression is saved.

## With plymouth

An initrd with plymouth and without busybox uses 49.5 MB (49493709
bytes) when zstd compressed:

```
Start End Size Compr. Extracted
0 B 92.0 kB 92.0 kB cpio 91.1 kB
92.0 kB 17.3 MB 17.2 MB cpio 17.1 MB
17.3 MB 49.5 MB 32.2 MB zstd 99.4 MB
```

The same initrd with busybox needs only 45.3 MB (45348147 bytes) when
zstd compressed:

```
Start End Size Compr. Extracted
0 B 92.0 kB 92.0 kB cpio 91.1 kB
92.0 kB 17.3 MB 17.2 MB cpio 17.1 MB
17.3 MB 45.3 MB 28.0 MB zstd 86.9 MB
```

So 4.1 MB (8.4 %) disk space is saved and 12.5 MB (12.6 %) memory after
decompression is saved.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/aa2229dc9e272029e7e98f95bec954d0a64fe697 2026-09-03
fix-nbd-use-usr-sbin-nbd-client-for-CONFIG_FEATURE_PREFER.patch fix(nbd): use /usr/sbin/nbd-client for CONFIG_FEATURE_PREFER_APPLETS
The busybox Dracut modules skips installing some incompatible applets.
This workaround has no effect in case busybox was built with
`CONFIG_FEATURE_PREFER_APPLETS`. The Debian/Ubuntu busybox-static
package is built with that option. This causes the NBD test to fail:

```
$ TEST_CONTAINER_COMMAND="apt update && apt install --yes busybox-static" test/test.sh ubuntu:devel 72
[...]
[ 1.345256] dracut-initqueue[634]: nbd-client: unrecognized option '-check'
[ 1.346137] dracut-initqueue[634]: BusyBox v1.38.0 (Ubuntu 1:1.38.0-3ubuntu1) multi-call binary.
[ 1.346719] dracut-initqueue[634]: Usage: nbd-client { [-b BLKSIZE] [-N NAME] [-t SEC] [-p] HOST [PORT] | -d } BLOCKDEV
[ 1.347399] dracut-initqueue[634]: Connect to HOST and provide network block device on BLOCKDEV
[ 1.348014] dracut-initqueue[635]: nbd-client: unrecognized option '-systemd-mark'
[ 1.348493] dracut-initqueue[635]: BusyBox v1.38.0 (Ubuntu 1:1.38.0-3ubuntu1) multi-call binary.
[ 1.349055] dracut-initqueue[635]: Usage: nbd-client { [-b BLKSIZE] [-N NAME] [-t SEC] [-p] HOST [PORT] | -d } BLOCKDEV
[ 1.349710] dracut-initqueue[635]: Connect to HOST and provide network block device on BLOCKDEV
```

So use absolute paths for `nbd-client` to avoid using the applet when
running shell code in busybox shell.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> yes debian 2026-09-06
test-BUSYBOX-check-built-with-CONFIG_FEATURE_TR_CLASSES.patch test(BUSYBOX): check built with CONFIG_FEATURE_TR_CLASSES
Dracut uses code like `tr '[:upper:]' '[:lower:]'` that require the
busybox feature `CONFIG_FEATURE_TR_CLASSES`.

Instead of documenting this requirement somewhere, add a test case for
it.

See https://github.com/dracut-ng/dracut/issues/2687
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/7cc3a8e53ae7501c8bb21f21f9b6f54026d8b9a8 2026-09-07
feat-lsinitrd-use-extractinitrd.patch feat(lsinitrd): use extractinitrd
Simplify the `lsinitrd` code by using the new `extractinitrd` helper
tool. Either `3cpio` or `extractinitrd` will be needed.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/caba9a160918b9ecd06c3e627f77d3d9aea7afc5 2026-08-24
refactor-dracut-initramfs-restore-add-extract_initrd.patch refactor(dracut-initramfs-restore): add extract_initrd
Add a `extract_initrd` function to make it easier to add support for
3cpio.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/30802ca29987f090d8c14de358728dbe5c66c376 2026-08-24
feat-dracut-initramfs-restore-support-3cpio.patch feat(dracut-initramfs-restore): support 3cpio
Support using `3cpio` in `dracut-initramfs-restore` if available.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/8b683e6a60d4f37790e0d44b2c1c41c4a186545a 2026-08-24
feat-dracut-initramfs-restore-use-extractinitrd.patch feat(dracut-initramfs-restore): use extractinitrd
Simplify the `dracut-initramfs-restore` code by using the new
`extractinitrd` helper tool. Either `3cpio` or `extractinitrd` will be
needed.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/83873dc72d6b44ee0db141b6e97cb341d3d898cc 2026-08-24
chore-remove-skipcpio.patch chore: remove skipcpio
The helper command `skipcpio` has been replaced by `extractcpio` and is
not used anywhere anymore.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/adf8329557fd8542d2287132f496d6f74c76261c 2026-08-24
fix-znet-support-mktemp-applet-from-busybox-in-module-set.patch fix(znet): support mktemp applet from busybox in module-setup.sh
busybox's `mktemp` applet does not support the long form `--tmpdir` but
it supports the short form `-p`.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/dcbe20e146b570ac3bff80bbebccd2fca973879e 2026-08-27
test-support-mktemp-applet-from-busybox.patch test: support mktemp applet from busybox
busybox's `mktemp` applet does not support the long form `--directory`
but it supports the short form `-d`.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/725caac7a27a4e3adc4abb262ed0e6635355a6c6 2026-08-27
fix-dracut-remove-allows-removing-files-from-the-host-fil.patch fix(dracut): --remove allows removing files from the host filesystem
The dracut temporary directory is under /var/tmp/dracut.???????/initramfs, so
using ".." specifiers in the path allows escaping from it.

E.g.:

```
$ mkdir /hostdir && ls -l /hostdir
total 0
$ dracut -f --remove "../../../../hostdir" test.img
$ ls -l /hostdir
```

Fixes f8dfe3ee5b958262c38a821b15443893e400dba0
Antonio Alvarez Feijoo <antonio.feijoo@suse.com> no upstream, https://github.com/dracut-ng/dracut/commit/1abc4e0594aaeadf364774db9eb343d1ccd3572b 2026-08-04
refactor-net-lib-use-strip_non_digits-to-validate-iSCSI-L.patch refactor(net-lib): use strip_non_digits() to validate iSCSI LUN parameters

This function is a generalization of `_validate_iscsi_lun()`. It checks if the
first argument contains only digits; otherwise, it removes any non-digit
characters and prints a warning message.
Antonio Alvarez Feijoo <antonio.feijoo@suse.com> no upstream, https://github.com/dracut-ng/dracut/commit/b4f5fe23003dfc7f11449ccdd3b67cc115fbb029 2026-08-06
fix-net-lib-validate-iSCSI-port-parameters.patch fix(net-lib): validate iSCSI port parameters
Similar to 05c02db994ca322371a40695a3cc223faa1c7258, the iSCSI port is a number.
Validate that given ports are numbers.
Antonio Alvarez Feijoo <antonio.feijoo@suse.com> no upstream, https://github.com/dracut-ng/dracut/commit/c8bf7dc5428f0db589e7a73a0114fbb89cd957fa 2026-08-06
fix-dracut-systemd-actually-make-rd.break-pre-trigger-sto.patch fix(dracut-systemd): actually make rd.break=pre-trigger stop before pre-trigger

Currently, pre-trigger hooks are sourced before the breakpoint, not after. It's
the only `rd.break` option with this behavior, even all the non-systemd
breakpoints defined in 80base/init.sh work as intended.

Follow-up for 22137f9cac5ceb1a1d0ff8c5cab3d7bb8b582e33
Antonio Alvarez Feijoo <antonio.feijoo@suse.com> no upstream, https://github.com/dracut-ng/dracut/commit/a122c1fcac9f27d3f8a59f405a8b667430397f7f 2026-08-07
fix-systemd-cryptsetup-support-grep-applet-from-busybox-i.patch fix(systemd-cryptsetup): support grep applet from busybox in module-setup.sh

busybox's `grep` applet does not support the Perl regexp `-P`.

Use the extended regexp `-E` instead. This does not support the inline
Perl `(?i)` flag. So make the entire pattern case-insensitive.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/a2a8289052e9b94e1b28f945d65a4b3d9deb362f 2026-08-26
fix-url-lib-support-grep-applet-from-busybox-in-module-se.patch fix(url-lib): support grep applet from busybox in module-setup.sh
busybox's `grep` applet does not support the long form
`--binary-files=text` but it supports the short form `-a`.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/40d0ea72223ffc19fe7d68389a5d07f13fc03930 2026-08-26
fix-dmsquash-live-autooverlay-support-grep-applet-from-bu.patch fix(dmsquash-live-autooverlay): support grep applet from busybox
busybox's `grep` applet does not support the long form `--count` but it
supports the short form `-c`.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/84d912fc9195a8e572daa2c5a63d359dee66e40c 2026-08-26
fix-lsinitrd-do-no-sort-cpio-output-if-not-needed.patch fix(lsinitrd): do no sort cpio output if not needed
lsinitrd will try to sort the cpio output by the file which is normally
key 9, but this is not the case for special files. Therefore special
files are shown first:

```
drwxr-xr-x 2 root root 0 Aug 19 15:31 .
crw-r--r-- 1 root root 5, 1 Aug 19 15:31 dev/console
crw-r--r-- 1 root root 1, 11 Aug 19 15:31 dev/kmsg
crw-r--r-- 1 root root 1, 3 Aug 19 15:31 dev/null
crw-r--r-- 1 root root 1, 8 Aug 19 15:31 dev/random
crw-r--r-- 1 root root 1, 9 Aug 19 15:31 dev/urandom
lrwxrwxrwx 1 root root 7 Aug 19 15:31 bin -> usr/bin
drwxr-xr-x 2 root root 0 Aug 19 15:31 dev
drwxr-xr-x 2 root root 0 Aug 19 15:31 etc
[...]
```

This sorting is confusing and not needed in the normal case. Normally
the content of the cpio is already sorted. So removing the sorting. Then
the output is in correct order:

```
drwxr-xr-x 2 root root 0 Aug 19 15:31 .
lrwxrwxrwx 1 root root 7 Aug 19 15:31 bin -> usr/bin
drwxr-xr-x 2 root root 0 Aug 19 15:31 dev
crw-r--r-- 1 root root 5, 1 Aug 19 15:31 dev/console
crw-r--r-- 1 root root 1, 11 Aug 19 15:31 dev/kmsg
crw-r--r-- 1 root root 1, 3 Aug 19 15:31 dev/null
crw-r--r-- 1 root root 1, 8 Aug 19 15:31 dev/random
crw-r--r-- 1 root root 1, 9 Aug 19 15:31 dev/urandom
drwxr-xr-x 2 root root 0 Aug 19 15:31 etc
[...]
```
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/8aff42bafa89f6f6a549a78cd2f018033b354c4e 2026-08-20
feat-Makefile-switch-from-gnu99-to-gnu11-by-default.patch feat(Makefile): switch from gnu99 to gnu11 by default
Switch from `gnu99` to `gnu11` by default because this will be needed
for `static_assert`.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/00c62abecd1cfe77789bf8ddf77e17e26a72ab57 2026-08-20
feat-add-extractinitrd.patch feat: add extractinitrd
Add an `extractinitrd` helper command. This will allow simplifying
`lsinitrd` and will make `skipcpio` obsolete. The tool is based on
`unmkinitramfs` from Debian's initramfs-tools.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/07ce5cfa66372c6e25bc08589040d18015e93943 2026-08-24
fix-shutdown-make-timeout-call-busybox-compatible.patch fix(shutdown): make "timeout" call busybox-compatible
Busybox' "timeout" does not support long-form "--signal". Use short "-s"
instead.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Fiona Klute <fiona.klute@gmx.de> no upstream, https://github.com/dracut-ng/dracut/commit/8f5c7dd81bc039f8388c46ea2e8c8628aaffed03 2026-08-26
fix-dracut-functions-support-head-applet-from-busybox.patch fix(dracut-functions): support head applet from busybox
busybox's `head` applet does not support the long form `--bytes` but it
supports the short form `-c`.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/305a51dedb9999c0e974355b1c7320646a09c474 2026-08-26
fix-multipath-include-Debian-specific-priority-of-udev-ru.patch fix(multipath): include Debian-specific priority of udev rules
In Debian multipath-tools 0.13.0-1 carries
0004-Debian-specific-priority-of-udev-rules.patch which changes the
priority of udev rules with following reasoning:

11-dm-*.rules supposedly should apply after dmsetup rules, but in Debian
these have priority 55 instead of 11. Also for historic reasons,
multipath.rules and kpartx.rules have a slightly higher prio in Debian
than upstream.

The result is that kpartx is not run when booting, multipath disk
partitions are not found, and boot fails.

Until Debian/Ubuntu and upstream agrees on one common naming, include
the renumbered udev rules (similar to what has been done in the dm and
lvm Dracut modules).
Benjamin Drung <benjamin.drung@canonical.com> not-needed 2026-02-23
fix-net-lib-normalize-iSCSI-target-names-on-the-iqn.-eui..patch fix(net-lib): normalize iSCSI target names on the iqn./eui./naa. path

Commit 843af3e751782285cd2bc7c9a3a9d33e843fb91d added a
`normalized_iscsi_name()` call at the end of `parse_iscsi_root()`, but that
statement is only reachable via the legacy positional parsing path. When the
target name is matched by the `*:iqn.*` / `*:eui.*` / `*:naa.*` case statement,
the function returns before the normalization is ever applied.

Follow-up for 843af3e751782285cd2bc7c9a3a9d33e843fb91d
Antonio Alvarez Feijoo <antonio.feijoo@suse.com> no upstream, https://github.com/dracut-ng/dracut/commit/da39dde8f5f49a8a068b5fadb71d932fdf0712de 2026-08-03
fix-iscsi-do-not-source-the-boot-time-net-lib.sh-into-mod.patch fix(iscsi): do not source the boot-time net-lib.sh into module-setup.sh

That sources all of net-lib.sh into dracut.sh, not just the one function that
is wanted. net-lib.sh defines `iface_for_remote_addr()`, which is also defined
in dracut-functions.sh with a different implementation, so the boot-time version
silently replaces it for the rest of the run. The version in dracut-functions.sh
parses `ip -o route get` and prints nothing when the route has no dev token;
the version in net-lib.sh parses `ip route get` and prints the last field
unconditionally, so an unreachable route yields the literal string "unreachable"
as an interface name. `ip_params_for_remote_addr()` then builds a bogus `ip=`
line from it.

Usually boot-time libraries are not sourced into the generator, helpers on both
sides are duplicated instead, e.g.: `iface_for_remote_addr()`.

Fixes 843af3e751782285cd2bc7c9a3a9d33e843fb91d
Antonio Alvarez Feijoo <antonio.feijoo@suse.com> no upstream, https://github.com/dracut-ng/dracut/commit/e7db0f18807a4a29fc99b23e89408f30e515a11c 2026-08-03
fix-iscsi-normalize-the-target-name-in-the-generated-netr.patch fix(iscsi): normalize the target name in the generated netroot=
Commit 843af3e751782285cd2bc7c9a3a9d33e843fb91d normalized `rd.iscsi.initiator=`
but left the target name in the `netroot=` line on the next line unnormalized,
even though both come from the same sysfs session directory and are subject to
the same RFC 3722 rules.

Follow-up for 843af3e751782285cd2bc7c9a3a9d33e843fb91d
Antonio Alvarez Feijoo <antonio.feijoo@suse.com> no upstream, https://github.com/dracut-ng/dracut/commit/48f8b0263ffdf6e0ccbd529c7a5676de9da92972 2026-08-03
fix-dracut-remove-globbing-does-not-work.patch fix(dracut): --remove globbing does not work
The glob pattern is quoted in the call to `rm`, so it does not expand.

E.g.:

```
$ dracut -f --remove "/etc/udev/rules.d/*.rules" test.img
$ lsinitrd test.img | grep etc/udev/rules.d
drwxr-xr-x 1 root root 0 Aug 4 14:06 etc/udev/rules.d
-rw-r--r-- 1 root root 297 Jul 22 08:10 etc/udev/rules.d/59-persistent-storage.rules
-rw-r--r-- 1 root root 1030 Jul 22 08:10 etc/udev/rules.d/61-persistent-storage.rules
```

Fixes f8dfe3ee5b958262c38a821b15443893e400dba0
Antonio Alvarez Feijoo <antonio.feijoo@suse.com> no upstream, https://github.com/dracut-ng/dracut/commit/c000b3fd7327f2814bc0e3c9a0c2c3254bcbee73 2026-08-04
fix-base-sanitize-message-written-by-die-to-the-emergency.patch fix(base): sanitize message written by die() to the emergency hook
It is possible that not all messages passed to `die()` are trusted. E.g.,
netroot.sh calls:

```
die "No handler for netroot type '$netroot'"
```

The value of `$netroot` can be taken from the DHCP root-path option; that would
be safe thanks to previous fixes that escape DHCP values before writing them to
dhclient's dhcpopts files.

But, it may also be taken directly from the `netroot=` kernel command line
option, allowing any type of characters.

Use the `escape()` helper and single-quote the message instead, which is the
safe usage documented for escape().
Antonio Alvarez Feijoo <antonio.feijoo@suse.com> no upstream, https://github.com/dracut-ng/dracut/commit/c4d555716d569038ca38365741e94ee07908f261 2026-08-10
fix-iscsi-sanitize-netroot-value-passed-to-initqueue-scri.patch fix(iscsi): sanitize netroot= value passed to initqueue scripts
The value of the `netroot=` kernel command line option is passed unsanitized to
initqueue scripts, which end up being sourced as shell scripts.
Antonio Alvarez Feijoo <antonio.feijoo@suse.com> no upstream, https://github.com/dracut-ng/dracut/commit/6b290cf10b9bddd441b07fd5bfe19e19e88fcd76 2026-08-10
refactor-devicetree-firmware-make-looping-over-fw_dir-top.patch refactor(devicetree-firmware): make looping over fw_dir top-level loop

Make the looping over $fw_dir the top-level loop. This is a preparation
patch for adding support to install_generic() to add soc specific
firmwares (qcom/<soc>/qupv3fw.elf).
Hans de Goede <johannes.goede@oss.qualcomm.com> no upstream, https://github.com/dracut-ng/dracut/commit/3df545238141f2e93a7d6469958e6c1896a8fdf2 2026-08-16
fix-devicetree-firmware-include-soc-specific-firmwares-in.patch fix(devicetree-firmware): include soc specific firmwares in install_generic()

Qualcomm boards may use SoC specific firmwares from an otherwise generic
driver like qcom-geni-se. Which firmware to load is specified with
a firmware-name devicetree-property, so install_hostonly() already picks
these up.

Make install_generic() also include these in the initramfs by explicitly
searching for them similar to how this is already done for Qualcomm laptop
model specific firmwares.
Hans de Goede <johannes.goede@oss.qualcomm.com> no upstream, https://github.com/dracut-ng/dracut/commit/48e66eada503033c4d9e6fcd6f195a40f5610c30 2026-08-16
fix-devicetree-firmware-include-Qualcomm-X2-laptop-model-.patch fix(devicetree-firmware): include Qualcomm X2 laptop model specific firmwares

Qualcomm laptops typically have laptop model specific firmwares.

Extend install_generic() to pick up the laptop model specific firmwares
for the new X2 / Glymur laptops which have a filename pattern of:
<fwdir>/qcom/glymur/<vendor>/<model>/*.[mbn|elf]
Hans de Goede <johannes.goede@oss.qualcomm.com> no upstream, https://github.com/dracut-ng/dracut/commit/911aeed0a2bc2c59fcd62f47cf6a1cb7354f08b1 2026-08-16
fix-dracut-disable-hostonly-cmdline-by-default-in-contain.patch fix(dracut): disable hostonly-cmdline by default in container
Disable hostonly-cmdline by default in hostonly mode when container
detected.

Follow-up to 67d8287 .
devkontrol <dev@kontrol.dev> no upstream, https://github.com/dracut-ng/dracut/commit/1a32e7fe51af63e79a8b8835839f6d5844f28db1 2026-08-11
feat-put-compressed-kernel-modules-and-firmware-in-an-unc.patch feat: put compressed kernel modules and firmware in an uncompressed cpio

Dracut compresses all files that are put into the initramfs. Kernel
modules and firmware files might already be compressed. Compressing
those files will not give any size savings.

So put compressed kernel modules and firmware files in an uncompressed
cpio instead. This will speed up the initrd generation and extraction
without a significant size change of the initrd.

See
https://salsa.debian.org/kernel-team/initramfs-tools/-/merge_requests/128
and https://lists.ubuntu.com/archives/ubuntu-devel/2023-July/042707.html
for a similar change in initramfs-tools.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/5004ba20b02bacc320d05d2f571738727cd119d2 2026-08-25
feat-base-add-get_user-function.patch feat(base): add get_user function
Generalize the `get_rpc_user` function to take a list of expected user
names. Call this function `get_user` and ship it in `dracut-lib.sh` to
allow using it in other modules.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/49f25ccabc8e38eb805f3f17dafe056bd8dfa886 2026-08-26
fix-chrony-support-_chrony-username.patch fix(chrony): support _chrony username
The test 61 chrony fails on Debian/Ubuntu and this failure can be seen
in the logs:

```
dracut-cmdline[278]: chown: invalid user: 'chrony:'
[...]
chronyd[461]: Wrong owner of /run/chrony (UID != 988)
```

The username used on Debian/Ubuntu is `_chrony`.

Partially fixes: https://github.com/dracut-ng/dracut/issues/2541
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/5ee731b62223d63269d8dc3be3cdc798869264d1 2026-08-26
test-NFS-fix-ETIMEDOUT-error-in-rpc.nfsd-call.patch test(NFS): fix ETIMEDOUT error in rpc.nfsd call
nfsdcld must be running before rpc.nfsd:

```
+ rpc.nfsd
[ 6.872734][ T614] NFSD: Unable to initialize client recovery tracking! (-110)
[ 6.874020][ T614] NFSD: Is nfsdcld running? If not, enable CONFIG_NFSD_LEGACY_CLIENT_TRACKING.
[ 6.875426][ T614] NFSD: starting 90-second grace period (net effffff9)
```
Antonio Alvarez Feijoo <antonio.feijoo@suse.com> no upstream, https://github.com/dracut-ng/dracut/commit/58b8321fcd85007e66d7404613793428c3efdf93 2026-09-02
test-NFS-always-load-the-nfsv3-kernel-module.patch test(NFS): always load the nfsv3 kernel module
After debugging issue #2688 (hang after switch root in NFSv4 root), we can see
that nfs_layout_flexfiles can pull in an NFSv3 data server at any time.

```
Pivoting root worked.
[ 61.872297][ T1] ------------[ cut here ]------------
[ 61.873713][ T1] !get_v3_ds_connect
[ 61.873715][ T1] WARNING: fs/nfs/pnfs_nfs.c:792 at nfs4_pnfs_ds_connect+0x47e/0x490 [nfsv4], CPU#0: systemd/1
[ 61.878015][ T1] Modules linked in: nfs_layout_flexfiles rpcsec_gss_krb5 krb5 auth_rpcgss nfsv4 dns_resolver nfs lockd grace netfs
af_packet aesni_intel ahci libahci gf128mul virtio_net rfkill i6300esb libata net_failover virtio_scsi failover button serio_raw iTCO_wdt
intel_pmc_bxt sunrpc dm_mirror dm_region_hash dm_log i2c_dev msr dm_multipath dm_mod sd_mod scsi_dh_emc scsi_dh_rdac scsi_dh_alua sg
scsi_mod scsi_common efivarfs dmi_sysfs qemu_fw_cfg virtiofs fuse virtio_rng
[ 61.891584][ T1] CPU: 0 UID: 0 PID: 1 Comm: systemd Tainted: G W 7.2.2-1-default #1 PREEMPT(full) openSUSE
Tumbleweed bc7dc2f166d6b41995debd78d75c9e4bbcfbc2e3
[ 61.895581][ T1] Tainted: [W]=WARN
[ 61.896572][ T1] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS unknown 02/02/2022
[ 61.898835][ T1] RIP: 0010:nfs4_pnfs_ds_connect+0x47e/0x490 [nfsv4]
[ 61.900485][ T1] Code: 6e cc cb c0 bf 01 00 00 00 e8 be 65 81 f5 48 c7 c7 5b cc cb c0 e8 42 18 81 f5 48 89 05 3b ed 1a 00 48 85 c0 0f
85 94 fd ff ff <0f> 0b e9 fa fc ff ff e8 16 27 5e f6 66 0f 1f 44 00 00 90 90 90 90
[ 61.906605][ T1] RSP: 0018:ffffd3cbc001f3b0 EFLAGS: 00010246
[ 61.908952][ T1] RAX: 0000000000000000 RBX: ffff8c5562ad9340 RCX: 0000000000000000
[ 61.911701][ T1] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff8c5502168000
[ 61.914434][ T1] RBP: ffff8c5562ad9300 R08: ffffffffb62663b0 R09: 0000000000000003
[ 61.916501][ T1] R10: ffff8c550291bcc0 R11: 0000000000000000 R12: ffff8c55020bf900
[ 61.918400][ T1] R13: 0000000000000003 R14: ffff8c55020eb000 R15: 0000000000000258
[ 61.920285][ T1] FS: 00007fbf72c70880(0000) GS:ffff8c55afbe8000(0000) knlGS:0000000000000000
[ 61.922450][ T1] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 61.924599][ T1] CR2: 00007fbf732e23c8 CR3: 000000007e9bd005 CR4: 0000000000770ef0
[ 61.926751][ T1] PKRU: 55555554
[ 61.927697][ T1] Call Trace:
[ 61.928635][ T1] <TASK>
[ 61.929430][ T1] ? __nfs4_find_get_deviceid+0x4a/0x60 [nfsv4 afbba1d09ce808ffdfab764dec0615577be943e8]
[ 61.932071][ T1] ? _raw_spin_unlock+0xe/0x30
[ 61.933575][ T1] ? nfs4_find_get_deviceid+0x39c/0x460 [nfsv4 afbba1d09ce808ffdfab764dec0615577be943e8]
[ 61.936817][ T1] nfs4_ff_layout_prepare_ds+0xeb/0x2e0 [nfs_layout_flexfiles a92ede795548aff05ebc86e90e14083ed7c97953]
[ 61.940938][ T1] ff_layout_choose_ds_for_read+0x91/0x120 [nfs_layout_flexfiles a92ede795548aff05ebc86e90e14083ed7c97953]
[ 61.944809][ T1] ff_layout_pg_init_read+0xc2/0x2d0 [nfs_layout_flexfiles a92ede795548aff05ebc86e90e14083ed7c97953]
[ 61.948102][ T1] __nfs_pageio_add_request+0x30f/0x520 [nfs 706f2be7c137ba70b6dc79397a1acf17ddc1d13c]
[ 61.950614][ T1] nfs_pageio_add_request+0x1cc/0x370 [nfs 706f2be7c137ba70b6dc79397a1acf17ddc1d13c]
[ 61.953083][ T1] nfs_read_add_folio+0x174/0x290 [nfs 706f2be7c137ba70b6dc79397a1acf17ddc1d13c]
[ 61.955479][ T1] nfs_readahead+0x1ee/0x280 [nfs 706f2be7c137ba70b6dc79397a1acf17ddc1d13c]
[ 61.957919][ T1] ? xas_store+0x410/0x710
[ 61.959227][ T1] read_pages+0x63/0x200
[ 61.960408][ T1] page_cache_ra_order+0x224/0x370
[ 61.961860][ T1] filemap_get_pages+0x13e/0x780
[ 61.963249][ T1] filemap_read+0x106/0x430
[ 61.964740][ T1] ? profile_transition+0x198/0xd30
[ 61.966709][ T1] ? aa_file_perm+0x1ac/0x600
[ 61.968324][ T1] ? _raw_spin_unlock+0xe/0x30
[ 61.969900][ T1] ? apparmor_bprm_creds_for_exec+0x230/0xd10
[ 61.971854][ T1] ? nfs4_have_delegation+0x45/0xa0 [nfsv4 afbba1d09ce808ffdfab764dec0615577be943e8]
[ 61.975274][ T1] nfs_file_read+0xfc/0x130 [nfs 706f2be7c137ba70b6dc79397a1acf17ddc1d13c]
[ 61.978374][ T1] __kernel_read+0x165/0x350
[ 61.979975][ T1] bprm_execve+0x29f/0x5f0
[ 61.981208][ T1] do_execveat_common.isra.0+0x197/0x1b0
[ 61.982681][ T1] __x64_sys_execve+0x3d/0x60
[ 61.983916][ T1] do_syscall_64+0xe1/0x610
[ 61.985099][ T1] ? do_syscall_64+0xe1/0x610
[ 61.986300][ T1] ? security_task_prctl+0x3d/0xa0
[ 61.987542][ T1] ? security_task_prctl+0x3d/0xa0
[ 61.988777][ T1] ? __do_sys_prctl+0x2b/0xe80
[ 61.989991][ T1] ? do_syscall_64+0xe1/0x610
[ 61.991649][ T1] ? security_task_prctl+0x3d/0xa0
[ 61.993036][ T1] ? __do_sys_prctl+0x2b/0xe80
[ 61.994341][ T1] ? security_task_prctl+0x3d/0xa0
[ 61.995738][ T1] ? __do_sys_prctl+0x2b/0xe80
[ 61.997158][ T1] ? __do_sys_prctl+0x2b/0xe80
[ 61.999187][ T1] ? do_syscall_64+0xe1/0x610
[ 62.000939][ T1] ? security_task_prctl+0x3d/0xa0
[ 62.002651][ T1] ? __do_sys_prctl+0x2b/0xe80
[ 62.004263][ T1] ? do_syscall_64+0xe1/0x610
[ 62.005715][ T1] ? __do_sys_prctl+0x2b/0xe80
[ 62.007831][ T1] ? do_syscall_64+0xe1/0x610
[ 62.009606][ T1] ? do_syscall_64+0xe1/0x610
[ 62.011460][ T1] ? do_syscall_64+0xe1/0x610
[ 62.012797][ T1] ? do_syscall_64+0x98/0x610
[ 62.014028][ T1] ? clear_bhb_loop+0x40/0x90
[ 62.015297][ T1] entry_SYSCALL_64_after_hwframe+0x76/0x7e
[ 62.016790][ T1] RIP: 0033:0x7fbf72e819cb
[ 62.017916][ T1] Code: 00 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 f3 0f 1e fa 90 90 b8 3b
00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 0d 14 11 00 f7 d8 64 89 01 48
[ 62.022437][ T1] RSP: 002b:00007ffd27858a88 EFLAGS: 00000202 ORIG_RAX: 000000000000003b
[ 62.024942][ T1] RAX: ffffffffffffffda RBX: 00007ffd27858aa0 RCX: 00007fbf72e819cb
[ 62.027165][ T1] RDX: 0000556d66a5fb20 RSI: 00007ffd27858a90 RDI: 0000556d2f0fb522
[ 62.029504][ T1] RBP: 00007ffd27858cb0 R08: 0000000000000000 R09: 0000000000000001
[ 62.032291][ T1] R10: 0000000000000000 R11: 0000000000000202 R12: 0000000000000001
[ 62.034980][ T1] R13: 00007fbf73b93000 R14: 00007ffd27858fd8 R15: 0000556d2f102bb8
[ 62.037504][ T1] </TASK>
[ 62.038474][ T1] ---[ end trace 0000000000000000 ]---
```

Since nfs_layout_flexfiles does not expose nfsv3 as a softdep, dracut has to
force loading it.

Fixes #2688
Antonio Alvarez Feijoo <antonio.feijoo@suse.com> no upstream, https://github.com/dracut-ng/dracut/commit/62fbbfbb4e0040b07886e278d52751b6cc15f1ca 2026-09-02
fix-dracut-correct-order-of-Creating-image-log-line.patch fix(dracut): correct order of "Creating image" log line
The log line "Creating image" is followed by "Hardlinking files":

```
[...]
dracut[I]: *** Including modules done ***
dracut[I]: *** Installing kernel module dependencies ***
dracut[I]: *** Installing kernel module dependencies done ***
dracut[I]: *** Resolving dependencies for executables and libraries ***
dracut[I]: *** Resolving dependencies for executables and libraries done ***
dracut[I]: *** Generating early-microcode cpio image ***
dracut[I]: *** Constructing GenuineIntel.bin ***
dracut[I]: *** Store current command line parameters ***
dracut[I]: *** Stripping files ***
dracut[I]: *** Stripping files done ***
dracut[I]: *** Creating image file '/var/tmp/dracut-test.doZhty/initramfs.testing' ***
dracut[I]: *** Hardlinking files ***
dracut[I]: *** Hardlinking files done ***
dracut[I]: Using auto-determined compression method 'zstd'
dracut[I]: *** Creating initramfs image file '/var/tmp/dracut-test.doZhty/initramfs.testing' done ***
```

Move the "Creating image" log line back to where it belonged:

```
[...]
dracut[I]: *** Including modules done ***
dracut[I]: *** Installing kernel module dependencies ***
dracut[I]: *** Installing kernel module dependencies done ***
dracut[I]: *** Resolving dependencies for executables and libraries ***
dracut[I]: *** Resolving dependencies for executables and libraries done ***
dracut[I]: *** Generating early-microcode cpio image ***
dracut[I]: *** Constructing GenuineIntel.bin ***
dracut[I]: *** Store current command line parameters ***
dracut[I]: *** Stripping files ***
dracut[I]: *** Stripping files done ***
dracut[I]: *** Hardlinking files ***
dracut[I]: *** Hardlinking files done ***
dracut[I]: *** Creating image file '/var/tmp/dracut-test.nfRABi/initramfs.testing' ***
dracut[I]: Using auto-determined compression method 'zstd'
dracut[I]: *** Creating initramfs image file '/var/tmp/dracut-test.nfRABi/initramfs.testing' done ***
```
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/1de52aca55cf16bc469b65b12f91e75e9a252b58 2026-09-02
perf-lsinitrd-call-extractor-only-once-in-extract_squash_.patch perf(lsinitrd): call extractor only once in extract_squash_img
Calling the extractor (`3cpio` or `extractinitrd`) is expensive.
`extract_squash_img` calls the extract three times; once per possible
squashfs/erofs file.

Call the extractor only once in `extract_squash_img` to extract all
three files in one go. A normal initrd only ships one squashfs/erofs
file.

Benchmark result on my desktop machine running Ubuntu 26.04:

```
$ hyperfine -L commit 3948f63c,speedup-lsinitrd -p "git checkout {commit}" -w 1 "sudo ./lsinitrd.sh /boot/initrd.img"
Benchmark 1: sudo ./lsinitrd.sh /boot/initrd.img (commit = 3948f63c)
Time (mean ± σ): 571.7 ms ± 3.2 ms [User: 2.5 ms, System: 3.0 ms]
Range (min … max): 565.7 ms … 576.5 ms 10 runs

Benchmark 2: sudo ./lsinitrd.sh /boot/initrd.img (commit = speedup-lsinitrd)
Time (mean ± σ): 433.4 ms ± 5.2 ms [User: 2.0 ms, System: 3.4 ms]
Range (min … max): 426.6 ms … 444.3 ms 10 runs

Summary
sudo ./lsinitrd.sh /boot/initrd.img (commit = speedup-lsinitrd) ran
1.32 ± 0.02 times faster than sudo ./lsinitrd.sh /boot/initrd.img (commit = 3948f63c)
```
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/0430cb4a57ad76eea71f8118a5fe39fb6e7d7d4d 2026-09-03
fix-drm-add-leds-qcom-lpg-to-aarch64-specific-modules-nee.patch fix(drm): add leds-qcom-lpg to aarch64 specific modules needed by drm

leds-qcom-lpg is not only a LED class driver but it can also be a pwm class
driver and sometimes its pwm function is used for panel backlight control
in which case it is needed for drm/kms to work.

Since leds-qcom-lpg lives under drivers/leds/rgb/ it is not automatically
picked-up by the existing 'instmods "=drivers/pwm"', add it explicitly
to the instmods argument to get it included into the initramfs.

This follows the pattern of how the amdkfd and hyperv_fb special cases are
already handled.
Hans de Goede <johannes.goede@oss.qualcomm.com> no upstream, https://github.com/dracut-ng/dracut/commit/6fe62db59b8a450319a36f062d396f9bccfd9bb5 2026-09-03
fix-i18n-support-find-applet-from-busybox-in-module-setup.patch fix(i18n): support find applet from busybox in module-setup.sh
busybox's `find` applet neither supports `-delete` nor specifying
multiple types to `-type`. So replace `-delete` by a `rm` call and split
the `-type` option.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/e241be2e0265616fbb32a8435eee4ee99cbb5bb1 2026-08-25
fix-convertfs-support-find-applet-from-busybox.patch fix(convertfs): support find applet from busybox
busybox's `find` applet does not support `-delete`. So replace `-delete`
by a `rm` call.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/deb14ebbfed325939c15289e92b4a8836167df32 2026-08-25
fix-lsinitrd-use-find-exec-ls-instead-of-find-ls.patch fix(lsinitrd): use "find -exec ls" instead of "find -ls"
busybox's `find` applet does not support `-ls`. Also the output of
`find -ls` differs from the style of `ls` and `cpio`:

```
$ touch example foobar
$ find . -ls
1127667 0 drwxrwxr-x 2 root root 80 Aug 25 17:59 .
1127669 0 -rw-rw-r-- 1 root root 0 Aug 25 17:59 ./foobar
1127668 0 -rw-rw-r-- 1 root root 0 Aug 25 17:59 ./example
$ find . -exec ls -ld {} +
drwxrwxr-x 2 root root 80 Aug 25 17:59 .
-rw-rw-r-- 1 root root 0 Aug 25 17:59 ./example
-rw-rw-r-- 1 root root 0 Aug 25 17:59 ./foobar
```

So replace `-ls` by a `ls` call.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/b1050191bfcbd037243df6195e3cd08247d66d50 2026-08-25
test-FULL-SYSTEMD-avoid-copying-usr-twice.patch test(FULL-SYSTEMD): avoid copying /usr twice
The test setup fails with busybox 1.37:

```
Create subvolume '/root/usr/usr'
```

This bug is fixed in busybox 1.38 by upstream commit a0017a5b5038
("cp: fix `cp -aT` overwriting symlink to directories").

Workaround this bug in busybox 1.37 and speed up the test by not copying
`/usr` twice.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/cebc9274c755dce91d2538ca565f45fc88a40c10 2026-09-02
fix-base-support-readlink-applet-from-busybox.patch fix(base): support readlink applet from busybox
The busybox `readlink` applet does not support the option `-e`.

These `readlink` calls can be replaced by `realpath`, but `realpath` is
not included in the initrd. So support using `readlink` (when busybox is
used) and fall back to keep using `readlink` otherwise. Since `realpath`
will return successfully on non-existing path, check the path exists if
needed.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/4e62000376551caa8ccd3ed16dec825631cccc38 2026-09-06
fix-dmsquash-live-support-umount-applet-from-busybox.patch fix(dmsquash-live): support umount applet from busybox
busybox's `umount` applet does not support the long form `--detach-loop`
but it supports the short form `-d`.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/8bc69aeda0c676889e9fd593547a5695b5fae603 2026-09-01
fix-lvmmerge-support-umount-applet-from-busybox.patch fix(lvmmerge): support umount applet from busybox
The busybox `umount` applet does not support the option
`-R`/`--recursive`.

Implement the recursive unmounting in shell by reverse iterating over
`/proc/self/mountinfo` and unmounting matching paths.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/0ed2a3b984a7fbdbc715b0eeb9a8de795c2ab232 2026-09-03
fix-selinux-support-umount-applet-from-busybox.patch fix(selinux): support umount applet from busybox
The busybox `umount` applet does not support the option
`-R`/`--recursive`.

Implement the recursive unmounting in shell by reverse iterating over
`/proc/self/mountinfo` and unmounting matching paths.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/e767d6a646bd8b5994e7e46505b99a5fda1e04a3 2026-09-03
fix-busybox-do-not-install-sulogin-applet.patch fix(busybox): do not install sulogin applet
The busybox `sulogin` applet does not support the option `-e`

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/0ea1933edbb5aeef6b64dc0e6a4f8c7abc14874c 2026-09-01
fix-busybox-use-full-path-provided-by-busybox-list-full.patch fix(busybox): use full path provided by busybox --list-full
`busybox --list` only lists the names of the included applets but does
not show their paths. The busybox module looks for the path on the
host system. It will skip the applet in case the binary is not found on
the host system.

Rely on `busybox --list-full` to provide the path for the applets. That
way all applets can be installed. Support getting relative paths (like
`bin/busybox`) in addition to absolute paths (like `/bin/busybox`).
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/250e621fafa43305bcb036bf5301d47718e9f30e 2026-08-25
fix-busybox-do-not-rely-on-CONFIG_FEATURE_INSTALLER-y.patch fix(busybox): do not rely on CONFIG_FEATURE_INSTALLER=y
busybox --list-full provides full paths only if busybox was built with
CONFIG_FEATURE_INSTALLER=y [1], otherwise the result is only a list of applet
names. Using those plain applet names, links will be placed in / in the
initramfs, which is not on PATH, causing chaos.

If we get plain applet names, try to find their installed paths, and use those
if found. Otherwise guess usr/bin.

[1] https://github.com/vda-linux/busybox_mirror/blob/15666f3e9a0b54305cec1b01f34bc5b2a1794e74/libbb/appletlib.c#L857-L860
Fiona Klute <fiona.klute@gmx.de> no upstream, https://github.com/dracut-ng/dracut/commit/98306da0ce9b00a634896d3095aee75eaf0fc06a 2026-08-27
test-provide-default-test_setup-hook.patch test: provide default test_setup hook Nadzeya Hutsko <nadzeya.hutsko@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/045c03c352548c283829351d201bea62178da22c 2026-05-25
feat-busybox-run-before-80base-so-applets-replace-host-bi.patch feat(busybox): run before 80base so applets replace host binaries
Distros that ship large coreutils binaries (e.g. Ubuntu 26.04 with
rust-coreutils) increase the initrd size because 80base copies the
host's binaries like cp, ls, mv in full.

Rename modules.d/81busybox to modules.d/10busybox so the busybox module
runs first. It lays down /usr/bin/busybox and applet symlinks before
80base's inst_multiple calls.

The host's util-linux switch_root is still preferred.
Nadzeya Hutsko <nadzeya.hutsko@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/04eb6dd18dadaeb324164444fd199fae138c1596 2026-07-22
fix-busybox-do-not-install-blkid-if-udev-rules-need-o.patch fix(busybox): do not install blkid if udev rules need -o
The busybox `blkid` applet does not support the option `-o`. The
`13-dm-disk.rules` udev rule might either use the builtin blkid or call
`/sbin/blkid -o udev -p $tempnode`. The latter is not supported by
busybox.

So check the udev rule to call `blkid` with `-o` and do not install this
busybox applet in this case.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/89e3c00d4c2262abfc1b62e34ec2c8d877ef3087 2026-08-31
fix-busybox-do-not-install-mount-applet.patch fix(busybox): do not install mount applet
The busybox `mount` applet does not resolve "auto" to the actual
filesystem and therefore passes `auto` directly to mount(2). If the
target partition's filesystem driver (e.g., `ext4`, `xfs`) is compiled
as a module and not yet loaded into `/proc/filesystems`, the kernel
skips `request_module()` and returns `EINVAL` (Invalid argument). For
example `test/test.sh debian:sid 10` fails with, because `ext4` is not
loaded:

```
systemd[1]: Mounting sysroot.mount - /sysroot...
```

Instead of adding a quirky workaround to probe the device and load the
relevant filesystem driver, do not install the `mount` applet.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/9dcc127e2d190ae819110ce82f429a7d1d92c380 2026-08-31
test-BUSYBOX-use-initramfs.testing-as-initrd-name.patch test(BUSYBOX): use initramfs.testing as initrd name
The `test_dracut` will specify `$TESTDIR/initramfs.testing` as initrd
name. So use this name in the busybox test case as well.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/4c4db47b1986671ff7a9d03ab8376279a74e8474 2026-09-01
test-BUSYBOX-also-test-booting.patch test(BUSYBOX): also test booting
Extend the busybox test case to test that booting the initrd works.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/8cc940651096f1a23cd988fe293458c92899c7bd 2026-09-01
fix-busybox-do-not-install-mke2fs-applet.patch fix(busybox): do not install mke2fs applet
e2fsprogs provides `mke2fs`. `mkfs.ext2`, `mkfs.ext3`, and `mkfs.ext4`
are symlinks to it. Busybox does not provide a `mkfs.ext4` applet and
`mkfs.ext*` would point to busybox then. This can be seen when including
the busybox module:

```
$ test/test.sh ubuntu:devel 21
[...]
CLIENT TEST START: encrypted overlay (new device, random password)
[...]
[ 7.398868] dracut-pre-pivot[289]: Creating ext4 filesystem on /dev/mapper/overlay-crypt
[ 7.400071] dracut-pre-pivot[373]: mkfs.ext4: applet not found
```

So do not install the `mke2fs` busybox applet.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/38247fbc11040521aef6f1e1b2fe494538967d50 2026-09-01
fix-busybox-do-not-install-nbd-client-applet.patch fix(busybox): do not install nbd-client applet
The busybox `nbd-client` applet does not support the option `-check` and
others. This causes the test 60-NFS to fail with busybox.

So not install the `nbd-client` applet.
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/c051f59e8d8b14c8e7454323ddb742dda382bef1 2026-09-01
fix-busybox-do-not-install-losetup-applet.patch fix(busybox): do not install losetup applet
The busybox `losetup` applet does not support the option `--show`.

Part of: https://github.com/dracut-ng/dracut/issues/2437
Benjamin Drung <benjamin.drung@canonical.com> no upstream, https://github.com/dracut-ng/dracut/commit/cd772fb43a2303adac5714ae53f9d4174db2d4ac 2026-09-01
fix-dracut-systemd-use-sbin-sulogin-for-CONFIG_FEATURE_PR.patch fix(dracut-systemd): use /sbin/sulogin for CONFIG_FEATURE_PREFER_APPLETS

The Dracut module dracut-systemd might call `sulogin -e`, but busybox
does not support the option `-e`. This missing option is reported
upstream at https://github.com/vda-linux/busybox_mirror/issues/36.

The Dracut busybox module skips installing the sulogin applet. This
has no effect when using busybox-static because busybox-static is built
with CONFIG_FEATURE_PREFER_APPLETS enabled. Busybox sh will prefer the
incompatible sulogin applet instead of using the real sulogin binary.
Benjamin Drung <benjamin.drung@canonical.com> yes debian 2026-09-06
fix-use-sbin-losetup-for-CONFIG_FEATURE_PREFER_APPLETS.patch fix: use /sbin/losetup for CONFIG_FEATURE_PREFER_APPLETS
Several Dracut modules might call `losetup --show`, but busybox does not
support the option `--show`. This missing option is reported upstream at
https://github.com/vda-linux/busybox_mirror/issues/37.

The Dracut busybox module skips intstalling the losetup applet. This
has no effect when using busybox-static because busybox-static is built
with CONFIG_FEATURE_PREFER_APPLETS enabled. Busybox sh will prefer the
incompatible losetup applet instead of using the real losetup binary.
Benjamin Drung <benjamin.drung@canonical.com> yes debian 2026-09-07
fix-use-bin-mount-for-CONFIG_FEATURE_PREFER_APPLETS.patch fix: use /bin/mount for CONFIG_FEATURE_PREFER_APPLETS
Several Dracut modules might call `mount -t auto` or `mount` without
`-t`. Busybox mount will pass `auto` directly to the kernel. If the
target partition's filesystem driver is compiled as a module and not yet
loaded, the kernel skips request_module() and returns EINVAL (Invalid
argument). This missing feature is reported upstream at
https://github.com/vda-linux/busybox_mirror/issues/34

The Dracut busybox module skips intstalling the mount applet. This
has no effect when using busybox-static because busybox-static is built
with CONFIG_FEATURE_PREFER_APPLETS enabled. Busybox sh will prefer the
incompatible mount applet instead of using the real mount binary.

So use absolute paths for `mount` where needed. Absolute paths for mount
is needed for cases where the type is `auto` or not specified. Some code
already determines the type and mounts the relevant kernel module:

```sh
fstype=$(det_img_fs "$1")
load_fstype "$fstype"
mount -r "$1" "$2"
```
Benjamin Drung <benjamin.drung@canonical.com> yes debian 2026-09-07
fix-dracut-export-prefer_dracutmodules-to-be-used-in-drac.patch fix(dracut): export prefer_dracutmodules to be used in dracut modules

In the same way that their `*dracutmodules` siblings are exported.

Follow-up for 4b8c11c0590b546e37908968042eaf7c7d669b17
Antonio Alvarez Feijoo <antonio.feijoo@suse.com> no upstream, https://github.com/dracut-ng/dracut/commit/f2990cbabec2ea464cfb8531e4d38d5f8d138580 2026-09-07
fix-bluetooth-do-not-warn-if-this-module-is-included-via-.patch fix(bluetooth): do not warn if this module is included via --prefer Antonio Alvarez Feijoo <antonio.feijoo@suse.com> no upstream, https://github.com/dracut-ng/dracut/commit/0a6a30da74d1d4d1978b3af24a19860371770307 2026-09-07
docs-cli-formatting-grammar-fix-for-DRACUT_INSTALL_LOG_-T.patch docs(cli): formatting & grammar fix for DRACUT_INSTALL_LOG_{TARGET,LEVEL}

Correctly end bold formatting of "dracut-install", and simplify sentences with
three variations of "run".
Fiona Klute <fiona.klute@gmx.de> no upstream, https://github.com/dracut-ng/dracut/commit/c8ab9b5388072747f3f73848af0dcb651d42abb1 2026-08-20

All known versions for source package 'dracut'

Links