]> git.ipfire.org Git - thirdparty/systemd.git/log
thirdparty/systemd.git
9 days agotest: make TEST-86-MULTI-PROFILE-UKI robust against reruns 41922/head
Luca Boccassi [Sun, 3 May 2026 15:33:38 +0000 (16:33 +0100)] 
test: make TEST-86-MULTI-PROFILE-UKI robust against reruns

When qemu reboots instead of shutting down after the last iteration,
the profile is already set to profile2 but the /root/encrypted.raw is
gone so the test fails. Reset the default boot entry at the end of the
test to make it robust against reruns.

Fixes https://github.com/systemd/systemd/issues/39553

9 days agotest: make TEST-70-TPM2 robust against reruns
Luca Boccassi [Sun, 3 May 2026 15:23:41 +0000 (16:23 +0100)] 
test: make TEST-70-TPM2 robust against reruns

The test leaves a lot of state around, and when the test is re-run,
for example due to the qemu bug that makes a VM reboot instead of
shutting down, it fails.

Do more cleanups in the traps.

[  162.642175] TEST-70-TPM2.sh[2815]: Calculated public key name: 000b2b66edc3a466e81059286aaf38d09ea42a7a9dcdf6ba3b664c62f0cae4ce4f66
[  162.642628] TEST-70-TPM2.sh[2815]: PolicyAuthorize calculated digest: 2caa740101f65734d50395d6abc64fa46015d40d1f5de239434578544e592a92
[  162.643681] TEST-70-TPM2.sh[2815]: Calculated NV index name: 000b439cfa1534815bbe8d33b80c56f5a8d17d36fe94a7782b23a37b50def5fc5eaa
[  162.645111] TEST-70-TPM2.sh[2815]: PolicyAuthorizeNV calculated digest: 69ee0e89fafe6b9df2cd6a5defbf74aa46cf6d92703e645d463549da4ba5e1a4
[  162.645407] TEST-70-TPM2.sh[2815]: Combined signed PCR policies and pcrlock policies cannot be calculated offline, currently.
[  162.649576] TEST-70-TPM2.sh[2815]: Releasing crypt device /dev/loop0 context.
[  162.652433] TEST-70-TPM2.sh[2815]: Releasing device-mapper backend.
[  162.653518] TEST-70-TPM2.sh[2815]: Closing read only fd for /dev/loop0.
[  162.654359] TEST-70-TPM2.sh[2815]: Closing read write fd for /dev/loop0.
[  162.654786] TEST-70-TPM2.sh[2815]: Failed to encrypt device: Operation not supported

Fixes https://github.com/systemd/systemd/issues/38241

9 days agotest: bump device timeout to 300s for TPM2 tests
Luca Boccassi [Sun, 3 May 2026 12:27:32 +0000 (13:27 +0100)] 
test: bump device timeout to 300s for TPM2 tests

Booting with TPM2 has become slower recently so tests are randomly
failing, try to bump the default device timeout in those test VMs

9 days agotest: fix json encoding issue due to backslashes
Luca Boccassi [Sat, 2 May 2026 23:06:56 +0000 (00:06 +0100)] 
test: fix json encoding issue due to backslashes

TEST-74-AUX-UTILS.sh[3782]: + varlinkctl call /run/systemd/io.systemd.Manager io.systemd.Unit.List '{"name": "proc-sysrq\x2dtrigger.mount"}'
TEST-74-AUX-UTILS.sh[3783]: + jq -e .context.Mount
TEST-74-AUX-UTILS.sh[3782]: Failed to parse parameters at <argv[4]>:1:10: Invalid argument

Use jq to encode the input

9 days agotest: avoid getting stuck on /dev/fuse
Luca Boccassi [Sat, 2 May 2026 22:46:46 +0000 (23:46 +0100)] 
test: avoid getting stuck on /dev/fuse

On Fedora Rawhide checking /dev/fuse in the test is getting stuck and timing out:

[   47.930104] TEST-13-NSPAWN.sh[2588]: + testcase_fuse
[   47.930424] TEST-13-NSPAWN.sh[2589]: ++ cat
[   58.772538] audit: type=1131 audit(1777728357.726:778): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-importd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[  901.882562] audit: type=1131 audit(1777729200.830:782): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-tmpfiles-clean comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
Finishing after writing 176921 entries
qemu-system-x86_64: terminating on signal 15 from pid 70717 (/usr/bin/python3)

Wrap it with a timeout to avoid getting stuck forever

Follow-up for dc3223919f663b7c8b8d8d1d6072b4487df7709b

9 days agotest: make varlink StartTransient checks compatible with jq 1.6
Luca Boccassi [Sat, 2 May 2026 22:18:22 +0000 (23:18 +0100)] 
test: make varlink StartTransient checks compatible with jq 1.6

The new "varlinkctl --more StartTransient" subtest pipes a JSON-SEQ
stream of multiple records into "jq --seq -e ...". CentOS 9
ships jq 1.6, where -e only inspects the last input record's output:
when the trailing record (the final reply) doesn't match the
"select()" filter, jq exits non-zero even though earlier records
match, so the test fails.

Use --slurp which collapses the records into an array first and
returns a single bool.

Follow-up for 1cde1cc3bab595fe7b4e2befbfa08a01a172db0f

9 days agobuild(deps): bump the actions group with 6 updates
dependabot[bot] [Fri, 1 May 2026 10:59:43 +0000 (10:59 +0000)] 
build(deps): bump the actions group with 6 updates

Bumps the actions group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [github/codeql-action](https://github.com/github/codeql-action) | `4.32.4` | `4.35.2` |
| [actions/github-script](https://github.com/actions/github-script) | `8.0.0` | `9.0.0` |
| [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials) | `6.0.0` | `6.1.0` |
| [redhat-plumbers-in-action/gather-pull-request-metadata](https://github.com/redhat-plumbers-in-action/gather-pull-request-metadata) | `1.9.0` | `1.9.1` |
| [super-linter/super-linter](https://github.com/super-linter/super-linter) | `8.5.0` | `8.6.0` |
| [softprops/action-gh-release](https://github.com/softprops/action-gh-release) | `2.6.1` | `3.0.0` |

Updates `github/codeql-action` from 4.32.4 to 4.35.2
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/89a39a4e59826350b863aa6b6252a07ad50cf83e...95e58e9a2cdfd71adc6e0353d5c52f41a045d225)

Updates `actions/github-script` from 8.0.0 to 9.0.0
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/ed597411d8f924073f98dfc5c65a23a2325f34cd...3a2844b7e9c422d3c10d287c895573f7108da1b3)

Updates `aws-actions/configure-aws-credentials` from 6.0.0 to 6.1.0
- [Release notes](https://github.com/aws-actions/configure-aws-credentials/releases)
- [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md)
- [Commits](https://github.com/aws-actions/configure-aws-credentials/compare/8df5847569e6427dd6c4fb1cf565c83acfa8afa7...ec61189d14ec14c8efccab744f656cffd0e33f37)

Updates `redhat-plumbers-in-action/gather-pull-request-metadata` from 1.9.0 to 1.9.1
- [Release notes](https://github.com/redhat-plumbers-in-action/gather-pull-request-metadata/releases)
- [Commits](https://github.com/redhat-plumbers-in-action/gather-pull-request-metadata/compare/b86d1eaf7038cf88a56b26ba3e504f10e07b0ce5...62fc85c7acd15db62a0bdf007c8dbeda86eaf3b6)

Updates `super-linter/super-linter` from 8.5.0 to 8.6.0
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/61abc07d755095a68f4987d1c2c3d1d64408f1f9...9e863354e3ff62e0727d37183162c4a88873df41)

Updates `softprops/action-gh-release` from 2.6.1 to 3.0.0
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/153bb8e04406b158c6c84fc1615b65b24149a1fe...b4309332981a82ec1c5618f44dd2e27cc8bfbfda)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 4.35.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: actions/github-script
  dependency-version: 9.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
- dependency-name: aws-actions/configure-aws-credentials
  dependency-version: 6.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: redhat-plumbers-in-action/gather-pull-request-metadata
  dependency-version: 1.9.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: super-linter/super-linter
  dependency-version: 8.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: softprops/action-gh-release
  dependency-version: 3.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
9 days agobuild(deps): bump meson from 1.10.2 to 1.11.1 in /.github/workflows
dependabot[bot] [Fri, 1 May 2026 10:55:59 +0000 (10:55 +0000)] 
build(deps): bump meson from 1.10.2 to 1.11.1 in /.github/workflows

Bumps [meson](https://github.com/mesonbuild/meson) from 1.10.2 to 1.11.1.
- [Release notes](https://github.com/mesonbuild/meson/releases)
- [Commits](https://github.com/mesonbuild/meson/compare/1.10.2...1.11.1)

---
updated-dependencies:
- dependency-name: meson
  dependency-version: 1.11.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
9 days agobuild(deps): bump systemd/mkosi
dependabot[bot] [Fri, 1 May 2026 10:59:56 +0000 (10:59 +0000)] 
build(deps): bump systemd/mkosi

Bumps [systemd/mkosi](https://github.com/systemd/mkosi) from 66d51024b7149f40be4702e84275c936373ace97 to 9a28ad20bbea61894ea7b971d318a71f4374cf3b.
- [Release notes](https://github.com/systemd/mkosi/releases)
- [Commits](https://github.com/systemd/mkosi/compare/66d51024b7149f40be4702e84275c936373ace97...9a28ad20bbea61894ea7b971d318a71f4374cf3b)

---
updated-dependencies:
- dependency-name: systemd/mkosi
  dependency-version: 9a28ad20bbea61894ea7b971d318a71f4374cf3b
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
9 days agohwdb: add correct keyboard mapping for touchpad_toggle event on msi gs66 stealth...
kakolla [Sun, 3 May 2026 08:01:24 +0000 (01:01 -0700)] 
hwdb: add correct keyboard mapping for touchpad_toggle event on msi gs66 stealth laptop

9 days agocore: add ReloadCount to Manager and bump on successful reload
Simon Lucido [Mon, 20 Apr 2026 15:05:27 +0000 (17:05 +0200)] 
core: add ReloadCount to Manager and bump on successful reload

Introduce a counter that tracks how many configuration reloads have
been successfully completed by the manager. The increment lives in
manager_reload() right after the "point of no return", so failed
reload attempts that bail out earlier (e.g. during serialization)
do not bump the counter.

It is accessible as a new ReloadCount property to
org.freedesktop.systemd1.Manager (D-Bus) and ReloadCount to
io.systemd.Manager.Describe (Varlink).

Also add an integration test for ReloadCount
that verifies that the new ReloadCount property increments by one per
daemon-reload, accumulates correctly across multiple reloads, and that
D-Bus and Varlink return identical values. Also tests that the counter
reset after a reexec.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
Signed-off-by: Simon Lucido <simonlucido@meta.com>
9 days agosiphash24: introduce siphash24_compress_iovec() helper function
Yu Watanabe [Sat, 2 May 2026 14:03:15 +0000 (23:03 +0900)] 
siphash24: introduce siphash24_compress_iovec() helper function

9 days agoiovec-util: introduce iovec_done_and_memdup()
Yu Watanabe [Sat, 2 May 2026 13:10:03 +0000 (22:10 +0900)] 
iovec-util: introduce iovec_done_and_memdup()

It is similar to free_and_strdup(), but for struct iovec.

9 days agosocket-util: introduce tos_to_priority()
Yu Watanabe [Sat, 2 May 2026 13:31:03 +0000 (22:31 +0900)] 
socket-util: introduce tos_to_priority()

This maps from TOS, which can be used for setsockopt(IPPROTO_IP, IP_TOS),
to socket priority, which can be used for setsockopt(SOL_SOCKET, SO_PRIORITY).

With this, we can set priority like the following:
```
uint8_t tos = IPTOS_CLASS_CS6;
setsockopt_int(fd, IPPROTO_IP, IP_TOS, tos);
setsockopt_int(fd, SOL_SOCKET, SO_PRIORITY, tos_to_priority(tos));
```

Co-authored with Google Gemini.

10 days agohwdb: Add missing Steelseries Arctis Pro Wireless
José Miguel Sarasola [Fri, 1 May 2026 17:30:42 +0000 (19:30 +0200)] 
hwdb: Add missing Steelseries Arctis Pro Wireless

The Hub for these headsets uses the following
USB entries:

Bus 007 Device 002: ID 0451:2036 Texas Instruments, Inc. TUSB2036 Hub
Bus 007 Device 003: ID 1038:1290 SteelSeries ApS Arctis Pro Wireless
Bus 007 Device 004: ID 1038:1294 SteelSeries ApS Arctis Pro Wireless

11 days agopo: Translated using Weblate (Greek)
Jim Spentzos [Fri, 1 May 2026 00:59:23 +0000 (00:59 +0000)] 
po: Translated using Weblate (Greek)

Currently translated at 100.0% (266 of 266 strings)

Co-authored-by: Jim Spentzos <jimspentzos2000@gmail.com>
Translate-URL: https://translate.fedoraproject.org/projects/systemd/main/el/
Translation: systemd/main

11 days agobootctl: introduce "link" as alternative to kernel-install (#41543)
Lennart Poettering [Fri, 1 May 2026 08:38:22 +0000 (10:38 +0200)] 
bootctl: introduce "link" as alternative to kernel-install (#41543)

This adds "bootctl link" as alternative to kernel-install for installing
a UKI together with sidecards (confext, sysext, creds) as type 1
entries.

It has a much tigher focus than kernel-install, and doesn't do plugins
or anything.

It acts as "inverse" of the pre-existing "bootctl unlink".

12 days agoupdate TODO 41543/head
Lennart Poettering [Tue, 10 Feb 2026 11:39:02 +0000 (12:39 +0100)] 
update TODO

12 days agoci: add integration test for new bootctl functionality
Lennart Poettering [Fri, 17 Apr 2026 13:01:00 +0000 (15:01 +0200)] 
ci: add integration test for new bootctl functionality

12 days agobootctl: make sure "unlink" properly tracks "extra" files
Lennart Poettering [Fri, 20 Mar 2026 16:33:07 +0000 (17:33 +0100)] 
bootctl: make sure "unlink" properly tracks "extra" files

12 days agobootspec: generalize "addon" logic for all kinds of extra sidecars
Lennart Poettering [Tue, 10 Feb 2026 14:13:02 +0000 (15:13 +0100)] 
bootspec: generalize "addon" logic for all kinds of extra sidecars

Let's pick up all kinds of sidecars and show them, not just addons

This also fixes some issues regarding "root" directory handling.
In one context we'd resolve a directory claiming it was a "root", but it
wasn't.

Implements: https://github.com/uapi-group/specifications/pull/212

12 days agobootctl: add "link" command
Lennart Poettering [Mon, 9 Feb 2026 22:51:42 +0000 (23:51 +0100)] 
bootctl: add "link" command

12 days agobootctl: rework/modernize "unlink" and add Varlink API for it
Lennart Poettering [Fri, 10 Apr 2026 12:48:25 +0000 (14:48 +0200)] 
bootctl: rework/modernize "unlink" and add Varlink API for it

Among other things this changes tracking of the location of resources
during GC from using the BootEntrySource enum rather than a path, since
we have that and it is more efficient and easier to grok.

12 days agobootctl: add helpers that format a type1 menu entry filename from a commit nr
Lennart Poettering [Wed, 15 Apr 2026 14:09:48 +0000 (16:09 +0200)] 
bootctl: add helpers that format a type1 menu entry filename from a commit nr

12 days agobootspec: add bootspec_extract_osrelease() helper
Lennart Poettering [Fri, 20 Mar 2026 09:21:11 +0000 (10:21 +0100)] 
bootspec: add bootspec_extract_osrelease() helper

12 days agobootspec: make pe_find_uki_sections() non-static
Lennart Poettering [Fri, 13 Mar 2026 21:52:18 +0000 (22:52 +0100)] 
bootspec: make pe_find_uki_sections() non-static

12 days agobootspec: add boot_config_selected_entry() helper
Lennart Poettering [Wed, 15 Apr 2026 14:19:55 +0000 (16:19 +0200)] 
bootspec: add boot_config_selected_entry() helper

12 days agomkosi: update debian commit reference to 1302f123d9ab65bbaff5d95935eabfd659456550
Luca Boccassi [Thu, 30 Apr 2026 17:19:49 +0000 (18:19 +0100)] 
mkosi: update debian commit reference to 1302f123d9ab65bbaff5d95935eabfd659456550

1302f123d9 Restrict wildcard for new files
a6d0098d10 Install new files for upstream build
ce07fd7616 d/t/boot-and-services: use coreutils tunable in apparmor test (LP: #2125614)

12 days agoreport: report user and system CPU time per cgroup
Yaping Li [Wed, 29 Apr 2026 22:17:22 +0000 (15:17 -0700)] 
report: report user and system CPU time per cgroup

Extend io.systemd.CGroup.CpuUsage from a single per-unit nanosecond
counter to three rows distinguished by a "type" field of "total",
"user", or "system". The values come from cpu.stat's usage_usec,
user_usec and system_usec keys, read in a single keyed-attribute
fetch and cached on each CGroupInfo so each scrape only opens
cpu.stat once per cgroup.

12 days agofundamental: drop now-unused macro
Zbigniew Jędrzejewski-Szmek [Thu, 30 Apr 2026 07:31:46 +0000 (09:31 +0200)] 
fundamental: drop now-unused macro

Followup for 9d2f5b4611a47b9e5a31296cea70c2d8c6c86bbb.

12 days agooptions: get rid of "on_error" parameter to FOREACH_OPTION
Lennart Poettering [Thu, 30 Apr 2026 06:52:35 +0000 (08:52 +0200)] 
options: get rid of "on_error" parameter to FOREACH_OPTION

I am really not a fan of full code lines passed to macros as parameters.
Let's get rid of the 3rd parameter of FOREACH_OPTION() hence:

1. Let's return errors just as a regular value (though a negative one),
   that can be handled via a OPTION_ERROR case statement for the switch.
   This normalizes handling of the error, just like any other event
   returned by the option parser.

2. In order to avoid exploding the amount of boilerplate in each use
   (that just propagates the error on OPTION_ERROR), let's then
   introduce an explicit FOREACH_OPTION_OR_RETURN(), that returns from
   the calling function on its own (and makes that clear in the name).

Together this cleans up, normalizes the logic and shortens the code.

12 days agosd-json: limit the number of env variables to something reasonable
Frantisek Sumsal [Wed, 29 Apr 2026 14:50:57 +0000 (16:50 +0200)] 
sd-json: limit the number of env variables to something reasonable

Let's start with 1024, as that should be plenty for all sane use cases.

12 days agodns-question: limit the number of questions per query
Frantisek Sumsal [Wed, 29 Apr 2026 17:18:17 +0000 (19:18 +0200)] 
dns-question: limit the number of questions per query

Let's cap the number of question each query can have to something
reasonable - 128 questions per query should be more than enough for any
real-world scenario.

12 days agofundamental/cleanup: add CLEANUP_ELEMENTS() and DEFINE_POINTER_ARRAY_CLEAR_FUNC()
Daan De Meyer [Mon, 27 Apr 2026 18:03:51 +0000 (18:03 +0000)] 
fundamental/cleanup: add CLEANUP_ELEMENTS() and DEFINE_POINTER_ARRAY_CLEAR_FUNC()

DEFINE_POINTER_ARRAY_CLEAR_FUNC() generates a helper of the form
helper_array_clear(T *array, size_t n) that drops each element but does
not free the array itself, parallel to DEFINE_POINTER_ARRAY_FREE_FUNC()
for cases where the array has automatic storage duration.

CLEANUP_ELEMENTS() pairs with these helpers to provide a _cleanup_-like
attribute for fixed-size arrays: the bound is taken from ELEMENTSOF(),
and the helper is invoked across the elements at scope exit. Compared to
CLEANUP_ARRAY(), the storage is neither freed nor zeroed.

Migrate various logic across the tree over to the new macros.

sd-device: use DEFINE_POINTER_ARRAY_CLEAR_FUNC() for sd_device_unref_array_clear()

Replace the local device_unref_many() helper with the macro-generated
equivalent.

format-table: switch help-table arrays to CLEANUP_ELEMENTS()

Generate table_unref_array_clear() via DEFINE_POINTER_ARRAY_CLEAR_FUNC()
and convert the help-table arrays in bootctl, cryptenroll, nspawn,
repart and vmspawn to CLEANUP_ELEMENTS(). The arrays no longer need a
trailing NULL slot, so the size matches ELEMENTSOF() of the groups
array.

firewall-util: switch netlink message arrays to CLEANUP_ELEMENTS()

Generate sd_netlink_message_unref_array_clear() via
DEFINE_POINTER_ARRAY_CLEAR_FUNC() in place of the NULL-terminated
sd_netlink_message_unref_many(), and convert the two stack arrays of
sd_netlink_message pointers to CLEANUP_ELEMENTS().

13 days agoImprove error logging for fstat failure
Dan Anderson [Thu, 30 Apr 2026 02:53:10 +0000 (22:53 -0400)] 
Improve error logging for fstat failure

Small hygiene fix.  r must be >= 0 as per the prior statement (otherwise we would have returned).  This is really only going to be r == 0, which means return r; is return 0;  I'm updating this to use log_debug_errno

13 days agorepart: hide read-only block devices from candidates
Lennart Poettering [Wed, 29 Apr 2026 16:47:48 +0000 (18:47 +0200)] 
repart: hide read-only block devices from candidates

If they are read-only they are no candidates, since we cannot write to
them.

13 days agobinfmt-util: handle ELOOP/EACCES from automount in read-only bind mounts
Samuel Dainard [Tue, 28 Apr 2026 15:57:26 +0000 (15:57 +0000)] 
binfmt-util: handle ELOOP/EACCES from automount in read-only bind mounts

When /proc is bind-mounted read-only (common in mock/Koji buildroots,
containers, and other sandboxed environments), opening
/proc/sys/fs/binfmt_misc returns ELOOP if it is an automount point
that cannot be triggered in the read-only context.

Currently binfmt_mounted_and_writable() only handles ENOENT, so ELOOP
propagates as an error. This causes test-binfmt-util to fail with
SIGABRT and disable_binfmt() to log a spurious warning at shutdown.

Treat ELOOP and EACCES the same as ENOENT: binfmt_misc is not usably
available, return false.

Note: PR #37006 (merged April 2025) addressed ELOOP in the xstatfsat()
path, but the open() call in binfmt_mounted_and_writable() remained
unhandled.

Fixes #38070

13 days agoman: add section about systemd-boot Type#1 sidecars
Luca Boccassi [Wed, 29 Apr 2026 14:36:32 +0000 (15:36 +0100)] 
man: add section about systemd-boot Type#1 sidecars

Follow-up for 6b1324fb867d89147585ee20160dbe8f37beefc8

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoblockdev-list: fix per-element leak in block_device_array_free() (#41869)
Christian Brauner [Wed, 29 Apr 2026 16:28:16 +0000 (18:28 +0200)] 
blockdev-list: fix per-element leak in block_device_array_free() (#41869)

FOREACH_ARRAY declares 'i' as the iterator but the body passed 'd' (the
array base) to block_device_done(). Since mfree() leaves the field NULL
after the first call, element 0 is freed repeatedly while elements
1..N-1 leak their node, symlinks strv, model, vendor and subsystem.

The bug predates the sanitizer-instrumented callers. PR #41776's new
systemd-storage-block daemon runs blockdev_list() under ASan/LSan in
TEST-87-AUX-UTILS-VM and exposes it (15 allocs / 804 bytes leaked per
ListVolumes request). The fix also benefits repart and blockdev_list's
internal CLEANUP_ARRAY cleanup.

Follow-up for 9f6b2745eaa15be80568fde2a44d0a10ed6eb2a1

13 days agoConvert remaining udev progs to option macros (#41856)
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 15:23:18 +0000 (17:23 +0200)] 
Convert remaining udev progs to option macros (#41856)

13 days agofollow-up for recently merged PRs (#41870)
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 14:41:35 +0000 (16:41 +0200)] 
follow-up for recently merged PRs (#41870)

Just small stuff.

13 days agosd-json,user-record: store the strv size when extending it
Frantisek Sumsal [Wed, 29 Apr 2026 11:48:49 +0000 (13:48 +0200)] 
sd-json,user-record: store the strv size when extending it

So strv_push_with_size() doesn't have to recalculate the size every
time.

13 days agoupdate TODO 41870/head
Lennart Poettering [Wed, 29 Apr 2026 14:05:36 +0000 (16:05 +0200)] 
update TODO

This is mostly stuff discussed in #41776.

13 days agosd-boot: minor tweaks as follow-up for #41863
Lennart Poettering [Wed, 29 Apr 2026 13:52:29 +0000 (15:52 +0200)] 
sd-boot: minor tweaks as follow-up for #41863

This addresses some trivial points made by @keszybz in the PR review.

13 days agovolume: add an "io.systemd.StorageProvider" IPC API that is supposed to be used by...
Lennart Poettering [Wed, 29 Apr 2026 13:51:52 +0000 (15:51 +0200)] 
volume: add an "io.systemd.StorageProvider" IPC API that is supposed to be used by vmspawn/nspawn/pid1 to provide storage volumes in a generic fashion (#41776)

BindPath= in unit files, and --bind= in nspawn/vmspawn doesn't really
cut it to connect arbitrary storage infra to it. Let's do something
about it, and implement a simple, light-weight API for acquiring an fd
to a storage volume. Benefits:

1. the interface can be implemented by anyone, connecting anything to
vmspawn/nspawn/service management
2. very lose coupling: just bind a socket into a well-known dir, done
3. mounting can happen on-demand

13 days agoudevadm: convert verb dispatch to VERB macros 41856/head
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 12:52:26 +0000 (14:52 +0200)] 
udevadm: convert verb dispatch to VERB macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudev-builtin-hwdb: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 11:24:40 +0000 (13:24 +0200)] 
udev-builtin-hwdb: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoshared/options: add new helper option_parser_get_arg
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 10:20:58 +0000 (12:20 +0200)] 
shared/options: add new helper option_parser_get_arg

option_parser_next_arg() is renamed to option_parser_peek_next_arg()
to match option_parser_consume_next_arg().

A new helper is added option_parser_get_arg(…, n). It is a common pattern
to only need a single arg, and getting an array and extracting a single
item from it is too verbose.

13 days agosd-boot related work from #41543 (add "extra" stanza to bls type 1) (#41863)
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 13:25:38 +0000 (15:25 +0200)] 
sd-boot related work from #41543 (add "extra" stanza to bls type 1) (#41863)

This implements the "extra" stanza for type 1 entries in systemd-boot,
see:

https://github.com/uapi-group/specifications/commit/bde167a46c866c44e1240120695f70f0bf70aadc

It comes with a really thorough test suite matching our currently level
of testing of systemd-boot (read: there is none, I ask you to trust me,
Claude, and your review on this one)...

Split out of #41543

13 days agoSmall cleanups in sd-varlink and sd-json (#41861)
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 13:03:00 +0000 (15:03 +0200)] 
Small cleanups in sd-varlink and sd-json (#41861)

13 days agosd-bus: store the strv size when extending it (#41864)
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 13:01:12 +0000 (15:01 +0200)] 
sd-bus: store the strv size when extending it (#41864)

So strv_push_with_size() doesn't have to recalculate the size every
time.

13 days agoudev-builtin-blkid: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 11:24:36 +0000 (13:24 +0200)] 
udev-builtin-blkid: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudevadm-info: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 09:40:54 +0000 (11:40 +0200)] 
udevadm-info: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudevadm-trigger: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 09:36:00 +0000 (11:36 +0200)] 
udevadm-trigger: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudevadm-wait: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 09:34:15 +0000 (11:34 +0200)] 
udevadm-wait: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudevadm-control: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 09:33:16 +0000 (11:33 +0200)] 
udevadm-control: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudevadm-lock: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 09:31:51 +0000 (11:31 +0200)] 
udevadm-lock: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudevadm-settle: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 09:28:35 +0000 (11:28 +0200)] 
udevadm-settle: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudevadm-monitor: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 09:22:32 +0000 (11:22 +0200)] 
udevadm-monitor: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudevadm-test: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 09:17:14 +0000 (11:17 +0200)] 
udevadm-test: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudevadm-verify: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 09:16:04 +0000 (11:16 +0200)] 
udevadm-verify: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudevadm-test-builtin: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 09:01:28 +0000 (11:01 +0200)] 
udevadm-test-builtin: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudevadm-hwdb: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 09:00:00 +0000 (11:00 +0200)] 
udevadm-hwdb: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudev: convert udev-config.c to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 08:48:04 +0000 (10:48 +0200)] 
udev: convert udev-config.c to OPTION macros

--timeout-signal is now documented (fixup for
e209926778267cbd3e09ed8137bf45b7f370aed0).

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudev: fix stale optarg use
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 18:28:00 +0000 (20:28 +0200)] 
udev: fix stale optarg use

Fixup for 8623980980d3798f26f23aa56c1491cfd6ceb7b2. This didn't
cause any problems until the conversion away from getopt_long().

13 days agoshared/options: add OPTION_COMMON_RESOLVE_NAMES
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 10:02:25 +0000 (12:02 +0200)] 
shared/options: add OPTION_COMMON_RESOLVE_NAMES

13 days agoudevadm-cat: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Mon, 27 Apr 2026 07:30:54 +0000 (09:30 +0200)] 
udevadm-cat: convert to OPTION macros

13 days agoudevadm: convert option parsing to the new option parser
Zbigniew Jędrzejewski-Szmek [Sun, 26 Apr 2026 10:51:36 +0000 (12:51 +0200)] 
udevadm: convert option parsing to the new option parser

Verb dispatch is left untouched for now.

Co-developed-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
13 days agoshared/options: add option_parser_get_help_table_ns() helper
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 10:01:30 +0000 (12:01 +0200)] 
shared/options: add option_parser_get_help_table_ns() helper

It'll be used in the next commit.

13 days agoman: add a brief note about type 1 extra lines 41863/head
Lennart Poettering [Wed, 29 Apr 2026 11:35:41 +0000 (13:35 +0200)] 
man: add a brief note about type 1 extra lines

13 days agoboot: downgrade log level for an error we ignore
Lennart Poettering [Wed, 29 Apr 2026 10:39:26 +0000 (12:39 +0200)] 
boot: downgrade log level for an error we ignore

13 days agoboot: load extra files for UKIs into memory and register as initrds
Lennart Poettering [Wed, 25 Mar 2026 17:15:38 +0000 (18:15 +0100)] 
boot: load extra files for UKIs into memory and register as initrds

This generates on-the-fly cpio initrds from 'extra' resources declared
in Type #1 entries and installs them via the Linux initrd protocol so
that they get passed to the Linux kernel.

Replaces: #39286

13 days agoboot: parse 'extra' type 1 stanza too
Lennart Poettering [Fri, 20 Mar 2026 16:46:15 +0000 (17:46 +0100)] 
boot: parse 'extra' type 1 stanza too

This loads the new 'extra' stanza, but doesn't actually do anything with
it yet. That's added in a later commit.

Replaces: #39286

Implements: https://github.com/uapi-group/specifications/pull/212

13 days agocpio: move TPM PCR info into CpioTarget
Lennart Poettering [Wed, 29 Apr 2026 10:01:59 +0000 (12:01 +0200)] 
cpio: move TPM PCR info into CpioTarget

The PR to measure into is closely associated with where we place a
resource in the initrd cpios. Hence, let's also track it in CpioTarget,
thus simplifying our function parameter lists that way.

No change in behaviour.

13 days agocore: limit the number of units that can be requested over ListUnitsByNames 41864/head
Frantisek Sumsal [Wed, 29 Apr 2026 10:02:32 +0000 (12:02 +0200)] 
core: limit the number of units that can be requested over ListUnitsByNames

13 days agosd-bus: store the strv size when extending it
Frantisek Sumsal [Wed, 29 Apr 2026 09:50:01 +0000 (11:50 +0200)] 
sd-bus: store the strv size when extending it

So strv_push_with_size() doesn't have to recalculate the size every
time.

13 days agoTODO: track StorageProvider follow-ups, sketch a NetworkProvider sibling 41776/head
Lennart Poettering [Thu, 23 Apr 2026 10:16:24 +0000 (12:16 +0200)] 
TODO: track StorageProvider follow-ups, sketch a NetworkProvider sibling

Records the still-missing StorageProvider integrations (nspawn,
vmspawn, service-manager BindVolume=) and replaces the now-obsolete
generic "storage API via varlink" entry with a NetworkProvider
proposal modelled on it.

13 days agotest: add integration test for storagectl and storage providers
Lennart Poettering [Wed, 29 Apr 2026 00:25:07 +0000 (02:25 +0200)] 
test: add integration test for storagectl and storage providers

VM-only test that exercises both shipped providers through storagectl:
verifies the well-known sockets exist, lists providers/volumes/
templates, creates and acquires volumes from each template
(sparse-file, allocated-file, directory, subvolume), attaches a loop
device to cover the block provider, and exercises the mount.storage
helper.

13 days agostorage: add 'storagectl' command-line tool
Lennart Poettering [Wed, 22 Apr 2026 21:44:04 +0000 (23:44 +0200)] 
storage: add 'storagectl' command-line tool

CLI for inspecting and using storage providers. Scans
/run/systemd/io.systemd.StorageProvider/ (or the user-mode equivalent)
for AF_UNIX sockets and talks to each one over Varlink. Verbs:
"volumes" lists volumes across all providers, "templates" lists
supported creation templates, "providers" lists the endpoints
themselves.

Also installed as a mount.storage helper, so
'mount -t storage PROVIDER:VOLUME /mnt' (or 'mount -t storage.<fstype>'
to put a fresh filesystem on a block volume) acquires the volume and
mounts it. Ships with bash/zsh completions and a man page.

13 days agostorage: add systemd-storage-fs@.service provider
Lennart Poettering [Thu, 23 Apr 2026 07:00:46 +0000 (09:00 +0200)] 
storage: add systemd-storage-fs@.service provider

Second StorageProvider implementation, exposing regular files and
directories from a backing filesystem. In system mode the backing
directory is /var/lib/storage/, in user mode $XDG_STATE_HOME/storage/;
entries with a .volume suffix are exposed, with the inode type
determining whether the volume is reported as reg, dir or (via
symlinked/bind-mounted device node) blk.

Unlike the block provider, this one supports creating volumes
on-demand from a small set of built-in templates: sparse-file,
allocated-file, directory and subvolume.

13 days agostorage: add systemd-storage-block@.service provider
Lennart Poettering [Thu, 23 Apr 2026 07:00:06 +0000 (09:00 +0200)] 
storage: add systemd-storage-block@.service provider

First implementation of io.systemd.StorageProvider, exposing all block
devices known to udev (disks, partitions, dm nodes, …) as volumes of
type "blk". Names are picked from stable /dev/mapper and /dev/disk/by-*
symlinks; content-derived identifiers (by-uuid, by-label, …) are
intentionally avoided for security. Volume creation is not supported by
this backend.

Socket-activated via /run/systemd/io.systemd.StorageProvider/block.
Also adds shared storage-util.[ch] (VolumeType / CreateMode helpers)
that subsequent providers reuse.

13 days agoshared: add io.systemd.StorageProvider Varlink interface
Lennart Poettering [Thu, 23 Apr 2026 06:59:20 +0000 (08:59 +0200)] 
shared: add io.systemd.StorageProvider Varlink interface

Generic Varlink API for services that hand out file descriptors to
storage volumes. Three methods: Acquire() returns an fd for a named
volume (optionally creating it from a template), ListVolumes()
enumerates available volumes, ListTemplates() enumerates supported
creation templates. Volume types follow kernel inode-type naming:
blk (block device), reg (regular file), dir (directory).

Intent is that multiple providers can sit behind AF_UNIX sockets in a
well-known directory and be consumed uniformly by nspawn, vmspawn,
the service manager (BindVolume=) and similar tools.

13 days agolibsystemd: Clean up meson.build
Daan De Meyer [Tue, 28 Apr 2026 17:47:14 +0000 (19:47 +0200)] 
libsystemd: Clean up meson.build

Merge the two blocks adding tests, since there seems to be
no obvious reason to have two separate blocks, as they both
contain tests from the same libraries.

13 days agosd-json: stop printing debug messages about extension fields 41861/head
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 09:20:06 +0000 (11:20 +0200)] 
sd-json: stop printing debug messages about extension fields

The intent was good, but we now print two or three of those messages
for each report metrics received on the wire. If the json object is
extensible, then it's all good and we don't need to inundate the user
with this trivial information. (And the message also sounds like
something is wrong or unexpected, when it totally isn't.)

...
(string):1:73: Unrecognized object field 'object', assuming extension.
(string):1:89: Unrecognized object field 'value', assuming extension.
json-stream: Received message: {"parameters":{"name":"io.systemd.Network.CarrierState","object":"virbr0","value":"degraded-carrier"},"continues":true}
(string):1:66: Unrecognized object field 'object', assuming extension.
(string):1:83: Unrecognized object field 'value', assuming extension.
json-stream: Received message: {"parameters":{"name":"io.systemd.Network.CarrierState","object":"lo","value":"carrier"},"continues":true}
(string):1:66: Unrecognized object field 'object', assuming extension.
(string):1:79: Unrecognized object field 'value', assuming extension.
json-stream: Received message: {"parameters":{"name":"io.systemd.Network.CarrierState","object":"wlp0s20f3","value":"carrier"},"continues":true}
(string):1:66: Unrecognized object field 'object', assuming extension.
(string):1:86: Unrecognized object field 'value', assuming extension.
...

13 days agosd-varlink: reduce size of varlink structs
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 09:00:00 +0000 (11:00 +0200)] 
sd-varlink: reduce size of varlink structs

struct sd_varlink:
- /* size: 448, cachelines: 7, members: 21 */
+ /* size: 432, cachelines: 7, members: 21 */

struct sd_varlink_server:
- /* size: 160, cachelines: 3, members: 21 */
+ /* size: 152, cachelines: 3, members: 21 */

13 days agosd-varlink: drop pointless bitfield
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 08:54:43 +0000 (10:54 +0200)] 
sd-varlink: drop pointless bitfield

As is often the case, in this case because of alignment, we are actually
not saving any space. With the bitfield we are using one bit of the 8 bytes
allocated, and without the bitfield we are using 8 bits of that.

But we're paying a price in generated code, at every access site to the
field:

$ diff <(objdump -S build/libsystemd.so.old) <(objdump -S build/libsystemd.so.new)
...
       v->protocol_upgrade = false;
-   fa2d2: 48 8b 45 a8           mov    -0x58(%rbp),%rax
-   fa2d6: 0f b6 90 90 01 00 00  movzbl 0x190(%rax),%edx
-   fa2dd: 83 e2 fe              and    $0xfffffffe,%edx
-   fa2e0: 88 90 90 01 00 00     mov    %dl,0x190(%rax)
+   fa2a9: 48 8b 45 a8           mov    -0x58(%rbp),%rax
+   fa2ad: c6 80 90 01 00 00 00  movb   $0x0,0x190(%rax)

13 days agomkosi: Install liburing
Daan De Meyer [Mon, 27 Apr 2026 21:46:37 +0000 (23:46 +0200)] 
mkosi: Install liburing

Make sure liburing is installed so it's available for
experimentation in sd-event integration.

2 weeks agocore: add io.systemd.Unit.StartTransient() to the varlink API (#41583)
Michael Vogt [Wed, 29 Apr 2026 06:20:56 +0000 (08:20 +0200)] 
core: add io.systemd.Unit.StartTransient() to the varlink API (#41583)

This commit adds a simple version of io.systemd.Unit.StartTransient
for varlink. It is similar to the dbus version, but there is a key
difference:
1. Instead of building the unit from key/value properties it
takes a structured json object "UnitContext" with a "Service" field
inside.
   It is also only implementing a minimal set of what can be done with a
   service.
2. No aux units (for now)
3. When called with --more the varlink socket can notify about
   state changes depending on the notify{Job,Unit}Changes parameter

This aligns to the json objects/format from
https://github.com/systemd/systemd/pull/39391
and to show how the format can be shared it adds a new
(minimal) `ServiceContext` that is now part of
`io.systemd.Unit.List()`.

2 weeks agoci: Reduce noise from claude-review workflow
Daan De Meyer [Tue, 28 Apr 2026 07:26:12 +0000 (09:26 +0200)] 
ci: Reduce noise from claude-review workflow

2 weeks agoAdd "namespaces" to option macros, convert systemd-run+run0 (#41844)
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 17:38:04 +0000 (19:38 +0200)] 
Add "namespaces" to option macros, convert systemd-run+run0 (#41844)

2 weeks agoupdate TODO
Lennart Poettering [Tue, 28 Apr 2026 10:04:20 +0000 (12:04 +0200)] 
update TODO

2 weeks agoshared/options: add an assert loop to verify ordering 41844/head
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 06:45:03 +0000 (08:45 +0200)] 
shared/options: add an assert loop to verify ordering

If things are misordered, we need to catch this. Use assert_se to make
the check also in custom builds that otherwise disable assertions.

2 weeks agorun: use a "named namespace" also for the main option parser
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 06:11:40 +0000 (08:11 +0200)] 
run: use a "named namespace" also for the main option parser

It seems that clang reorders the entries in the options array that
originate from different functions, but not within a function. Using
"named namespaces" exclusively should sidestep the issue.

(A bigger hammer would be to sort the array. We *can* do this, since the
options have the increasing .id field. But that'd require duplicating
the memory or making it writable. Let's avoid this until we know for
sure that it's needed.)

2 weeks agorun: convert run0 option parser to macros
Zbigniew Jędrzejewski-Szmek [Mon, 27 Apr 2026 22:30:08 +0000 (00:30 +0200)] 
run: convert run0 option parser to macros

This exercises the new option namespace code.

--help output is generally the same, except for the formatting changes
related to use of the new output helpers and the common option macros.

--same-root-dir is now documented (followup for
  475729b80532dfbbce98705dade6570ce5cc29f0).

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
2 weeks agorun: convert parse_argv() to OPTION macros
Zbigniew Jędrzejewski-Szmek [Mon, 27 Apr 2026 22:04:50 +0000 (00:04 +0200)] 
run: convert parse_argv() to OPTION macros

--system is now documented (fixup for 66b1e746055b9c56fd72c0451a4cfb2b06cf3f20).
--capsule is now documented (fixup for 759b3c082d463a488235592df45cbebefbe1ad5c).

--help output is generally the same, except for the formatting changes
related to use of the new output helpers and common option macros.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
2 weeks agorun: reorder switch cases to match help() output order
Zbigniew Jędrzejewski-Szmek [Mon, 27 Apr 2026 21:58:24 +0000 (23:58 +0200)] 
run: reorder switch cases to match help() output order

Both parse_argv() and parse_argv_sudo_mode() handled options in an
order that no longer matched the help text. Reorder the case statements
so the source order mirrors what the user sees in --help.

In parse_argv_sudo_mode(), drop the case 'i' → ARG_VIA_SHELL fall-through
so the cases can be sequenced independently; 'i' now sets arg_via_shell
directly.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
2 weeks agoshared/options: introduce "namespaces" for options
Zbigniew Jędrzejewski-Szmek [Mon, 27 Apr 2026 20:56:50 +0000 (22:56 +0200)] 
shared/options: introduce "namespaces" for options

This allows multiple option parsers to be defined in a single
compilation unit. We put the OPTION_NAMESPACE("name") to split
up the options. The basic implementation is similar to groups,
except that groups only matter for help display, while namespaces
matter for both help display and actual option parsing. When parsing,
we locate the appropriate range between the beginning of options
and the next namespace marker or between two namespace markers and
only look at that range.

2 weeks agoloop-util: don't reuse partition fd when partscan needed
Clayton Craft [Tue, 28 Apr 2026 02:38:26 +0000 (19:38 -0700)] 
loop-util: don't reuse partition fd when partscan needed

Some devices (e.g. android phones running pmOS) cannot have their OEM
partition table altered without breaking the firmware, so the distros's
partitions live inside a nested GPT carved into one of the OEM
partitions. Exposing these subpartitions requires wrapping the outer
partition in a loop device with partscan enabled, since the kernel does
not go into nested partition tables.

systemd already detects this case in udev-builtin-blkid
(ID_PART_GPT_AUTO_ROOT_DISK_NEEDS_LOOP) and acts on with
systemd-loop@.service, but this fails towards the end.
loop_device_make_internal has an optimization where if the input is
already a block device with a matching sector size, it skips creating
a loop and just hands back the original fd. That's fine for whole disks
but wrong for partitions, which don't support partscan, so this causes
dissect_image to fail with EPROTONOSUPPORT.

This patch changes the behavior to only take the shortcut when the input
is a whole disk, or when partscan was not requested.

Co-Authored-By: Clayton Craft <clayton@craftyguy.net>
2 weeks agoshared/options: fix --help indentation for long options
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 09:12:43 +0000 (11:12 +0200)] 
shared/options: fix --help indentation for long options

In 4339197f5d4f712bc900d8e09c892015d48b19bb the helper to format -o/--opt=
was split out, but the indentation was for --long-options was messed up.
We'd print:
Options:
  -h --help             Show this help
  --version             Show package version
  --no-ask-password     Do not prompt for password
  ...
But we want
  -h --help             Show this help
     --version          Show package version
     --no-ask-password  Do not prompt for password
  ...

The prefix argument was arguably ugly, even if it allowed one alloc to be
avoided. Let's get rid of it and let the handler prefix the string as
appropriate. This makes other callers nicer too.

Fixup for 4339197f5d4f712bc900d8e09c892015d48b19bb.

2 weeks agocore: ensure all types from execute.h start with Exec
Lennart Poettering [Tue, 28 Apr 2026 10:05:28 +0000 (12:05 +0200)] 
core: ensure all types from execute.h start with Exec

Until very recently all types defined by execute.h started with "Exec"
in the name. I think that was useful, since it made clear that the types
are associated with the ExecContext infrastructure. Let's hence restore
this.

(If we every move these types out of execute.h we should drop the "Exec"
prefix again. But today is not that day.)

No real code changes, just dumb renaming.