Package: dracut / 108-8

Metadata

Package Version Patches format
dracut 108-8 3.0 (quilt)

Patch series

view the series file
Patch File delta Description
udevsettle | (download)

modules.d/80base/init.sh | 1 1 + 0 - 0 !
1 file changed, 1 insertion(+)

 udevsettle

In a KVM VM the network is not configured properly, it shows ens3
(instead of eth0), which is not in status up and no IP address.

debian initramfs post update.patch | (download)

dracut.sh | 6 6 + 0 - 0 !
1 file changed, 6 insertions(+)

 run bootloader hooks from /etc/initramfs/post-update.d after making
 the image, and add $NO_POST_UPDATE_HOOKS to disable this

See <https://kernel-team.pages.debian.net/kernel-handbook/ch-update-hooks.html#s-initramfs-hooks>

Bug-Debian: https://bugs.debian.org/753752
fix dracut do not call uname r in chroot environments.patch | (download)

dracut.sh | 2 1 + 1 - 0 !
lsinitrd.sh | 2 1 + 1 - 0 !
2 files changed, 2 insertions(+), 2 deletions(-)

 fix(dracut): do not call uname -r in chroot environments

Running dracut in a schroot environment (even with `systemd-detect-virt`
installed) will pick `uname -r` as kernel version despite that kernel
not being available.

So also check `systemd-detect-virt --chroot` before relying on
`uname -r`.

feat debian.conf default to initrd.img kernel on Debian U.patch | (download)

dracut.conf.d/debian/10-debian.conf | 1 1 + 0 - 0 !
man/dracut.conf.5.adoc | 3 2 + 1 - 0 !
2 files changed, 3 insertions(+), 1 deletion(-)

 feat(debian.conf): default to initrd.img-${kernel} on debian/ubuntu

Extend the Debian/Ubuntu Dracut configuration to change the default
`initrdname` to `initrd.img-${kernel}`. This is done to keep the name
the same as initramfs-tools which has been the default for a long time.
This change will be carried for quite some time to ease the switch from
initramfs-tools to dracut.

test drop requiring iscsiuio.socket.patch | (download)

.github/workflows/integration.yml | 2 2 + 0 - 0 !
test/TEST-70-ISCSI/test.sh | 4 0 + 4 - 0 !
test/TEST-71-ISCSI-MULTI/test.sh | 4 0 + 4 - 0 !
test/container/Dockerfile-debian | 3 2 + 1 - 0 !
4 files changed, 4 insertions(+), 9 deletions(-)

 test: drop requiring iscsiuio.socket

The iscsiuio socket/service is only needed on specific hardware. It is
not needed for the ISCSI and ISCSI-MULTI test cases. Without this check
the tests will succeed on Debian and Ubuntu.

feat Makefile set Dracut version on install.patch | (download)

Makefile | 1 1 + 0 - 0 !
1 file changed, 1 insertion(+)

 feat(makefile): set dracut version on install

Distributions can override `DRACUT_VERSION` or `DRACUT_FULL_VERSION` to
include the distribution's revision in the dracut version. This override
is not reflected in the installed `dracut-version.sh` and needs to be
modified by the distribution.

Persist the version in the installed `dracut-version.sh` during
`make install`.

feat Makefile introduce distclean target.patch | (download)

Makefile | 5 4 + 1 - 0 !
1 file changed, 4 insertions(+), 1 deletion(-)

 feat(makefile): introduce distclean target

Add a `distclean` target to remove all generated files including the one
(`Makefile.inc`) created by `configure`. Calling `make distclean` should
have the same result as `git clean -fdx`.

fix hwdb make module setup.sh executable.patch | (download)

0 files changed

 fix(hwdb): make module-setup.sh executable

The `module-setup.sh` scripts are shell scripts and should be
executable.

fix Makefile use install for installing files.patch | (download)

Makefile | 11 9 + 2 - 0 !
1 file changed, 9 insertions(+), 2 deletions(-)

 fix(makefile): use install for installing files

The `cp` command will copy the file/directory permissions from the
source files. The local source files might have group write permission
set which should not be applied to the installation.

Tighten the file/directory permission by using the `install` command
with specifying the mode.

fix Makefile exclude hidden directories from shellcheck.patch | (download)

Makefile | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 fix(makefile): exclude hidden directories from shellcheck

`shfmt -f .` also searches in hidden directories (like `.git` or
`.pc`). The `.pc` is used on Debian for patch tracking and should not be
searched for files.

So ignore the top-level hidden directories from shellcheck.

fix dm dmraid shellcheck SC2268.patch | (download)

modules.d/70dm/dm-shutdown.sh | 6 3 + 3 - 0 !
modules.d/70mdraid/md-shutdown.sh | 2 1 + 1 - 0 !
2 files changed, 4 insertions(+), 4 deletions(-)

 fix(dm,dmraid): shellcheck sc2268

Shellcheck 0.11 complains about SC2268 (style): Avoid x-prefix in
comparisons as it no longer serves a purpose.

fix ignore shellcheck SC2329 in addition to SC2317.patch | (download)

dracut-logger.sh | 14 7 + 7 - 0 !
lsinitrd.sh | 4 2 + 2 - 0 !
modules.d/30convertfs/convertfs.sh | 2 1 + 1 - 0 !
modules.d/70kernel-modules/module-setup.sh | 2 1 + 1 - 0 !
modules.d/70multipath/module-setup.sh | 2 1 + 1 - 0 !
modules.d/74fcoe-uefi/module-setup.sh | 2 1 + 1 - 0 !
modules.d/74fcoe/module-setup.sh | 2 1 + 1 - 0 !
modules.d/74iscsi/module-setup.sh | 2 1 + 1 - 0 !
modules.d/74lunmask/module-setup.sh | 2 1 + 1 - 0 !
modules.d/74nvmf/module-setup.sh | 4 2 + 2 - 0 !
test/TEST-80-GETARG/test.sh | 14 7 + 7 - 0 !
11 files changed, 25 insertions(+), 25 deletions(-)

 fix: ignore shellcheck sc2329 in addition to sc2317

Shellcheck <= 0.10 complains about SC2317 (info): Command appears to be
unreachable. Check usage (or ignore if invoked indirectly). Shellcheck
0.11 changes this complaint to SC2329 (info): This function is never
invoked. Check usage (or ignored if invoked indirectly).

So ignore shellcheck SC2329 in addition to SC2317 to make both
shellcheck versions happy.

fix dracut util crash if CMDLINE ends with quotation mark.patch | (download)

src/util/util.c | 2 1 + 1 - 0 !
test/TEST-80-GETARG/test.sh | 3 2 + 1 - 0 !
2 files changed, 3 insertions(+), 2 deletions(-)

 fix(dracut-util): crash if cmdline ends with quotation mark

Sudhakar Verma from the Ubuntu security team found a memory corruption:

```
$ pwd
/tmp/dracut-ng/src/util
$ CC=clang-17 CXX=clang++-17 CFLAGS="-fsanitize=address" cmake .
-- The C compiler identification is Clang 17.0.6
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/clang-17 - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Configuring done (0.3s)
-- Generating done (0.0s)
-- Build files have been written to: /tmp/dracut-ng/src/util
$ CC=clang-17 CXX=clang++-17 CFLAGS="-fsanitize=address" make
[ 50%] Building C object CMakeFiles/dracut-util.dir/util.c.o
[100%] Linking C executable dracut-util
[100%] Built target dracut-util
$ ln -s $PWD/dracut-util dracut-getargs
$ ln -s $PWD/dracut-util dracut-getarg

$ CMDLINE=' "' ./dracut-getarg ' '
AddressSanitizer:DEADLYSIGNAL
=================================================================
==163118==ERROR: AddressSanitizer: SEGV on unknown address 0x50210000001d (pc 0x599a6b7d4c07 bp 0x7ffe44ea9ef0 sp 0x7ffe44ea9da0 T0)
==163118==The signal is caused by a READ memory access.
    #0 0x599a6b7d4c07 in next_arg util.c
    #1 0x599a6b7d3e75 in getarg util.c
    #2 0x599a6b7d3448 in main (/tmp/dracut-ng/src/util/dracut-util+0x108448) (BuildId: ea28a61b3c6dd0a75c505cd1749f8711779bd819)
    #3 0x72381be2a1c9 in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
    #4 0x72381be2a28a in __libc_start_main csu/../csu/libc-start.c:360:3
    #5 0x599a6b6f7304 in _start (/tmp/dracut-ng/src/util/dracut-util+0x2c304) (BuildId: ea28a61b3c6dd0a75c505cd1749f8711779bd819)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV util.c in next_arg
==163118==ABORTING
```

The variable `i` in `next_arg` is an unsigned integeter. `i - 1` will
result in an underflow in case `i` is 0.

fix kernel modules add Cadence USB driver to base.patch | (download)

modules.d/70kernel-modules/module-setup.sh | 1 1 + 0 - 0 !
1 file changed, 1 insertion(+)

 fix(kernel-modules): add cadence usb driver to base

Installed Debian Trixie d-i rc2 (dvd-1) on USB storage on Pine64 Star64
is not bootable due to missing modules `cdns3_starfive` and `cdns3` from
initramfs.

Note the above USB support on Pine64 Star64 is directly part of StarFive
fix lsinitrd avoid rechecking for squash images.patch | (download)

lsinitrd.sh | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 fix(lsinitrd): avoid rechecking for squash images

The function `extract_squash_img` uses `SQUASH_TMPDIR` to check that it
was already called but did not find any squash image.

Instead of setting `SQUASH_TMPDIR` `SQUASH_TMPFILE` was set and
therefore the cpio file is searched again on every `extract_squash_img`
call.

refactor lsinitrd introduce cpio_extract function.patch | (download)

lsinitrd.sh | 9 7 + 2 - 0 !
1 file changed, 7 insertions(+), 2 deletions(-)

 refactor(lsinitrd): introduce cpio_extract function

In preparation to support 3cpio as alternative archive tool, move the
cpio extraction call into `cpio_extract`.

refactor lsinitrd introduce cpio_extract_to_stdout functi.patch | (download)

lsinitrd.sh | 25 12 + 13 - 0 !
1 file changed, 12 insertions(+), 13 deletions(-)

 refactor(lsinitrd): introduce cpio_extract_to_stdout function

In preparation to support 3cpio as alternative archive tool, move the
cpio extraction to stdout call into `cpio_extract_to_stdout`.

refactor lsinitrd introduce cpio_list function.patch | (download)

lsinitrd.sh | 11 8 + 3 - 0 !
1 file changed, 8 insertions(+), 3 deletions(-)

 refactor(lsinitrd): introduce cpio_list function

In preparation to support 3cpio as alternative archive tool, move the
cpio listing call into `cpio_list`.

feat lsinitrd support 3cpio.patch | (download)

lsinitrd.sh | 26 23 + 3 - 0 !
1 file changed, 23 insertions(+), 3 deletions(-)

 feat(lsinitrd): support 3cpio

`3cpio` is written in Rust and faster than `cpio`. Use `3cpio` in
`lsinitrd` in case it is available.

refactor dracut introduce cpio_extract function.patch | (download)

dracut.sh | 9 8 + 1 - 0 !
1 file changed, 8 insertions(+), 1 deletion(-)

 refactor(dracut): introduce cpio_extract function

In preparation to support 3cpio as alternative archive tool, move the
cpio extraction call into `cpio_extract`.

feat dracut support 3cpio for creating initrds.patch | (download)

dracut.sh | 101 94 + 7 - 0 !
1 file changed, 94 insertions(+), 7 deletions(-)

 feat(dracut): support 3cpio for creating initrds

`3cpio` is written in Rust and faster than `cpio`. Use `3cpio` in
`dracut.sh` in case it is available. `3cpio` supports
`SOURCE_DATE_EPOCH` and therefore clamping the files is not needed.

fix dracut library directory creation in kernel only.patch | (download)

dracut.sh | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 fix(dracut): library directory creation in --kernel-only

Create a initrd with `--kernel-only`. For example:

```
./configure
make
./dracut.sh -l --kernel-only -m kernel-modules -d "ext4 sd_mod" -f $(pwd)/test --keep
```

The resulting has directories with spaces:

```
$ ls -l /var/tmp/dracut.dS9eq2i/initramfs
total 0
drwxrwxr-x 3 root root 60 Aug 13 23:36 ' '
lrwxrwxrwx 1 root root  7 Aug 13 23:36  lib -> usr/lib
drwxr-xr-x 3 root root 60 Aug 13 23:36  usr
$ find /var/tmp/dracut.dS9eq2i/initramfs/\
/var/tmp/dracut.dS9eq2i/initramfs/
/var/tmp/dracut.dS9eq2i/initramfs/ /lib64
/var/tmp/dracut.dS9eq2i/initramfs/ /lib64 /usr
/var/tmp/dracut.dS9eq2i/initramfs/ /lib64 /usr/lib64
/var/tmp/dracut.dS9eq2i/initramfs/ /lib64 /usr/lib64 /lib
/var/tmp/dracut.dS9eq2i/initramfs/ /lib64 /usr/lib64 /lib /usr
/var/tmp/dracut.dS9eq2i/initramfs/ /lib64 /usr/lib64 /lib /usr/lib
/var/tmp/dracut.dS9eq2i/initramfs/ /lib64 /usr/lib64 /lib /usr/lib /lib
/var/tmp/dracut.dS9eq2i/initramfs/ /lib64 /usr/lib64 /lib /usr/lib /lib/x86_64-linux-gnu?
/var/tmp/dracut.dS9eq2i/initramfs/ /lib64 /usr/lib64 /lib /usr/lib /lib/x86_64-linux-gnu?/usr
/var/tmp/dracut.dS9eq2i/initramfs/ /lib64 /usr/lib64 /lib /usr/lib /lib/x86_64-linux-gnu?/usr/lib
/var/tmp/dracut.dS9eq2i/initramfs/ /lib64 /usr/lib64 /lib /usr/lib /lib/x86_64-linux-gnu?/usr/lib/x86_64-linux-gnu
/var/tmp/dracut.dS9eq2i/initramfs/ /lib64 /usr/lib64 /lib /usr/lib /lib/x86_64-linux-gnu?/usr/lib/x86_64-linux-gnu/libfakeroot
```

Do not quote `libdirs` when iterating over it since it contains a
space-separated list of library directories.

Fixes: https://github.com/dracut-ng/dracut-ng/issues/1570
test SKIPCPIO introduce cpio_list_first function.patch | (download)

test/TEST-81-SKIPCPIO/test.sh | 10 8 + 2 - 0 !
1 file changed, 8 insertions(+), 2 deletions(-)

 test(skipcpio): introduce cpio_list_first function

In preparation to support 3cpio as alternative archive tool, move the
cpio listing call into `cpio_list_first` and expect it to take a file as
input.

test SKIPCPIO introduce cpio_create function.patch | (download)

test/TEST-81-SKIPCPIO/test.sh | 10 6 + 4 - 0 !
1 file changed, 6 insertions(+), 4 deletions(-)

 test(skipcpio): introduce cpio_create function

In preparation to support 3cpio as alternative archive tool, move the
cpio creation call into `cpio_create`.

test SKIPCPIO support 3cpio.patch | (download)

test/TEST-81-SKIPCPIO/test.sh | 19 16 + 3 - 0 !
1 file changed, 16 insertions(+), 3 deletions(-)

 test(skipcpio): support 3cpio

Support using 3cpio in the skipcpio test to allow not having `cpio`
installed.

fix lsinitrd use lowercase skip variable name.patch | (download)

lsinitrd.sh | 17 9 + 8 - 0 !
1 file changed, 9 insertions(+), 8 deletions(-)

 fix(lsinitrd): use lowercase skip variable name

The test Makefile takes a `SKIP` environment variable to skip tests.
This variable might leak into `lsinitrd`:

```
$ make -C test V=1 check SKIP="23 30 43 50 60 70 71 72"
[...]
/usr/bin/lsinitrd: line 467: 23: command not found
```

Rename the `SKIP` variable to use lowercase and unset this variable to
avoid leaking values into it.

test avoid kernel install add all.patch | (download)

test/TEST-12-UEFI/test.sh | 3 2 + 1 - 0 !
test/TEST-43-KERNEL-INSTALL/test.sh | 3 2 + 1 - 0 !
test/test-functions | 21 21 + 0 - 0 !
3 files changed, 25 insertions(+), 2 deletions(-)

 test: avoid kernel-install add-all

The man page of `kernel-install` says about `add-all`: "This is the same
as add, but invokes the operation iteratively for every installed kernel
in /usr/lib/modules/. This operation is only supported on systems where
the kernel image is installed in
/usr/lib/modules/KERNEL-VERSION/vmlinuz."

Debian and Ubuntu do not ship the kernel images in `/usr/lib/modules/`
and therefore `add-all` is not supported there.

Since the test cases already determine the kernel version, search for
the kernel image and use `kernel-install add` instead of `add-all`.

fix Makefile exclude hidden directories from shellcheck p.patch | (download)

Makefile | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 fix(makefile): exclude hidden directories from shellcheck part 2

`find .` also searches in hidden directories (like `.git` or `.pc`). The
`.pc` is used on Debian for patch tracking and should not be searched
for files.

So ignore the top-level hidden directories from shellcheck. See also
commit 7a65d1a1f372 ("fix(Makefile): exclude hidden directories from
shellcheck").

test allow running UEFI and kernel install tests in chroo.patch | (download)

test/TEST-43-KERNEL-INSTALL/test.sh | 4 2 + 2 - 0 !
1 file changed, 2 insertions(+), 2 deletions(-)

 test: allow running uefi and kernel-install tests in chroot

The UEFI and kernel-install tests want to run in an isolated environment
to avoid modifying the host system. Allow running those tests in a
chroot (like schroot).

test skip using kernel install due to bug 1117563.patch | (download)

test/TEST-12-UEFI/test.sh | 4 3 + 1 - 0 !
1 file changed, 3 insertions(+), 1 deletion(-)

 test: skip using kernel-install due to bug #1117563

The Dracut 12-uefi and 43-kernel-install test cases fail. dracut-core
ships /usr/lib/kernel/install.d/50-dracut.install which generates an
initrd in KERNEL_INSTALL_STAGING_AREA.
/usr/lib/kernel/install.d/55-initrd.install (coming from
debian/extra/kernel-install.d/55-initrd.install) then links to the
initrd in /boot. This results in two initrd being included in the UKI
and the content of later one overwrites the former one.