Source: isc-dhcp
Version: 4.4.3-P1-4
Severity: normal
Tags: patch
User: helm...@debian.org
Usertags: dep17p3

isc-dhcp-client and isc-dhcp-client-ddns both install
/sbin/dhclient, with the latter diverting it. The diversions become
ineffective when one of them moves to /usr/sbin/dhclient.

I'm attaching a patch that moves /sbin/dhclient and applies the
required workarounds for diversions ("DEP17 M18").

Getting this right is hard. I would welcome additional testing and
reviews.

I would also advise uploading to experimental first. Please do so
soon, so we can all check the result (again).

Chris

[1] https://wiki.debian.org/UsrMerge
diff -Nru isc-dhcp-4.4.3-P1/debian/changelog isc-dhcp-4.4.3-P1/debian/changelog
--- isc-dhcp-4.4.3-P1/debian/changelog	2023-10-20 14:16:37.000000000 +0200
+++ isc-dhcp-4.4.3-P1/debian/changelog	2024-01-04 19:40:32.000000000 +0100
@@ -1,3 +1,10 @@
+isc-dhcp (4.4.3-P1-4.1) UNRELEASED; urgency=medium
+
+  * Non-maintainer upload.
+  * Move dhclient to /usr/sbin and add duplicated diversions (DEP17 P3 M18)
+
+ -- Chris Hofstaedtler <z...@debian.org>  Thu, 04 Jan 2024 19:40:32 +0100
+
 isc-dhcp (4.4.3-P1-4) unstable; urgency=low
 
   [ Athos Ribeiro ]
diff -Nru isc-dhcp-4.4.3-P1/debian/control isc-dhcp-4.4.3-P1/debian/control
--- isc-dhcp-4.4.3-P1/debian/control	2023-09-15 18:19:55.000000000 +0200
+++ isc-dhcp-4.4.3-P1/debian/control	2024-01-04 19:40:32.000000000 +0100
@@ -107,6 +107,8 @@
  isc-dhcp-client-ddns,
 Provides:
  dhcp-client,
+Conflicts:
+ isc-dhcp-client-ddns (<< 4.4.3-P1-4.1),
 Description: DHCP client for automatically obtaining an IP address
  This is the Internet Software Consortium's DHCP client.
  .
diff -Nru isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-ddns.install isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-ddns.install
--- isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-ddns.install	2022-02-23 10:28:51.000000000 +0100
+++ isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-ddns.install	2024-01-04 19:40:32.000000000 +0100
@@ -1 +1 @@
-client/dhclient sbin
+client/dhclient usr/sbin
diff -Nru isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-ddns.postinst isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-ddns.postinst
--- isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-ddns.postinst	1970-01-01 01:00:00.000000000 +0100
+++ isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-ddns.postinst	2024-01-04 19:40:32.000000000 +0100
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+set -e
+
+# DEP17 M18: Duplicate diversion in aliased location /sbin.
+
+if [ "$1" = "configure" ]; then
+	# Remove diversion in aliased path, which is only needed for upgrades.
+	dpkg-divert --package isc-dhcp-client-ddns --remove --no-rename --divert /sbin/dhclient-noddns.usr-is-merged /sbin/dhclient
+fi
diff -Nru isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-ddns.postrm isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-ddns.postrm
--- isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-ddns.postrm	2022-02-23 10:28:51.000000000 +0100
+++ isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-ddns.postrm	2024-01-04 19:40:32.000000000 +0100
@@ -3,8 +3,8 @@
 set -e 
 
 if [ "$1" = "remove" -o "$1" = "abort-install" -o "$1" = "disappear" ]; then
-        dpkg-divert --package isc-dhcp-client-ddns --remove \
-		--rename --divert /sbin/dhclient-noddns /sbin/dhclient
+	dpkg-divert --package isc-dhcp-client-ddns --remove \
+		--rename --divert /usr/sbin/dhclient-noddns /usr/sbin/dhclient
 fi
 
 #DEBHELPER#
diff -Nru isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-ddns.preinst isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-ddns.preinst
--- isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-ddns.preinst	2022-02-23 10:28:51.000000000 +0100
+++ isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-ddns.preinst	2024-01-04 19:40:32.000000000 +0100
@@ -2,9 +2,33 @@
 
 set -e 
 
-if [ "$1" != "upgrade" ]; then
-	dpkg-divert --package isc-dhcp-client-ddns --add --rename \
-		--divert /sbin/dhclient-noddns /sbin/dhclient
-fi
+# DEP17 M18: Duplicate diversion in aliased location /sbin.
+
+case "$1" in
+	install)
+		# canonical path; the one we are using going forward.
+		dpkg-divert --package isc-dhcp-client-ddns --add --rename \
+			--divert /usr/sbin/dhclient-noddns /usr/sbin/dhclient
+		# aliased path, for upgrades. postinst will --remove it.
+		dpkg-divert --package isc-dhcp-client-ddns --add --rename \
+			--divert /sbin/dhclient-noddns.usr-is-merged /sbin/dhclient
+
+		;;
+
+	upgrade)
+		dpkg-divert --package isc-dhcp-client-ddns --add --no-rename --divert /usr/sbin/dhclient-noddns /usr/sbin/dhclient
+
+		# convert a pre-existing, aliased diversion. postinst will remove it.
+		TRUENAME=$(dpkg-divert --truename /sbin/dhclient)
+		if test "$TRUENAME" != "/sbin/dhclient-noddns.usr-is-merged" -a "$TRUENAME" != "/sbin/dhclient"; then
+			dpkg-divert --package isc-dhcp-client-ddns --remove --no-rename /sbin/dhclient
+			dpkg-divert --package isc-dhcp-client-ddns --add --no-rename --divert /sbin/dhclient-noddns.usr-is-merged /sbin/dhclient
+			if test -e "$DPKG_ROOT$TRUENAME" -o -h "$DPKG_ROOT$TRUENAME"; then
+				mv "$DPKG_ROOT$TRUENAME" "$DPKG_ROOT/sbin/dhclient-noddns.usr-is-merged"
+			fi
+		fi
+
+		;;
+esac
 
 #DEBHELPER#
diff -Nru isc-dhcp-4.4.3-P1/debian/isc-dhcp-client.install isc-dhcp-4.4.3-P1/debian/isc-dhcp-client.install
--- isc-dhcp-4.4.3-P1/debian/isc-dhcp-client.install	2022-11-10 16:38:39.000000000 +0100
+++ isc-dhcp-4.4.3-P1/debian/isc-dhcp-client.install	2024-01-04 19:40:32.000000000 +0100
@@ -1,4 +1,4 @@
-dhclient sbin
+dhclient usr/sbin
 
 debian/dhclient.conf etc/dhcp
 
diff -Nru isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-udeb.install isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-udeb.install
--- isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-udeb.install	2022-02-23 10:28:51.000000000 +0100
+++ isc-dhcp-4.4.3-P1/debian/isc-dhcp-client-udeb.install	2024-01-04 19:40:32.000000000 +0100
@@ -1 +1 @@
-usr/sbin/dhclient sbin
+usr/sbin/dhclient usr/sbin
diff -Nru isc-dhcp-4.4.3-P1/debian/rules isc-dhcp-4.4.3-P1/debian/rules
--- isc-dhcp-4.4.3-P1/debian/rules	2023-09-15 18:19:55.000000000 +0200
+++ isc-dhcp-4.4.3-P1/debian/rules	2024-01-04 19:40:32.000000000 +0100
@@ -8,7 +8,7 @@
 DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
 
 LEASE_PATH=/var/lib/dhcp
-DHCLIENT_SCRIPT=/sbin/dhclient-script
+DHCLIENT_SCRIPT=/usr/sbin/dhclient-script
 
 CFLAGS+=-Wall
 CFLAGS+=-DCALL_SCRIPT_ON_ONETRY_FAIL
@@ -108,7 +108,7 @@
 	# use actual paths rather than undefined variables in man pages
 	sed -e 's|ETCDIR|/etc/dhcp|g' \
 	    -e 's/RUNDIR/\/var\/run/g' \
-	    -e 's/CLIENTBINDIR/\/sbin/g' \
+	    -e 's/CLIENTBINDIR/\/usr\/sbin/g' \
 	    -e 's/DBDIR/\/var\/lib\/dhcp/g' \
 	    -i debian/tmp/usr/share/man/man*/*
 	dh_apparmor -pisc-dhcp-client --profile-name=sbin.dhclient

Reply via email to