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/844863c61e7b501097da84a1e4d1e4a6aa6d9f0d Signed-off-by: Randolph Sapp <[email protected]> Signed-off-by: Jörg Sommer <[email protected]> --- I took Randolph's version and reworked it a bit. But the idea stays the same. meta/classes-recipe/populate_sdk_base.bbclass | 2 ++ meta/conf/bitbake.conf | 8 ++++---- meta/recipes-core/systemd/systemd_261.1.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 b427ff2761..c63601b1da 100644 --- a/meta/classes-recipe/populate_sdk_base.bbclass +++ b/meta/classes-recipe/populate_sdk_base.bbclass @@ -189,6 +189,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 bdf37d0da2..18aa1441e6 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.1.bb b/meta/recipes-core/systemd/systemd_261.1.bb index 0a1d4870bf..97a91ff5e2 100644 --- a/meta/recipes-core/systemd/systemd_261.1.bb +++ b/meta/recipes-core/systemd/systemd_261.1.bb @@ -195,7 +195,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" @@ -226,6 +225,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} \ " @@ -342,8 +342,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 (#241909): https://lists.openembedded.org/g/openembedded-core/message/241909 Mute This Topic: https://lists.openembedded.org/mt/120422954/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
