From c934d1dce96af6fcba1075deb637be67dc635405 Mon Sep 17 00:00:00 2001 From: Andreas Oberritter Date: Sat, 15 Oct 2016 19:54:37 +0200 Subject: bash: use update-alternatives for the bash binary Busybox may offer a bash applet. If enabled, the alternatives mechanism avoids breaking logins if bash gets deinstalled while /bin/bash is configured as a login shell. Signed-off-by: Andreas Oberritter --- meta/recipes-core/busybox/busybox.inc | 9 +++++++++ meta/recipes-extended/bash/bash.inc | 6 ++++-- 2 files changed, 13 insertions(+), 2 deletions(-) (limited to 'meta') diff --git a/meta/recipes-core/busybox/busybox.inc b/meta/recipes-core/busybox/busybox.inc index 39c2eef082..56cd6b9180 100644 --- a/meta/recipes-core/busybox/busybox.inc +++ b/meta/recipes-core/busybox/busybox.inc @@ -395,6 +395,9 @@ pkg_postinst_${PN} () { fi done fi + if grep -q "^${base_bindir}/bash$" $D${sysconfdir}/busybox.links*; then + grep -q "^${base_bindir}/bash$" $D${sysconfdir}/shells || echo ${base_bindir}/bash >> $D${sysconfdir}/shells + fi } pkg_prerm_${PN} () { @@ -419,6 +422,12 @@ pkg_prerm_${PN} () { export PATH=$PATH:$tmpdir } +pkg_postrm_${PN} () { + if grep -q "^${base_bindir}/bash$" $D${sysconfdir}/busybox.links* && [ ! -e $D${base_bindir}/bash ]; then + printf "$(grep -v "^${base_bindir}/bash$" $D${sysconfdir}/shells)\n" > $D${sysconfdir}/shells + fi +} + pkg_prerm_${PN}-syslog () { # remove syslog if test "x$D" = "x"; then diff --git a/meta/recipes-extended/bash/bash.inc b/meta/recipes-extended/bash/bash.inc index 1d08526c9e..a05b987b87 100644 --- a/meta/recipes-extended/bash/bash.inc +++ b/meta/recipes-extended/bash/bash.inc @@ -14,9 +14,11 @@ EXTRA_OECONF = "--enable-job-control --without-bash-malloc" # This is what other major distros do. And this is what we wanted. See bug#5359 and bug#7137. CFLAGS += "-DNON_INTERACTIVE_LOGIN_SHELLS" -ALTERNATIVE_${PN} = "sh" +ALTERNATIVE_${PN} = "bash sh" +ALTERNATIVE_LINK_NAME[bash] = "${base_bindir}/bash" +ALTERNATIVE_TARGET[bash] = "${base_bindir}/bash" ALTERNATIVE_LINK_NAME[sh] = "${base_bindir}/sh" -ALTERNATIVE_TARGET[sh] = "${base_bindir}/bash" +ALTERNATIVE_TARGET[sh] = "${base_bindir}/bash.${BPN}" ALTERNATIVE_PRIORITY = "100" RDEPENDS_${PN} += "base-files" -- cgit 1.2.3-korg