systemd recipe has:
REQUIRED_DISTRO_FEATURES += "usrmerge"
So the changes in systemd recipe can be made unconditional.

Peter

> -----Original Message-----
> From: [email protected] <openembedded-
> [email protected]> On Behalf Of Jörg Sommer via
> lists.openembedded.org
> Sent: Monday, August 24, 2026 2:48 PM
> To: [email protected]; mathieu.dubois-
> [email protected]; [email protected]; [email protected]
> Cc: [email protected]; Randolph Sapp <[email protected]>; Jörg
> Sommer <[email protected]>
> Subject: [OE-core] [PATCH v3] bitbake.conf: Extend distro feature usrmerge to
> merge bin+sbin
> 
> From: Randolph Sapp <[email protected]>
> 
> The split of bin and sbin became more artificial over time, and it is no
> longer clear why programmes goes into the one or the other directory; e.g.
> forever normal users have used sendmail in /usr/sbin, and fdisk and mkfs
> learned to operate on files to create images long ago.
> 
> Because systemd drives this movement to have only /usr/bin and symlink /bin,
> /sbin and /usr/sbin to there, the usrmerge feature (started by systemd too)
> should be extended to include the binmerge. For a system with split bin/sbin
> `systemctl status` reports the system as tainted for *unmerged-bin.*
> 
> 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/844863c61e7b501097da84a1e4d1e
> 4a6aa6d9f0d
> 
> Signed-off-by: Randolph Sapp <[email protected]>
> Signed-off-by: Jörg Sommer <[email protected]>
> ---
> Changes in v3:
> 
> * rebase on systemd 261.2
> 
> Changes in v2:
> 
> * I took Randolph's version and reworked it a bit. But the idea stays the 
> same.
> 
> Reference to v1:
> 
> * https://lists.openembedded.org/g/openembedded-core/message/234858
> 
>  meta/classes-recipe/populate_sdk_base.bbclass | 2 ++
>  meta/conf/bitbake.conf                        | 8 ++++----
>  meta/recipes-core/systemd/systemd_261.2.bb    | 6 +++---
>  3 files changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/meta/classes-recipe/populate_sdk_base.bbclass b/meta/classes-
> recipe/populate_sdk_base.bbclass
> index f32e9add01..f9367d0d17 100644
> --- a/meta/classes-recipe/populate_sdk_base.bbclass
> +++ b/meta/classes-recipe/populate_sdk_base.bbclass
> @@ -188,6 +188,8 @@ create_merged_usr_symlinks() {
>      install -d $root${base_bindir} $root${base_sbindir} $root${base_libdir}
>      ln -rs $root${base_bindir} $root/bin
>      ln -rs $root${base_sbindir} $root/sbin
> +    # if base_sbindir == base_bindir, aka binmerge
> +    test -e $root/usr/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 41e98ce629..a6833f98de 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"
> 
> @@ -44,7 +44,7 @@ firmwaredir = "${nonarch_base_libdir}/firmware"
> 
>  # 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"
> @@ -66,9 +66,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_261.2.bb b/meta/recipes-
> core/systemd/systemd_261.2.bb
> index 8237b040a5..4475fb2514 100644
> --- a/meta/recipes-core/systemd/systemd_261.2.bb
> +++ b/meta/recipes-core/systemd/systemd_261.2.bb
> @@ -196,7 +196,6 @@ def build_epoch(d):
>  PACKAGECONFIG[set-time-epoch] = "${@build_epoch(d)},-Dtime-epoch=0"
>  PACKAGECONFIG[timedated] = "-Dtimedated=true,-Dtimedated=false"
>  PACKAGECONFIG[timesyncd] = "-Dtimesyncd=true,-Dtimesyncd=false"
> -PACKAGECONFIG[sbinmerge] = "-Dsplit-bin=false,-Dsplit-bin=true"
>  PACKAGECONFIG[userdb] = "-Duserdb=true,-Duserdb=false"
>  PACKAGECONFIG[utmp] = "-Dutmp=true,-Dutmp=false"
>  PACKAGECONFIG[valgrind] = "-DVALGRIND=1,,valgrind"
> @@ -227,6 +226,7 @@ EXTRA_OEMESON += "-Dnobody-user=nobody \
>                    -Dtranslations=${@'false' if d.getVar('USE_NLS') == 'no' 
> else 'true'} \
>                    ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 
> '-Ddefault-
> mdns=no -Ddefault-llmnr=no', '', d)} \
>                    -Ddbus=disabled \
> +                  -Dsplit-bin=${@'false' if '${bindir}' == '${sbindir}' else 
> 'true'} \
>                    -Dtests=false \
>                    -Dlibc=${TCLIBC} \
>                    "
> @@ -343,8 +343,8 @@ 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 old udev rules
> +     test -e ${D}${base_sbindir}/udevadm || ln -s ${base_bindir}/udevadm
> ${D}${base_sbindir}/udevadm
> 
>       # install default policy for presets
>       # https://www.freedesktop.org/wiki/Software/systemd/Preset/#howto
> --
> 2.53.0

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#244120): 
https://lists.openembedded.org/g/openembedded-core/message/244120
Mute This Topic: https://lists.openembedded.org/mt/120902397/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to