package/systemd: require merged-bin
Since version 256, systemd will taint the system if /usr/bin and
/usr/sbin are not merged, known as merged-bin:
# systemctl --no-pager status
● buildroot
State: running
Units: 166 loaded (incl. loaded aliases)
Jobs: 0 queued
Failed: 0 units
Since: Mon 2025-07-07 19:48:05 UTC; 19s ago
systemd: 257.7
Tainted: unmerged-bin
CGroup: /
├─init.scope
[...]
Although this is not yet an error, it will be in the future.
To be as ready as we can be when that happens, forcibly enable
merged-bin, like we did when we initially added merged-usr (except
this time we carry the select from systemd, even though it is not
yet strictly required, rather than from the init entry).
Extend the runtime test to catch any tainted flag.
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Arnout Vandecappelle <arnout@mind.be>
Cc: Norbert Lange <nolange79@gmail.com>
Cc: Sen Hastings <sen@hastings.org>
Signed-off-by: Romain Naour <romain.naour@smile.fr>
This commit is contained in:
committed by
Romain Naour
parent
28694dcec7
commit
a530492cd3
@@ -25,6 +25,7 @@ menuconfig BR2_PACKAGE_SYSTEMD
|
||||
depends on BR2_TOOLCHAIN_GCC_AT_LEAST_8
|
||||
depends on BR2_HOST_GCC_AT_LEAST_8 # host-systemd
|
||||
select BR2_ROOTFS_MERGED_USR
|
||||
select BR2_ROOTFS_MERGED_BIN
|
||||
select BR2_PACKAGE_HAS_UDEV
|
||||
select BR2_PACKAGE_DBUS if !BR2_PACKAGE_DBUS_BROKER # runtime
|
||||
select BR2_PACKAGE_LIBCAP
|
||||
|
||||
@@ -31,6 +31,25 @@ class InitSystemSystemdBase(InitSystemBase):
|
||||
self.start_emulator(fs)
|
||||
self.check_init("/lib/systemd/systemd")
|
||||
|
||||
# Test there is no tainted flag.
|
||||
output, ret = self.emulator.run("systemctl --no-pager status")
|
||||
self.assertEqual(ret, 0, f"'systemctl status' failed with exit code {ret}, with:\n{output}")
|
||||
try:
|
||||
# 'support-ended' tainted flag is only set based on the
|
||||
# SUPPORT_END variable in /etc/os-release; as we don't set
|
||||
# it in Buildroot, we can't get that flag in the runtime
|
||||
# tests, even on our maintenance branches, so we don't need
|
||||
# to filter it out.
|
||||
tainted_flags = [
|
||||
"".join(line.split(":")[1:]).strip()
|
||||
for line in output
|
||||
if line.strip().startswith("Tainted: ")
|
||||
][0]
|
||||
raise RuntimeError(f"Tainted flags: {tainted_flags}")
|
||||
except IndexError:
|
||||
# No tainted flag \o/
|
||||
pass
|
||||
|
||||
# Test all units are OK
|
||||
output, _ = self.emulator.run("systemctl --no-pager --failed --no-legend")
|
||||
self.assertEqual(len(output), 0)
|
||||
|
||||
Reference in New Issue
Block a user