Source: isc-dhcp
Version: 4.4.3-P1-4
Severity: normal
Tags: patch
User: [email protected]
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 <[email protected]> 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