Patchwork OpenSSH/dropbear: introducing update-alternatives for server component

login
register
mail settings
Submitter Steffen Sledz
Date May 21, 2012, 12:58 p.m.
Message ID <1337605084-9265-1-git-send-email-sledz@dresearch-fe.de>
Download mbox | patch
Permalink /patch/28063/
State Superseded
Headers show

Comments

Steffen Sledz - May 21, 2012, 12:58 p.m.
Signed-off-by: Steffen Sledz <sledz@dresearch-fe.de>
---
 recipes/dropbear/dropbear.inc |   49 ++++++++++++++++++++++++++---
 recipes/openssh/openssh.inc   |   68 +++++++++++++++++++++++++++-------------
 2 files changed, 90 insertions(+), 27 deletions(-)

Patch

diff --git a/recipes/dropbear/dropbear.inc b/recipes/dropbear/dropbear.inc
index d69c23b..ba40a22 100644
--- a/recipes/dropbear/dropbear.inc
+++ b/recipes/dropbear/dropbear.inc
@@ -6,7 +6,7 @@  DEPENDS = "zlib"
 PROVIDES = "ssh sshd"
 RPROVIDES_${PN} = "ssh sshd"
 
-INC_PR = "r7"
+INC_PR = "r8"
 
 SRC_URI = "\
   http://matt.ucc.asn.au/dropbear/dropbear-${PV}.tar.bz2 \
@@ -18,10 +18,7 @@  SRC_URI = "\
   file://default \
 "
 
-inherit autotools update-rc.d
-
-INITSCRIPT_NAME = "dropbear"
-INITSCRIPT_PARAMS = "defaults 10"
+inherit autotools
 
 CFLAGS =+ "-I."
 LD = "${CC}"
@@ -64,9 +61,38 @@  do_install() {
 	fi
 }
 
+# sshd initscript is handled explicitly because order of
+# update-rc.d and update-alternatives is important
+DEPENDS_append = " update-rc.d update-rc.d-native"
+RDEPENDS_${PN}_append = " ${@base_conditional("ONLINE_PACKAGE_MANAGEMENT", "none", "", "update-rc.d", d)}"
+
 pkg_postinst () {
 	update-alternatives --install ${bindir}/scp scp ${sbindir}/dropbearmulti 20
 	update-alternatives --install ${bindir}/ssh ssh ${sbindir}/dropbearmulti 20
+
+	update-alternatives --install ${sysconfdir}/init.d/sshd sshd dropbear 20
+
+	if test "x$D" != "x"; then
+		OPT="-r $D"
+	else
+		OPT="-s"
+	fi
+	# remove all rc.d-links potentially created from older dropbear or
+	# alternative sshd packages before creating new ones
+	update-rc.d $OPT -f dropbear remove
+	update-rc.d $OPT -f sshd remove
+	update-rc.d $OPT sshd defaults
+
+}
+
+pkg_prerm () {
+	if test "x$D" = "x"; then
+		if test "$1" = "upgrade" -o "$1" = "remove"; then
+			/etc/init.d/sshd stop
+		fi
+	fi
+
+	update-alternatives --remove sshd dropbear
 }
 
 pkg_postrm_append () {
@@ -78,6 +104,19 @@  pkg_postrm_append () {
 	fi
 	update-alternatives --remove ssh ${bindir}/dropbearmulti
 	update-alternatives --remove scp ${bindir}/dropbearmulti
+
+	if test "x$D" != "x"; then
+		OPT="-r $D"
+	else
+		OPT=""
+	fi
+	if test "$1" = "remove" -o "$1" = "purge"; then
+		if ! test -e "/etc/init.d/sshd"; then
+			update-rc.d $OPT sshd remove
+		fi
+	fi
 }
 
 CONFFILES_${PN} += "${sysconfdir}/default/dropbear"
+
+INITSCRIPT_NAME = "sshd"
diff --git a/recipes/openssh/openssh.inc b/recipes/openssh/openssh.inc
index 4555d34..5563d41 100644
--- a/recipes/openssh/openssh.inc
+++ b/recipes/openssh/openssh.inc
@@ -1,8 +1,6 @@ 
 DEPENDS = "zlib openssl"
 DEPENDS += "${@base_contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
 
-RCONFLICTS_${PN} = "dropbear"
-RCONFLICTS_${PN}-sshd = "dropbear"
 RCONFLICTS_${PN}-keygen = "ssh-keygen"
 
 SECTION = "console/network"
@@ -17,7 +15,7 @@  used to provide applications with a secure communication channel."
 HOMEPAGE = "http://www.openssh.org/"
 LICENSE = "BSD"
 
-INC_PR = "r9"
+INC_PR = "r10"
 
 inherit autotools
 
@@ -56,7 +54,7 @@  do_compile_append () {
 
 do_install_append() {
 	install -d ${D}${sysconfdir}/init.d
-	install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/sshd
+	install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/sshd.openssh
 	mv ${D}${bindir}/scp ${D}${bindir}/scp.${PN}
 	mv ${D}${bindir}/ssh ${D}${bindir}/ssh.${PN}
 	rm -f ${D}${bindir}/slogin ${D}${datadir}/Ssh.bin
@@ -66,7 +64,7 @@  do_install_append() {
 PACKAGES =+ "${PN}-keygen ${PN}-scp ${PN}-ssh ${PN}-sshd ${PN}-sftp ${PN}-misc ${PN}-sftp-server"
 FILES_${PN}-scp = "${bindir}/scp.${PN}"
 FILES_${PN}-ssh = "${bindir}/ssh.${PN} ${sysconfdir}/ssh/ssh_config"
-FILES_${PN}-sshd = "${sbindir}/sshd ${sysconfdir}/init.d/sshd"
+FILES_${PN}-sshd = "${sbindir}/sshd ${sysconfdir}/init.d/sshd.openssh"
 FILES_${PN}-sshd += "${sysconfdir}/ssh/moduli ${sysconfdir}/ssh/sshd_config"
 FILES_${PN}-sftp = "${bindir}/sftp"
 FILES_${PN}-sftp-server = "${libexecdir}/sftp-server"
@@ -74,17 +72,27 @@  FILES_${PN}-misc = "${bindir}/ssh* ${libexecdir}/ssh*"
 FILES_${PN}-keygen = "${bindir}/ssh-keygen"
 
 RDEPENDS_${PN} += "${PN}-scp ${PN}-ssh ${PN}-sshd ${PN}-keygen"
-DEPENDS_${PN}-sshd += "update-rc.d"
-RDEPENDS_${PN}-sshd += "update-rc.d ${PN}-keygen"
+RDEPENDS_${PN}-sshd += "${PN}-keygen"
+
+# sshd initscript is handled explicitly because order of
+# update-rc.d and update-alternatives is important
+DEPENDS_${PN}-sshd_append = " update-rc.d update-rc.d-native"
+RDEPENDS_${PN}-sshd_append = " ${@base_conditional("ONLINE_PACKAGE_MANAGEMENT", "none", "", "update-rc.d", d)}"
 
 pkg_postinst_${PN}-sshd() {
-if test "x$D" != "x"; then
-	exit 1
-else
-	addgroup sshd
-	adduser --system --home /var/run/sshd --no-create-home --disabled-password --ingroup sshd -s /bin/false sshd
-	update-rc.d sshd defaults 9
-fi
+	update-alternatives --install ${sysconfdir}/init.d/sshd sshd sshd.${PN} 90
+
+	if test "x$D" != "x"; then
+		OPT="-r $D"
+	else
+		OPT="-s"
+		addgroup sshd
+		adduser --system --home /var/run/sshd --no-create-home --disabled-password --ingroup sshd -s /bin/false sshd
+	fi
+	# remove all rc.d-links potentially created from alternative
+	# sshd packages before creating new ones
+	update-rc.d $OPT -f sshd remove
+	update-rc.d $OPT sshd defaults
 }
 
 pkg_postinst_${PN}-scp() {
@@ -95,6 +103,16 @@  pkg_postinst_${PN}-ssh() {
 	update-alternatives --install ${bindir}/ssh ssh ssh.${PN} 90
 }
 
+pkg_prerm_${PN}-sshd() {
+	if test "x$D" = "x"; then
+		if test "$1" = "upgrade" -o "$1" = "remove"; then
+			/etc/init.d/sshd stop
+		fi
+	fi
+
+	update-alternatives --remove sshd sshd.${PN}
+}
+
 pkg_postrm_${PN}-ssh() {
         update-alternatives --remove ${bindir}/ssh ssh.${PN}
 }
@@ -104,16 +122,22 @@  pkg_postrm_${PN}-scp() {
 }
 
 pkg_postrm_${PN}-sshd() {
-if test "x$D" != "x"; then
-	exit 1
-else
-	${sysconfdir}/init.d/sshd stop
-	deluser sshd
-	delgroup sshd
-	update-rc.d -f sshd remove
-fi
+	if test "x$D" != "x"; then
+		OPT="-r $D"
+	else
+		OPT=""
+		deluser sshd
+		delgroup sshd
+	fi
+	if test "$1" = "remove" -o "$1" = "purge"; then
+		if ! test -e "/etc/init.d/sshd"; then
+			update-rc.d $OPT sshd remove
+		fi
+	fi
 }
 
 ALLOW_EMPTY_${PN} = "1"
 CONFFILES_${PN}-sshd = "${sysconfdir}/ssh/sshd_config"
 CONFFILES_${PN}-ssh = "${sysconfdir}/ssh/ssh_config"
+
+INITSCRIPT_NAME_${PN}-sshd = "sshd"