]> git.ipfire.org Git - thirdparty/dracut-ng.git/log
thirdparty/dracut-ng.git
6 hours agotest(DRACUT-CPIO): run without set -x main
Benjamin Drung [Wed, 22 Jul 2026 08:55:09 +0000 (10:55 +0200)] 
test(DRACUT-CPIO): run without set -x

Running the test with `set -x` will be quite verbose and makes the logs
harder to read.

6 hours agofix(systemd-networkd): use another name for the default .network file
Antonio Alvarez Feijoo [Wed, 22 Jul 2026 09:33:55 +0000 (11:33 +0200)] 
fix(systemd-networkd): use another name for the default .network file

Since da3353f022cc7b930dd532e2f1e06af4e86999d3, there is another file matching
the pattern `dracut-*` used by lsinitrd to print the dracut version:

```
$ lsinitrd /boot/test.img | grep usr/lib/dracut/
-rw-r--r--   1 root     root           38 Jul 22 09:20 usr/lib/dracut/build-parameter.txt
-rw-r--r--   1 root     root           32 Jul 22 09:20 usr/lib/dracut/dracut-110+suse.45.geaec47e4-38
-rw-r--r--   1 root     root          131 Jul 22 08:10 usr/lib/dracut/dracut-default.network
-rw-r--r--   1 root     root          420 Jul 22 09:20 usr/lib/dracut/hostonly-files
-rw-r--r--   1 root     root          493 Jul 22 09:20 usr/lib/dracut/modules.txt
-rw-r--r--   1 root     root            0 Jul 22 09:20 usr/lib/dracut/need-initqueue
```

This is messing the output when the systemd-networkd module is included:

```
$ lsinitrd -m /boot/test.img
Image: /boot/test.img: 71M
========================================================================
Version: dracut-110+suse.45.geaec47e4-38
[Match]
Kind=!*
Type=!loopback

[Network]
DHCP=yes

[DHCPv4]
ClientIdentifier=mac
RequestOptions=17

[DHCPv6]
RequestOptions=59 60

dracut modules:
bash
systemd
systemd-ask-password
systemd-battery-check
systemd-initrd
systemd-journald
systemd-modules-load
systemd-networkd
...
```

There are already other files in /usr/lib/dracut, all of them avoiding the
"dracut-" prefix, so use another name for this file.

Fixes da3353f022cc7b930dd532e2f1e06af4e86999d3

20 hours agotest(DRACUT-CPIO): fix specifying initrd name twice
Benjamin Drung [Tue, 21 Jul 2026 23:26:43 +0000 (01:26 +0200)] 
test(DRACUT-CPIO): fix specifying initrd name twice

The initrd output file name parameter was moved to the `test_dracut`.
Thus specifying the initrd name in the `test_dracut` would become the
second parameter for dracut and interpreted as kernel name. This would
lead to this `realpath` failure:

```
Calling dracut --confdir /var/tmp/dracut-test.NilYUr/dracut.conf.d --add-confdir test --tmpdir /var/tmp/dracut-test.NilYUr/initrd --no-kernel --drivers '' --add-confdir test --enhanced-cpio --no-compress --nostrip --include /var/tmp/dracut-test.NilYUr/cpio-test.Gg7wLrYrO7/simple/init.sh /usr/lib/dracut/hooks/emergency/00-init.sh --install poweroff /var/tmp/dracut-test.NilYUr/cpio-test.Gg7wLrYrO7/simple/initramfs /var/tmp/dracut-test.NilYUr/initramfs.testing
realpath: /lib/modules//var/tmp/dracut-test.NilYUr/initramfs.testing: No such file or directory
```

So use the common initrd output file name in the dracut-cpio test case
as well.

Fixes: 4d55517094f6 ("ci: consolidate output filename for test runs")
20 hours agofeat(resume): include in hostonly sloppy mode if supported by kernel
Benjamin Drung [Thu, 16 Jul 2026 14:18:08 +0000 (16:18 +0200)] 
feat(resume): include in hostonly sloppy mode if supported by kernel

Systems might support hibernation. They need the resume module to get a
working hibernation. Users might configure their systems to enable
hibernation, but the correct order of steps are crucial for it.
Currently this workflow does not work:

1. Make sure system is supported the power state:
```
$ cat /sys/power/state
freeze mem disk
```
2. Configured swap partition
3. Populated the resume kernel boot parameter `resume=/dev/<swap partition>`
4. update grub
5. regenerate initrd

Regenerating the initrd will not include the resume module, because it
hits the "hibernation supported by the kernel, but not enabled" code
path (`/proc/cmdline` doesn not contain `resume=` yet and
`/sys/power/resume` contains `0:0`). A user would need to reboot once
before regenerating the initrd.

To make the system more predictable, include the `resume` module in
hostonly `sloppy` mode if hibernation is supported by the kernel.

Bug-Ubuntu: https://launchpad.net/bugs/2158694

20 hours agorefactor(resume): flatten nested if-else structure in check()
Benjamin Drung [Thu, 16 Jul 2026 14:11:42 +0000 (16:11 +0200)] 
refactor(resume): flatten nested if-else structure in check()

30 hours agoci(azurelinux): install busybox
Benjamin Drung [Tue, 21 Jul 2026 13:44:49 +0000 (15:44 +0200)] 
ci(azurelinux): install busybox

busybox will be needed for running the upcoming busybox test case.

31 hours agofix(network-manager): prevent command injection while parsing DHCP options
Antonio Alvarez Feijoo [Tue, 21 Jul 2026 07:11:28 +0000 (09:11 +0200)] 
fix(network-manager): prevent command injection while parsing DHCP options

Replacing `printf '%q'` with the custom `escape` function introduced a flaw: if
the whole format string is surrounded by single quotes (`'%s='%s'\n'`),
the shell consumes those inner `'` characters as quoting delimiters instead of
passing them to printf, so it receives just `%s=%s\n`, i.e., the surrounding
quotes around the value are gone. Since nothing is quoted, now commands can be
injected via dhcpopts files.

E.g.:

```
$ cat /tmp/test-rogue-dhcp
next-server=$(id > /tmp/pwned 2>&1)$
$ cat /tmp/pwned
cat: /tmp/pwned: No such file or directory
$ kf_parse next-server new_next_server < /tmp/test-rogue-dhcp > /tmp/test.dhcpopts
$ cat /tmp/test.dhcpopts
new_next_server=$(id > /tmp/pwned 2>&1)$
$ . /tmp/test.dhcpopts
$ cat /tmp/pwned
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
```

Fixes 9c7459bde0e78dd2e1e14d35c5351ef627b1b1fc

31 hours agofix(systemd-networkd): escape values from DHCP options
Antonio Alvarez Feijoo [Tue, 21 Jul 2026 09:37:27 +0000 (11:37 +0200)] 
fix(systemd-networkd): escape values from DHCP options

Although systemd-networkd filters invalid values for DHCP options before writing
them to lease files, it's a good practice to escape values read from lease files
before writing them to ".dhcpopts" files, because ".dhcpopts" files are sourced
as a shell script in multiple parts [1][2][3].

Same motivation as e509c638e68a8e3cae446d1a4f9f86e3aa6e7a99, but for
systemd-networkd.

Fixes: 0e1e78711502347412e2c0a0621773f034332499
Fixes: 7c57b1cccd4100351da5258ac6a22e07608a5e85
Fixes: GHSA-x37p-6hhc-6628
[1] https://github.com/dracut-ng/dracut/blob/02e7ae10830d1268f1acdf879ef14d5b6bc89ac3/modules.d/45net-lib/net-lib.sh#L139
[2] https://github.com/dracut-ng/dracut/blob/02e7ae10830d1268f1acdf879ef14d5b6bc89ac3/modules.d/45net-lib/netroot.sh#L44
[3] https://github.com/dracut-ng/dracut/blob/02e7ae10830d1268f1acdf879ef14d5b6bc89ac3/modules.d/74nfs/nfs-lib.sh#L109-L112

32 hours agofix(dracut-lib): sanitize variable assignments using eval
Antonio Alvarez Feijoo [Tue, 21 Jul 2026 11:37:11 +0000 (13:37 +0200)] 
fix(dracut-lib): sanitize variable assignments using eval

`splitsep()` uses `eval "$1='${tmp}'"` and `eval "$1='$str'"` to assign values
to caller-named variables. A single quote in the value breaks out of the
assignment.

`export_n()` uses `eval "$var=\"$val\""` to re-assign an unexported variable. A
double quote in the value breaks out of the assignment.

41 hours agofeat(network-manager): use escape to drop requiring bash
Benjamin Drung [Mon, 20 Jul 2026 14:05:24 +0000 (16:05 +0200)] 
feat(network-manager): use escape to drop requiring bash

Use the new `escape` function to drop requiring bash in the
network-manager module.

The output of `kf_parse` is written to
`/tmp/dhclient."$ifname".dhcpopts` which is sourced by other dracut
modules.

41 hours agofeat(base): add escape function implementing printf %q
Benjamin Drung [Mon, 20 Jul 2026 14:00:57 +0000 (16:00 +0200)] 
feat(base): add escape function implementing printf %q

In POSIX shell, `printf %q` is undefined. Add an `escape` function to
dracut-lib.sh to implement `printf %q` in POSIX shell.

42 hours agofix(overlayfs-crypt): prevent eval injection in parse_overlay_opts()
Antonio Alvarez Feijoo [Wed, 27 May 2026 06:44:00 +0000 (08:44 +0200)] 
fix(overlayfs-crypt): prevent eval injection in parse_overlay_opts()

parse_overlay_opts() used eval "${ns}${key}='${val}'" to assign
parsed options from the rd.overlay.crypt kernel cmdline parameter.
A single quote in the value breaks out of the assignment and allows
arbitrary command execution.

Fixes: GHSA-wr6r-5whr-98qx
Co-developed-by: Claude Opus 4.6 <noreply@anthropic.com>
3 days agoci(debian:sid): install systemd-tpm package
devkontrol [Sun, 19 Jul 2026 00:00:17 +0000 (20:00 -0400)] 
ci(debian:sid): install systemd-tpm package

Debian:sid has split out systemd-pcrextend into
systemd-tpm package.

See https://packages.debian.org/sid/systemd-tpm

This commit is required to resolve a regression for the
kernel-install test.

This split has been done in systemd 261-2.

6 days agotest(systemd): give more context in case of failure
Benjamin Drung [Thu, 16 Jul 2026 14:02:42 +0000 (16:02 +0200)] 
test(systemd): give more context in case of failure

To ease debugging, give more context in case of failure in the
`systemd-analyze.sh` check.

7 days agochore(deps): bump actions/setup-node from 6 to 7
dependabot[bot] [Tue, 14 Jul 2026 20:52:35 +0000 (20:52 +0000)] 
chore(deps): bump actions/setup-node from 6 to 7

Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6 to 7.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
10 days agoci(azurelinux): enable more test runs
devkontrol [Sun, 12 Jul 2026 15:44:21 +0000 (11:44 -0400)] 
ci(azurelinux): enable more test runs

Install systemd-networkd package to enable networking tests for the
Azure Linux test container.

Install diffutils package as TEST SKIPCPIO (81) needs diff command.

10 days agofix(systemd-pcrextend): add missing systemd-pcr{nvdone,osseparator}.service
Antonio Alvarez Feijoo [Wed, 1 Jul 2026 15:00:23 +0000 (17:00 +0200)] 
fix(systemd-pcrextend): add missing systemd-pcr{nvdone,osseparator}.service

systemd-pcrnvdone.service was added in systemd-v259, but runs in the initrd
since systemd-v261 [1], and it acts as additional separator measurement
separating pre-boot (firmware + bootloader) measurements from OS measurements.

systemd-pcrosseparator.service was added in systemd-v261 [2], and it measures a
separator event into PCR 9 once all NvPCRs have completed initialization.

[1] https://github.com/systemd/systemd/commit/856ab04a29bb45b41f96bd507f982e75101c537a
[2] https://github.com/systemd/systemd/commit/7c27f9f59455b199e12976c76b28b708c525b55c

10 days agofix(tpm2-tss): add missing systemd-tpm2-setup-early.service
Antonio Alvarez Feijoo [Wed, 1 Jul 2026 15:00:07 +0000 (17:00 +0200)] 
fix(tpm2-tss): add missing systemd-tpm2-setup-early.service

Added in systemd-v255 [1] to generate the Storage Root Key (SRK) in the initrd.

[1] https://github.com/systemd/systemd/commit/2e64cb71b9c0160c335d8e52954149e078bba2fb

10 days agofix(dracut-systemd): add ordering constraints
Miao Wang [Fri, 3 Jul 2026 11:57:53 +0000 (19:57 +0800)] 
fix(dracut-systemd): add ordering constraints

When dracut-initqueue is not enabled, there would be no
dracut-initqueue.service as a sequence point. So explicitly
declare After = basic.target to order dracut-pre-mount.service
after all the services ordered before dracut-initqueue.service.

Fixes: b1ae591945ac ("dracut-systemd: add back missing dependencies")
10 days agofix(dracut-install): remove FTS_NOSTAT in install_modules() fts traversal
Josh Poimboeuf [Wed, 15 Apr 2026 17:21:07 +0000 (10:21 -0700)] 
fix(dracut-install): remove FTS_NOSTAT in install_modules() fts traversal

install_modules() uses FTS_NOSTAT when traversing kernel module
directories.  With FTS_NOSTAT, fts may skip stat() and report regular
files as FTS_NSOK instead of FTS_F.  However, the fts_info check only
accepts FTS_F and FTS_SL, causing all .ko files found this way to be
silently skipped.

This was previously masked by glibc's fts implementation which ignored
FTS_NOSTAT when FTS_LOGICAL was also set, always calling stat and
returning FTS_F.  A recent glibc change (commit 99303f3871, "io: Use
gnulib fts implementation") now honors FTS_NOSTAT regardless, exposing
this bug.

The result is that all '=directory' pattern module installs (=drivers,
=crypto, =fs, etc.) find zero modules, producing an initramfs with only
explicitly-named modules (~40 instead of ~500+), which typically fails
to boot.

Fix it by removing FTS_NOSTAT so that fts always stats files and
reliably reports actual file types.

10 days agofeat(dracut): add parameter --nvmf-nbft-mode
Martin Wilck [Mon, 6 Jul 2026 16:42:52 +0000 (18:42 +0200)] 
feat(dracut): add parameter --nvmf-nbft-mode

This is equivalent to the dracut.conf option nvmf_nbft_mode.

Signed-off-by: Martin Wilck <mwilck@suse.com>
10 days agofix(nvmf): parse json output from "nvme list-subsys"
Stuart Hayes [Fri, 15 May 2026 18:21:27 +0000 (20:21 +0200)] 
fix(nvmf): parse json output from "nvme list-subsys"

Modify code that parses the output of "nvme list-subsys" to set up
rd.nvmf.discover parameter to use the json output of nvme rather than the
human-readable output.

A recent commit to nvme-cli changed the human-readable output to only
print the transport address rather than the address line that includes all
of the needed information, but the json output still contains the needed
information.

An even more recent commit to nvme-cli changed the json output (it moved
some details from the "Address" value to an "AddressDetails" object), so
support that as well as the previous format.

Signed-off-by: Stuart Hayes <stuart.w.hayes@gmail.com>
Signed-off-by: Martin Wilck <mwilck@suse.com>
10 days agofix(nvmf): make network driver determination work without nbft$X
Martin Wilck [Mon, 6 Jul 2026 20:35:27 +0000 (22:35 +0200)] 
fix(nvmf): make network driver determination work without nbft$X

82f7f7d ("improvement(74nvmf): lookup required NIC kernel modules for NBFT
interfaces") assumes that the NBFT network interfaces are named according
to the nbft$X convention, which is no longer true with the latest patches.

Fix it.

Signed-off-by: Martin Wilck <mwilck@suse.com>
10 days agofeat(nvmf): set rd.nvmf.nm=1 if NetworkManager 1.54 is detected
Martin Wilck [Mon, 16 Feb 2026 22:39:37 +0000 (23:39 +0100)] 
feat(nvmf): set rd.nvmf.nm=1 if NetworkManager 1.54 is detected

Automatically enable nm-initrd-generator with recent Networkmanager.

Signed-off-by: Martin Wilck <mwilck@suse.com>
10 days agofeat(nvmf): allow using system interface naming policy
Martin Wilck [Mon, 16 Feb 2026 22:34:20 +0000 (23:34 +0100)] 
feat(nvmf): allow using system interface naming policy

nm-initrd-generator from NetworkManager 1.54 or newer supports parsing the
NBFT directly. Because NM allows identifying network interface by MAC
address, we don't need the ifname= setting any more to identify the
interface at the cmdline stage. We just need to check whether the system
has an NBFT with at least one entry.

Introduce the cmdline parameter "rd.nvmf.nm" to force dracut to use
nm-initrd-generator to set up network interfaces from the NBFT.

Signed-off-by: Martin Wilck <mwilck@suse.com>
10 days agofeat(nvmf): add dracut.conf option nvmf_nbft_mode
Martin Wilck [Mon, 16 Feb 2026 19:11:26 +0000 (20:11 +0100)] 
feat(nvmf): add dracut.conf option nvmf_nbft_mode

Add a dracut.conf.d option to control the generation of rd.nvmf.discover=
entries if hostonly_cmdline = "yes".

The option can take the values "static" (previous default behavior,
generate cmdline entries for every NVMe subsystem in the device stack),
"nbft" (don't generate any for tcp transport if an NBFT is present),
and "match" (only generate rd.nvmf.discover= entries for subsystems that
are not matched by current NBFT entries, as implemented by the previous
commit).

The default is "match", because this should fit user expectations best.

Signed-off-by: Martin Wilck <mwilck@suse.com>
10 days agofeat(nvmf): enable adapting to NBFT reconfiguration
Martin Wilck [Mon, 16 Feb 2026 17:40:25 +0000 (18:40 +0100)] 
feat(nvmf): enable adapting to NBFT reconfiguration

The cmdline() function of the nvmf module creates rd.nvmf.discover=
cmdline entries for all discovered subsystems. But this is often
not desirable for systems booting from an NBFT table, where the
contents of the table may change between reboots. With hard-coded
rd.nvmf.discover= entries, booting may fail if the NBFT configuration
has changed.

Compare the traddr/trsvcid pairs that appear in the block device
stack with the contents of the NBFT, and don't create rd.nvmf.discover=
entries for those that are matched.

Note: This approach is simplified, as entries might differ by
host_traddr. But such configurations are extremely rare, and
because we don't use interface-specific routes (VRF-lite) in the
initrd, omitting these entries can't cause boot failure, as long
as they match by transport, traddr, and trsvcid.

A follow-up patch will introduce an option to modify this behavior.

Signed-off-by: Martin Wilck <mwilck@suse.com>
10 days agofix(dracut.conf.5): move fstab/chroot warning to hostonly_mode section
Martin Wilck [Mon, 16 Feb 2026 19:29:19 +0000 (20:29 +0100)] 
fix(dracut.conf.5): move fstab/chroot warning to hostonly_mode section

The warning about using --fstab when chrooted belongs into the
hostonly_mode section, as can be seen in commit 888d53f ("replace xml
documentation with asciidoc"). It seems to have moved slowly downward.
Fix it.

Signed-off-by: Martin Wilck <mwilck@suse.com>
10 days agoci(azurelinux): install additional packages to pass CI
devkontrol [Sun, 12 Jul 2026 02:30:15 +0000 (22:30 -0400)] 
ci(azurelinux): install additional packages to pass CI

systemd-container is required to make importctl available for
test SYSTEMD-IMPORT (45).

openssl is required for test SYSTEMD-SYSEXT (46).

10 days agofix(network-legacy): sanitize DHCP values in dhclient-script.sh
Antonio Alvarez Feijoo [Fri, 19 Jun 2026 04:36:06 +0000 (06:36 +0200)] 
fix(network-legacy): sanitize DHCP values in dhclient-script.sh

A rogue DHCP server can inject shell commands through hostname,
domain, gateway, and classless static route values. These values
are written to /tmp files that setup_net() later sources as shell.

- Sanitize hostname to RFC 952 chars (a-zA-Z0-9.-)
- Strip control chars from domain (like search already does)
- Validate gateway IPs contain only digits and dots
- Single-quote interpolated values in generated shell commands
- Validate all parse_option_121 octets are numeric upfront;
  the existing inline checks only validated mask and the first
  destination octet, leaving dest octets 2-4 and all four
  gateway octets unchecked — those flow into shell commands
  written to the initqueue/setup_net_"$netif".sh hook script
  via echo

Fixes: CVE-2026-6893
Co-developed-by: Claude Opus 4.6 <noreply@anthropic.com>
10 days agoperf(dracut-systemd): drop ExecStart from oneshot shutdown service
Benjamin Drung [Sat, 9 May 2026 10:01:08 +0000 (12:01 +0200)] 
perf(dracut-systemd): drop ExecStart from oneshot shutdown service

Systemd oneshot services that set `RemainAfterExit=yes` do not need to
specify `ExecStart` in case they define `ExecStop`.

So remove the useless `/bin/true` start command from
`dracut-shutdown.service`.

11 days agoci: switch from debian:latest to ubuntu:rolling
Benjamin Drung [Tue, 31 Mar 2026 14:15:49 +0000 (16:15 +0200)] 
ci: switch from debian:latest to ubuntu:rolling

Commit 28323e6b769c ("ci: switch from ubuntu:devel to a more stable
debian:latest") switched away from the Ubuntu devel release (which can
be more unstable since it is a release in development) but also switched
from Ubuntu to Debian.

Switch to `ubuntu:rolling` which is the latest Ubuntu release which
should be stable enough for our purposes. Ubuntu gets a new release
every six month in comparsion to Debian which cuts a new release around
every two years.

11 days agoci: run nbd test on debian:sid again
Benjamin Drung [Fri, 1 May 2026 18:08:23 +0000 (20:08 +0200)] 
ci: run nbd test on debian:sid again

The nbd 1:3.27.1-1 Debian package broke the nbd tests. nbd 1:3.27.1-2
fixed that regression.

So run the nbd test on `debian:sid` again.

Fixes: https://github.com/dracut-ng/dracut-ng/issues/2381
11 days agotest(FULL-SYSTEMD): make systemd-timesyncd optional
Jo Zzsi [Sat, 2 May 2026 23:01:19 +0000 (19:01 -0400)] 
test(FULL-SYSTEMD): make systemd-timesyncd optional

Make it optional for this test to include systemd-timesyncd
in the initramfs for the purpose of this test.

The motivation for this PR is to allow the CI to support
other alternative NTP solution.

11 days agofix: remove dirname calls
Benjamin Drung [Fri, 8 May 2026 11:14:15 +0000 (13:14 +0200)] 
fix: remove dirname calls

https://dracut-ng.github.io/dracut/developer/bash.html says that
`dirname` should not be used.

So replace the usage of `dirname` by variable expansion instead.

11 days agofix(virtfs): move mount hook to pre-mount
Miao Wang [Fri, 3 Jul 2026 13:02:52 +0000 (21:02 +0800)] 
fix(virtfs): move mount hook to pre-mount

Mount hooks are executed after sysroot.mount when systemd is used.
However, the systemd generated sysroot.mount from kernel cmdline will
always fail when the given root= begins with virtfs:, making the system
unable to start.

Moving the mount hook to pre-mount will mount the 9p virtfs directly
onto /sysroot and the generated sysroot.mount will be ignored. This
practice is similar to what is in virtiofs.

Fixes: #1397
11 days agoci: update to systemd v257 and Azure Linux v4
devkontrol [Fri, 5 Jun 2026 05:01:22 +0000 (01:01 -0400)] 
ci: update to systemd v257 and Azure Linux v4

Azure Linux v3.0 is quite dated and a door has opened to
upgrade to systemd v257 and Azure Linux v4.

11 days agotest(run-qemu): use -accel kvm instead of -enable-kvm
Miao Wang [Fri, 10 Jul 2026 09:12:51 +0000 (17:12 +0800)] 
test(run-qemu): use -accel kvm instead of -enable-kvm

-enable-kvm is believed to be deprecated [1] and -accel kvm should be
used instead. -enable-kvm will not support new architectures even if KVM
is actually supported on these architectures. -accel kvm is recommended
instead as a unified option to enable KVM on all the architectures.

[1]: https://lore.kernel.org/all/c7828107-d2c8-4cbd-9208-dcc637161597@oss.qualcomm.com/

11 days agoperf(devicetree-firmware): do not call inst_multiple if there are no fw files
Antonio Alvarez Feijoo [Fri, 3 Jul 2026 14:15:10 +0000 (16:15 +0200)] 
perf(devicetree-firmware): do not call inst_multiple if there are no fw files

Otherwise `inst_multiple -o` is called without arguments.

11 days agofeat(resume): add debug logs to check()
Benjamin Drung [Tue, 7 Jul 2026 12:49:31 +0000 (14:49 +0200)] 
feat(resume): add debug logs to check()

To ease debugging, add debug logs to the different cases in `check()`.
Then the reason for not including the `resume` module can be seen in the
output of:

```
dracut -L 5 --force
```

Related issue: https://github.com/dracut-ng/dracut/issues/1472

2 weeks agofix(crypt): do not call return to exit a systemd generator
Antonio Alvarez Feijoo [Wed, 8 Jul 2026 06:53:02 +0000 (08:53 +0200)] 
fix(crypt): do not call return to exit a systemd generator

systemd generators implemented via shell scripts are not sourced by systemd, so
calling `return` within them to exit is incorrect.

Fixes #2490

2 weeks agotest(systemd): disable man page checks in verify test
Zhang Hua [Wed, 8 Jul 2026 03:45:26 +0000 (11:45 +0800)] 
test(systemd): disable man page checks in verify test

TEST-40-SYSTEMD verifies initrd systemd targets, but systemd-analyze
verify can also check referenced man pages. In the initrd test
environment this may fail on man systemd.special, causing a false
negative before the test reaches its success path.

Use --man=no so the test validates unit semantics without depending on
man page availability.

Fixes: https://github.com/dracut-ng/dracut/issues/2492
Bug-Ubuntu: https://launchpad.net/bugs/2160087
Signed-off-by: Zhang Hua <joshua.zhang@canonical.com>
2 weeks agoci: revert temporary remove Fedora Rawhide CI
devkontrol [Fri, 19 Jun 2026 23:29:14 +0000 (19:29 -0400)] 
ci: revert temporary remove Fedora Rawhide CI

This reverts commit 039f12146821c2279d0537364fbed8cc6e350757.

Fixes: https://github.com/dracut-ng/dracut/issues/2277
3 weeks agochore(deps): bump actions/checkout from 6 to 7
dependabot[bot] [Tue, 23 Jun 2026 20:52:54 +0000 (20:52 +0000)] 
chore(deps): bump actions/checkout from 6 to 7

Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
4 weeks agotest(run-qemu): use efi firmware when testing on loongarch64
Miao Wang [Fri, 12 Jun 2026 10:47:40 +0000 (18:47 +0800)] 
test(run-qemu): use efi firmware when testing on loongarch64

When testing on loongarch64, we should use EFI firmware, since
the UEFI runtime services and ACPI tables are required by the
linux kernel for loongarch64.

4 weeks agofix(base): use printf instead of echo for hook variable
fiftydinar [Thu, 28 May 2026 15:07:19 +0000 (17:07 +0200)] 
fix(base): use printf instead of echo for hook variable

Use printf instead of echo in list_hooks() to avoid dash's echo interpreting \x2f hex escapes, which corrupts hook file paths containing escaped slashes.

1. parse-root.sh creates a hook file with \x2f-escaped device paths via str_replace()
2. list_hooks() finds the file via glob but outputs it with echo, which dash interprets as hex escapes
3. The corrupted path causes check_finished() to never find the real hook, looping until timeout (~5 min boot delay)

5 weeks agoci: install chrony to test the new chrony module
Antonio Alvarez Feijoo [Fri, 1 May 2026 05:23:14 +0000 (07:23 +0200)] 
ci: install chrony to test the new chrony module

5 weeks agotest(SYSROOT): properly fail test in case of password mismatch
Benjamin Drung [Thu, 7 May 2026 22:25:10 +0000 (00:25 +0200)] 
test(SYSROOT): properly fail test in case of password mismatch

In case the password mismatches in the sysroot test, the test should
fail. So return with code 1 instead of removing `initramfs.testing`
(which will cause the test to fail later). This eases debugging.

7 weeks agofix(systemd-networkd): get DHCP options values from networkctl
Luca Boccassi [Sun, 31 May 2026 14:29:50 +0000 (15:29 +0100)] 
fix(systemd-networkd): get DHCP options values from networkctl

The internal lease is no longer saved to the private /run/ directory
of networkd since v261, so it cannot be read from there. It was always
clearly marked as private anyway.
Use the new 'dhcp-lease' networkctl verb to print it instead.

7 weeks agofix(systemd-*): add new dlopen dependencies to modules lists
Luca Boccassi [Sun, 31 May 2026 13:47:15 +0000 (14:47 +0100)] 
fix(systemd-*): add new dlopen dependencies to modules lists

systemd v261 moved more dependencies to dlopen, including libssl which
is required by various components, like resolved

7 weeks agofix(bluetooth): skip warning when module is explicitly requested
Esat [Wed, 27 May 2026 15:42:56 +0000 (18:42 +0300)] 
fix(bluetooth): skip warning when module is explicitly requested

8 weeks agofix: replace true by :
Benjamin Drung [Fri, 8 May 2026 13:35:20 +0000 (15:35 +0200)] 
fix: replace true by :

Calling the `true` command is not needed in most cases. Use the `:`
no-operation command instead.

8 weeks agotest(container): install busybox in distro images
Nadzeya Hutsko [Tue, 26 May 2026 16:49:30 +0000 (18:49 +0200)] 
test(container): install busybox in distro images

2 months agotest(SYSTEMD-SYSEXT): use pre-pivot hook
Benjamin Drung [Thu, 7 May 2026 12:45:24 +0000 (14:45 +0200)] 
test(SYSTEMD-SYSEXT): use pre-pivot hook

The initqueue might run before the system extension is loaded.

Use the pre-pivot hook instead of the initqueue which definitively runs
late enough.

2 months agofix(iscsi): handle empty URI in firmware boot mode
gomid4497 [Mon, 13 Apr 2026 09:31:15 +0000 (15:01 +0530)] 
fix(iscsi): handle empty URI in firmware boot mode

When rd.iscsi.firmware=1 is set, netroot is either 'iscsi' or 'iscsi:'
with no real URI. parse_iscsi_root() was called with these values causing
'shift count out of range' errors as shift was called on empty positional
parameters.

Add two guards in parse_iscsi_root() to return early when there are no
parameters left to parse, and skip handle_netroot() in iscsiroot.sh when
netroot has no real target.

Fixes: https://github.com/dracut-ng/dracut-ng/issues/1701
Bug-Ubuntu: https://launchpad.net/bugs/2121865

2 months agochore(doc_site): fix missed renames to dracut-ng/dracut
Benjamin Drung [Thu, 7 May 2026 23:21:25 +0000 (01:21 +0200)] 
chore(doc_site): fix missed renames to dracut-ng/dracut

Fixes: bff857d028f ("chore: update dracut-ng/dracut-ng to dracut-ng/dracut")
2 months agofix(kernel-modules): add Mediatek MTU3 USB controller
Icenowy Zheng [Sat, 18 Apr 2026 16:42:00 +0000 (00:42 +0800)] 
fix(kernel-modules): add Mediatek MTU3 USB controller

This is the USB dual-role controller used by some MediaTek SoCs.

Adding it fixes booting from USB storage on Lenovo Chromebook Duet EDU
G2 (mt8188-geralt-ciri). That device does not have any SD slot, so USB
storage is the only usable external storage.

Signed-off-by: Icenowy Zheng <uwu@icenowy.me>
2 months agochore(docs): fix name of the compatibility doc file
Neal Gompa [Wed, 6 May 2026 23:33:36 +0000 (19:33 -0400)] 
chore(docs): fix name of the compatibility doc file

2 months agofix(docs): declare the correct location to report vulnerabilities
Neal Gompa [Wed, 6 May 2026 19:40:08 +0000 (15:40 -0400)] 
fix(docs): declare the correct location to report vulnerabilities

We use the GitHub Security Advisory system for this purpose, and
Harald Hoyer hasn't been involved in quite some time.

2 months agochore: update dracut-ng/dracut-ng to dracut-ng/dracut
Neal Gompa [Wed, 6 May 2026 19:29:13 +0000 (15:29 -0400)] 
chore: update dracut-ng/dracut-ng to dracut-ng/dracut

The project URL has changed, update accordingly.

2 months agoci(debian): drop GNU coreutils workaround for Ubuntu 25.10
Benjamin Drung [Thu, 7 May 2026 12:38:54 +0000 (14:38 +0200)] 
ci(debian): drop GNU coreutils workaround for Ubuntu 25.10

The `ubuntu:rolling` points to Ubuntu 26.04 now. So the GNU coreutils
workaround for Ubuntu 25.10 can be removed.

2 months agotest: exit after create-root.sh has been run
Benjamin Drung [Wed, 6 May 2026 16:36:43 +0000 (18:36 +0200)] 
test: exit after create-root.sh has been run

The `create-root.sh` scripts are installed as initqueue hook and soured
by it. So just having an exit hook is not enough. The script needs to
exit explicitly to shutdown the boot.

Fixes: 39e4b0a37bb5 ("test: drop poweroff call where poweroff is called by EXIT trap")
2 months agodocs: update NEWS.md and AUTHORS for release 111 111
Benjamin Drung [Sat, 2 May 2026 13:07:12 +0000 (15:07 +0200)] 
docs: update NEWS.md and AUTHORS for release 111

2 months agorevert: systemd requires cryptsetup targets installed earlier
Jo Zzsi [Fri, 17 Apr 2026 11:49:23 +0000 (07:49 -0400)] 
revert: systemd requires cryptsetup targets installed earlier

This commit reverts ad52085 and 181e1f1 .

Fixes: https://github.com/dracut-ng/dracut-ng/issues/2395
2 months agofix(systemd-cryptsetup): only filter out modules for strict hostonly
Jo Zzsi [Mon, 13 Jan 2025 01:47:09 +0000 (20:47 -0500)] 
fix(systemd-cryptsetup): only filter out modules for strict hostonly

Exclude (Filter out) dracut modules only when hostonly_mode is set
to strict (needs opt in even in hostonly).

In sloppy mode all installable optional dependencies will be installed.

Helps with the discussion for https://github.com/dracut-ng/dracut-ng/issues/748

2 months agorefactor(dracut): remove unnecessary 'realpath' call if -k/--kmoddir specified
Mewt R [Mon, 20 Apr 2026 00:37:27 +0000 (20:37 -0400)] 
refactor(dracut): remove unnecessary 'realpath' call if -k/--kmoddir specified

No need to use 'realpath' to resolve a default directory to look for modules
if one has already been specified. 'realpath' will complain if the directory doesn't exist
which can lead a user to think that something went wrong.

2 months agofix(systemd-pcrextend): add NVPCR definition files
Jo Zzsi [Sun, 15 Feb 2026 23:06:43 +0000 (18:06 -0500)] 
fix(systemd-pcrextend): add NVPCR definition files

According to https://github.com/systemd/systemd/issues/40159#issuecomment-3760597003
the initramfs is expected to include the nvpcr definition files from systemd for
v259 compatibility.

2 months agoci(debian): drop --quiet from apt-get calls
Benjamin Drung [Thu, 30 Apr 2026 20:05:56 +0000 (22:05 +0200)] 
ci(debian): drop --quiet from apt-get calls

Make the Debian/Ubuntu container build logs more verbose and easier to
debug by dropping the `--quiet` flag.

2 months agotest(SYSTEMD-SYSEXT): introduce tests for systemd-sysext
Antonio Alvarez Feijoo [Wed, 22 Apr 2026 09:42:19 +0000 (11:42 +0200)] 
test(SYSTEMD-SYSEXT): introduce tests for systemd-sysext

- A confext creates a marker in /etc/dracut-confext with the content
"dracut-sysext-success".
- A sysext creates a script in
/usr/lib/dracut/hooks/initqueue/finished/dracut-sysext.sh that simply checks if
/etc/dracut-confext exists and prints a message with its content. If this
initqueue script does not succeed, the initqueue main loop will not exit and the
system will not boot.
- Also, check in the QEMU log that "dracut-sysext-success" was printed.

Note:
- systemd-repart creates erofs partitions by default. If it is not supported by
the running distribution, override it to use squashfs.

2 months agotest: allow configuring the message to search for in check_qemu_log()
Antonio Alvarez Feijoo [Wed, 22 Apr 2026 09:39:58 +0000 (11:39 +0200)] 
test: allow configuring the message to search for in check_qemu_log()

2 months agofix(systemd-sysext): add dependency to systemd-veritysetup
Antonio Alvarez Feijoo [Wed, 22 Apr 2026 09:38:11 +0000 (11:38 +0200)] 
fix(systemd-sysext): add dependency to systemd-veritysetup

The common use case is a bootloader or a UEFI boot stub (e.g. systemd-stub(7))
that follows the BLS adding extensions found in the ESP to the /.extra directory
in the initrd. In this case, it's used by default a strict
"root=signed+absent:usr=signed+absent" image policy (see
systemd.image-policy(7)). This means, Verity authentication and a PKCS#7
signature of the Verity root hash.

2 months agofix(systemd-veritysetup): validate dm-verity signatures in userspace
Antonio Alvarez Feijoo [Wed, 22 Apr 2026 09:37:06 +0000 (11:37 +0200)] 
fix(systemd-veritysetup): validate dm-verity signatures in userspace

Since [1], if the validation against the kernel does not work, systemd searches
for PKCS#7 certificates in `/{etc,usr/lib}/verity.d` as a fallback mechanism to
validate dm-verity signatures.

[1] https://github.com/systemd/systemd/commit/c2fa92e7e8907d9658646595261fa2d3433e6e4b

2 months agofix(systemd-sysext): install kernel modules for common disk images
Antonio Alvarez Feijoo [Wed, 22 Apr 2026 09:35:53 +0000 (11:35 +0200)] 
fix(systemd-sysext): install kernel modules for common disk images

Although erofs is the default, other common filesystem types used to create disk
images without partition table are squashfs and ext4.

2 months agoperf(systemd-sysext): do not attempt to install extension metadata
Antonio Alvarez Feijoo [Wed, 22 Apr 2026 09:34:44 +0000 (11:34 +0200)] 
perf(systemd-sysext): do not attempt to install extension metadata

Files under /usr/lib/extension-release.d/extension-release.* and
/etc/extension-release.d/extension-release.* are self contained in sysexts and
confexts respectively. The important file to check if an extension can be
installed is the os-release.

2 months agofix(dmsquash-live): correct det_img_fs implementation
Jo Zzsi [Thu, 30 Apr 2026 12:26:34 +0000 (08:26 -0400)] 
fix(dmsquash-live): correct det_img_fs implementation

The `=` is being treated as an assignment operator, not part of a
suffix-strip pattern, so the trimming never happens.

Fix it by separate them.

Follow-up for 7c0298a

2 months agofix(dmsquash-live): load kernel module before mount
Jo Zzsi [Sat, 7 Feb 2026 14:21:47 +0000 (09:21 -0500)] 
fix(dmsquash-live): load kernel module before mount

The mount call may require the kernel module for the filesystem
type to be loaded in order to succeed.

Follow the already established sequence of calls for mounting.

```
det_img_fs
load_fstype
mount
```

2 months agofix(functions): prevent find_binary from dropping last PATH element
Matéo Pourrier [Tue, 28 Apr 2026 15:23:23 +0000 (17:23 +0200)] 
fix(functions): prevent find_binary from dropping last PATH element

When `read` encounters EOF before the delimiter, it returns a non-zero
exit status, causing the while loop to terminate immediately. As a result,
if the PATH string doesn't end with a colon, the very last directory in
PATH is ignored by find_binary().

This caused regressions on split-usr architectures where critical
binaries reside exclusively in /bin, and /bin happens to be
appended at the very end of the PATH by dracut.sh.

Appending a virtual colon to the Here-String ensures the loop processes
all directories correctly.

Fixes dracut-ng issue #1467.

2 months agofeat(dmsquash-live): add busybox blkid compatibility
Jo Zzsi [Sat, 7 Feb 2026 17:09:13 +0000 (12:09 -0500)] 
feat(dmsquash-live): add busybox blkid compatibility

busybox blkid does not support -s argument. Use POSIX shell
to filter out the tags needed from the output of the blkid
invocation.

Fixes https://github.com/dracut-ng/dracut-ng/issues/2207
for the dmsquash-live module.

2 months agofix(shutdown): warning printed unconditionally
Jo Zzsi [Sat, 25 Apr 2026 11:12:33 +0000 (07:12 -0400)] 
fix(shutdown): warning printed unconditionally

The shutdown dracut module unconditionally warns
"Killing all remaining processes" on every shutdown, even when
no processes need to be killed.

This produces unnecessary warning noise on the console during clean shutdowns.

The warning was introduced in commit 551c2dd (Jan 2013) and was
historically invisible because older dracut versions (e.g. 048) had a less
reliable console redirect. Since version 051,
the improved console redirect logic (echo </dev/console subshell check)
makes the warning reliably visible.

Fixes: https://github.com/dracutdevs/dracut/issues/2725
Co-authored-by: Artem Kirkor <akirkor@incomm.com>
2 months agofeat(systemd-sysusers-service): systemd-sysusers.service module
Jo Zzsi [Sun, 26 Apr 2026 22:22:54 +0000 (18:22 -0400)] 
feat(systemd-sysusers-service): systemd-sysusers.service module

This new dracut module allows to run systemd-sysusers as part of the initrd boot process.

Including this module is the preferred way for openSUSE.

Fixes: https://github.com/dracut-ng/dracut-ng/issues/1360
2 months agofix: disable hostonly_cmdline for Gentoo by default
Nowa Ammerlaan [Fri, 24 Apr 2026 08:35:26 +0000 (10:35 +0200)] 
fix: disable hostonly_cmdline for Gentoo by default

Our new users are stumbling over a check we added that prevents
accidentally including a cmdline for the live system in the initramfs
for the new install. Since the overall majority of our new users will
be setting a cmdline via the bootloader or system firmware anyway this
setting is not really useful for our users and only creates confusion
because there are now two knobs which control the same thing.

For that reason we would like to disable the hostonly_cmdline by
default (like Fedora does as well).

See-also: https://bugs.gentoo.org/971572
Signed-off-by: Nowa Ammerlaan <nowa@gentoo.org>
2 months agofix: explicitly set and document Gentoo defaults
Nowa Ammerlaan [Sun, 19 Apr 2026 12:39:00 +0000 (14:39 +0200)] 
fix: explicitly set and document Gentoo defaults

Explicitly set Gentoo configuration defaults that we have been
controlling implicitly via other packages. By documenting this
explicitly I hope that users reading this configuration file will
have an (even) easier time finding "the Gentoo way" of doing things
like including microcode or building an UKI. We control these things
outside the scope of Dracut since optional external dependencies are
required for these functions.
(linux-firmware, intel-microcode systemd-stub, ukify, etc).

See-also: https://bugs.gentoo.org/971572
Signed-off-by: Nowa Ammerlaan <nowa@gentoo.org>
2 months agodocs: document hookdir variable as always declared
Jo Zzsi [Mon, 27 Apr 2026 20:21:34 +0000 (16:21 -0400)] 
docs: document hookdir variable as always declared

hookdir variable is the recommended way to refer to the path
of the directory used for dracut hooks during boot.

This variable is part of the API for 3rd party dracut modules.

Follow-up to 04d5e29 .

2 months agofeat(dracut-catimages.sh): move images directory from /boot to /var/lib
Antonio Alvarez Feijoo [Thu, 12 Mar 2026 13:08:44 +0000 (14:08 +0100)] 
feat(dracut-catimages.sh): move images directory from /boot to /var/lib

/boot/dracut in not the right place to save images for multiple reasons, the
most obvious is that it can be a different partition with size constraints, but
also in transactional systems /boot is mounted read-only. Replace this default
directory with /var/lib/dracut/images.

2 months agofix(dracut-catimages.sh): do not create overlay image without image directory
Antonio Alvarez Feijoo [Thu, 12 Mar 2026 13:07:58 +0000 (14:07 +0100)] 
fix(dracut-catimages.sh): do not create overlay image without image directory

Images created using the content of the overlay directory are saved in the image
directory, ignoring --noimagedir, and then not appending it to the base image
either.

```
$ dracut-catimages -v --noimagedir -f test-cat.img test-base.img
Creating image /boot/dracut/90-overlay.img from directory /var/lib/dracut/overlay
Using base image test-base.img
Created test-cat.img
```

So, skip creation of overlay image with `--noimagedir`.

2 months agofix(dracut-catimages.sh): do not call shift for options without arguments
Antonio Alvarez Feijoo [Thu, 12 Mar 2026 12:55:46 +0000 (13:55 +0100)] 
fix(dracut-catimages.sh): do not call shift for options without arguments

`--nooverlay` and `--noimagedir` do not expect any arguments, so calling shift
after processing them has unintended effects.

2 months agofix(dracut-catimages.sh): log proper missing images directory
Antonio Alvarez Feijoo [Thu, 12 Mar 2026 09:03:14 +0000 (10:03 +0100)] 
fix(dracut-catimages.sh): log proper missing images directory

2 months agoci: reduce peak ci load
Jo Zzsi [Sun, 26 Apr 2026 19:07:23 +0000 (15:07 -0400)] 
ci: reduce peak ci load

I noticed that running several GitHub Actions at the same time
increases the chances of flakiness.

Spread out the daily jobs to reduce peak load and decrease the
chances of jobs overlapping.

2 months agoci: separate NBD tests into their own GitHub Action
Jo Zzsi [Sat, 25 Apr 2026 11:08:37 +0000 (07:08 -0400)] 
ci: separate NBD tests into their own GitHub Action

Make daily tests more modular to improve management of potential
failures.

2 months agotest(SYSROOT): correct path for build-parameter.txt
Jo Zzsi [Sat, 25 Apr 2026 00:33:09 +0000 (20:33 -0400)] 
test(SYSROOT): correct path for build-parameter.txt

build-parameter.txt is stored under /lib. In most cases
/usr/lib is a symbolic link to /lib, but not always.

The canonical path for build-parameter.txt is under /lib/dracut/

Follow-up to 99738e5.

Fixes: https://github.com/dracut-ng/dracut-ng/issues/2407
2 months agofix(systemd-cryptsetup): load libcryptsetup via dlopen
Antonio Alvarez Feijoo [Thu, 23 Apr 2026 08:18:59 +0000 (10:18 +0200)] 
fix(systemd-cryptsetup): load libcryptsetup via dlopen

The `systemd-cryptsetup` binary no longer depends on `libcryptsetup`, and there
is no other binary installed with the `systemd-cryptsetup` or `crypt` modules
that installs it.

```
switch_root:/root# systemd-cryptsetup --version | head -1
systemd 261 (261~devel+git20260423.43dab5ea8)
switch_root:/root# systemd-cryptsetup help
Shared library 'libcryptsetup.so.12' is not available: libcryptsetup.so.12: cannot open shared object file: No such file or directory
switch_root:/root# echo $?
1
```

Required since https://github.com/systemd/systemd/commit/43dab5ea8797e45e0702f8ee89cdf25e577a652b

2 months agofix(systemd-repart): load libfdisk via dlopen
Antonio Alvarez Feijoo [Tue, 21 Apr 2026 06:25:28 +0000 (08:25 +0200)] 
fix(systemd-repart): load libfdisk via dlopen

Required since https://github.com/systemd/systemd/commit/a066396fbc72d06e503acaf38899f949edf16c4c

3 months agofix(overlayfs): unmount NEWROOT before mounting overlay
Benjamin Drung [Mon, 13 Apr 2026 11:15:14 +0000 (13:15 +0200)] 
fix(overlayfs): unmount NEWROOT before mounting overlay

When using `rd.overlay` the mount point `/run/rootfsbase` is not
accessible any more, because `LiveOS_rootfs` is mounted over it. This is
`/proc/mounts` from the `tmpfs overlay (rd.overlay)` test case:

```
tmpfs /run tmpfs rw,nosuid,nodev,size=194628k,nr_inodes=819200,mode=755,inode64 0 0
/dev/sda /run/rootfsbase ext4 ro,relatime 0 0
LiveOS_rootfs / overlay rw,relatime,lowerdir=/run/rootfsbase,upperdir=/run/overlayfs,workdir=/run/ovlwork,uuid=on,nouserxattr 0 0
LiveOS_rootfs /run/rootfsbase overlay rw,relatime,lowerdir=/run/rootfsbase,upperdir=/run/overlayfs,workdir=/run/ovlwork,uuid=on,nouserxattr 0 0
devtmpfs /dev devtmpfs rw,nosuid,size=159436k,nr_inodes=39859,mode=755,inode64 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev,inode64,usrquota 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=600,ptmxmode=000 0 0
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
cgroup2 /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot,memory_hugetlb_accounting 0 0
none /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0
efivarfs /sys/firmware/efi/efivars efivarfs rw,nosuid,nodev,noexec,relatime 0 0
bpf /sys/fs/bpf bpf rw,nosuid,nodev,noexec,relatime,mode=700 0 0
configfs /sys/kernel/config configfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
```

This breaks use cases where the underlying needs to be accessed.

Bug-Ubuntu: https://launchpad.net/bugs/2147471

3 months agorefactor(overlayfs): exit early in case LiveOS_rootfs is mounted
Benjamin Drung [Mon, 13 Apr 2026 11:10:20 +0000 (13:10 +0200)] 
refactor(overlayfs): exit early in case LiveOS_rootfs is mounted

Increase the code readability by exiting early in case LiveOS_rootfs is
already mounted.

3 months agofeat(systemd-sysext): include systemd-{sys,conf}ext-sysroot services
Vitaly Kuznetsov [Fri, 10 Apr 2026 12:55:30 +0000 (14:55 +0200)] 
feat(systemd-sysext): include systemd-{sys,conf}ext-sysroot services

systemd v261 introduces a pair of new systemd-{sys,conf}ext-sysroot services
that are used to merge system and configuration extensions for the main system
from the initramfs. This allows the extensions to update any part of the main
system, including services that run during early boot.

Include these services in the initramfs. systemd enables them by
default (through 90-systemd-initrd.preset), but dracut does not yet support
systemd presets, so these services are enabled manually. If the newly
introduced logic is undesirable for any reason, systemd provides the
'systemd.{sys,conf}ext=' kernel command-line options, meaning dracut does not
need its own.

3 months agochore(deps): bump actions/upload-pages-artifact from 4 to 5
dependabot[bot] [Tue, 14 Apr 2026 20:53:41 +0000 (20:53 +0000)] 
chore(deps): bump actions/upload-pages-artifact from 4 to 5

Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/upload-pages-artifact/releases)
- [Commits](https://github.com/actions/upload-pages-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/upload-pages-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
3 months agofix(overlayfs-crypt): make module-setup.sh executable
Benjamin Drung [Tue, 14 Apr 2026 11:43:07 +0000 (13:43 +0200)] 
fix(overlayfs-crypt): make module-setup.sh executable

All `module-setup.sh` scripts are executable except for overlayfs-crypt
one.

3 months agoci: generate modules in labeler.yml with a script
Benjamin Drung [Tue, 14 Apr 2026 10:43:58 +0000 (12:43 +0200)] 
ci: generate modules in labeler.yml with a script

To catch missing updates to `labeler.yml` use a Python script to
generate the modules in it. Add a CI job to check for needed updates.

3 months agoci: add overlayfs-crypt to labeler
Benjamin Drung [Tue, 14 Apr 2026 10:39:40 +0000 (12:39 +0200)] 
ci: add overlayfs-crypt to labeler

Fixes: c74f8ac20500 ("feat(overlayfs-crypt): add new encrypted persistent overlay support")
3 months agoci(labeler): fix glob for squash-erofs/squash-squashfs
Benjamin Drung [Tue, 14 Apr 2026 08:51:48 +0000 (10:51 +0200)] 
ci(labeler): fix glob for squash-erofs/squash-squashfs

The glob rule for `squash-erofs` and `squash-squashfs` does not match
the correct path.