From: <rs@ti.com>
To: <richard.purdie@linuxfoundation.org>, <ross.burton@arm.com>,
<mathieu.dubois-briand@bootlin.com>
Cc: <openembedded-core@lists.openembedded.org>,
<peter.kjellerstedt@axis.com>, <joerg.sommer@navimatix.de>
Subject: [oe-core][PATCHv2] systemd: fix unmerged-bin tainted message
Date: Fri, 10 Apr 2026 13:27:48 -0500 [thread overview]
Message-ID: <20260410182747.1646597-2-rs@ti.com> (raw)
From: Randolph Sapp <rs@ti.com>
Systemd prefers both /bin and /sbin to link to /usr/bin. If this is not
the case it reports that the system is tainted in systemctl status.
Add a link from /usr/sbin to /usr/bin to prevent anything from being
excluded from the merged bin directory. This mimics the current merged
bin directory structure of Arch Linux [1].
Update the systemd recipe to prevent creating a duplicate link when
sbinmerge is enabled.
Override most sbin variables to point to their bin equivalent when
usermerge is enabled, with the exception being base_sbindir_native and
sbindir_native. There is no guarantee the host machine is using this
filesystem scheme.
This check was added to systemd back in 2024 [2].
[1] https://gitlab.archlinux.org/archlinux/packaging/packages/filesystem/-/blob/main/PKGBUILD
[2] https://github.com/systemd/systemd/commit/844863c61e7b501097da84a1e4d1e4a6aa6d9f0d
Signed-off-by: Randolph Sapp <rs@ti.com>
---
v2:
- Use recommended replacement variable when usermerge is enabled
- Apply replacement to other relevant variables in this file
- Keep usrmerge distro feature separate as I believe there is still some
merit to mimicking a systemd filesystem in a non-systemd enabled
environment, and I didn't hear too much discussion previously
meta/classes-recipe/populate_sdk_base.bbclass | 5 +++--
meta/conf/bitbake.conf | 8 ++++----
meta/recipes-core/systemd/systemd_259.5.bb | 8 ++++++--
3 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/meta/classes-recipe/populate_sdk_base.bbclass b/meta/classes-recipe/populate_sdk_base.bbclass
index b427ff2761..15f393a3bb 100644
--- a/meta/classes-recipe/populate_sdk_base.bbclass
+++ b/meta/classes-recipe/populate_sdk_base.bbclass
@@ -186,9 +186,10 @@ POPULATE_SDK_POST_HOST_COMMAND:append:task-populate-sdk = " write_host_sdk_manif
# Prepare the root links to point to the /usr counterparts.
create_merged_usr_symlinks() {
root="$1"
- install -d $root${base_bindir} $root${base_sbindir} $root${base_libdir}
+ install -d $root${base_bindir} $root${base_libdir}
ln -rs $root${base_bindir} $root/bin
- ln -rs $root${base_sbindir} $root/sbin
+ ln -rs $root${base_bindir} $root/sbin
+ ln -rs $root${base_bindir} $root/usr/sbin
ln -rs $root${base_libdir} $root/${baselib}
if [ "${nonarch_base_libdir}" != "${base_libdir}" ]; then
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 84450386d9..5d27e70b04 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -22,7 +22,7 @@ root_prefix = "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '${exec_prefi
# Base paths
export base_bindir = "${root_prefix}/bin"
-export base_sbindir = "${root_prefix}/sbin"
+export base_sbindir = "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '${base_bindir}', '${root_prefix}/sbin', d)}"
export base_libdir = "${root_prefix}/${baselib}"
export nonarch_base_libdir = "${root_prefix}/lib"
@@ -43,7 +43,7 @@ export systemd_user_unitdir = "${nonarch_libdir}/systemd/user"
# Architecture dependent paths
export bindir = "${exec_prefix}/bin"
-export sbindir = "${exec_prefix}/sbin"
+export sbindir = "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '${bindir}', '${exec_prefix}/sbin', d)}"
export libdir = "${exec_prefix}/${baselib}"
export libexecdir = "${exec_prefix}/libexec"
export includedir = "${exec_prefix}/include"
@@ -65,9 +65,9 @@ bindir_cross = "/bin"
bindir_crossscripts = "${bindir}/crossscripts"
prefix_nativesdk = "/usr"
bindir_nativesdk = "${prefix_nativesdk}/bin"
-sbindir_nativesdk = "${prefix_nativesdk}/sbin"
+sbindir_nativesdk = "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '${bindir_nativesdk}', '${prefix_nativesdk}/sbin', d)}"
base_bindir_nativesdk = "/bin"
-base_sbindir_nativesdk = "/sbin"
+base_sbindir_nativesdk = "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '${base_bindir_nativesdk}', '/sbin', d)}"
includedir_nativesdk = "${prefix_nativesdk}/include"
libdir_nativesdk = "${prefix_nativesdk}/lib"
base_libdir_nativesdk = "/lib"
diff --git a/meta/recipes-core/systemd/systemd_259.5.bb b/meta/recipes-core/systemd/systemd_259.5.bb
index c3cb605b4d..d84e38d7cd 100644
--- a/meta/recipes-core/systemd/systemd_259.5.bb
+++ b/meta/recipes-core/systemd/systemd_259.5.bb
@@ -69,6 +69,7 @@ PACKAGECONFIG ??= " \
quotacheck \
randomseed \
resolved \
+ sbinmerge \
serial-getty-generator \
set-time-epoch \
sysusers \
@@ -339,8 +340,11 @@ do_install() {
install -m 0644 ${UNPACKDIR}/org.freedesktop.hostname1_no_polkit.conf ${D}${datadir}/dbus-1/system.d/
fi
- # create link for existing udev rules
- ln -s ${base_bindir}/udevadm ${D}${base_sbindir}/udevadm
+ # create link for existing udev rules if sbinmerge is not enabled
+ if ${@bb.utils.contains('PACKAGECONFIG', 'sbinmerge', 'false', 'true', d)}
+ then
+ ln -s ${base_bindir}/udevadm ${D}${base_sbindir}/udevadm
+ fi
# install default policy for presets
# https://www.freedesktop.org/wiki/Software/systemd/Preset/#howto
--
2.53.0
reply other threads:[~2026-04-10 18:31 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260410182747.1646597-2-rs@ti.com \
--to=rs@ti.com \
--cc=joerg.sommer@navimatix.de \
--cc=mathieu.dubois-briand@bootlin.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=peter.kjellerstedt@axis.com \
--cc=richard.purdie@linuxfoundation.org \
--cc=ross.burton@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox