Hi,
On Fri, Jan 05, 2024 at 08:53:30PM +0100, Chris Hofstaedtler wrote:
> I'm attaching a patch that moves /sbin/dhclient and applies the
> required workarounds for diversions ("DEP17 M18").
Attached is an improved patch, that avoids the temporary file loss
that could occur in the old version. This is mostly based on work by
Helmut Grohne.
Please consider this version of the patch.
Chris
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-21 17:17:47.000000000 +0100
@@ -1,3 +1,11 @@
+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).
+ Also add Conflicts: older isc-dhcp-client-ddns. (Closes: #1060089)
+
+ -- Chris Hofstaedtler <[email protected]> Sun, 21 Jan 2024 17:17:47 +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-21 17:17:47.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-05
18:51:22.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-21
17:17:47.000000000 +0100
@@ -0,0 +1,13 @@
+#!/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
+
+#DEBHELPER#
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-05
18:51:22.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-21
17:17:47.000000000 +0100
@@ -2,9 +2,47 @@
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)
+ TRUENAME=$(dpkg-divert --truename /usr/sbin/dhclient)
+ if test "$TRUENAME" = /usr/sbin/dhclient.usr-is-merged; then
+ # isc-dhcp-client.preinst duplicated the diversion for
us.
+ # Remove duplicated diversion.
+ dpkg-divert --package isc-dhcp-client-ddns --remove
--no-rename \
+ --divert /usr/sbin/dhclient.usr-is-merged
/usr/sbin/dhclient
+ dpkg-divert --package isc-dhcp-client-ddns --add
--no-rename \
+ --divert /usr/sbin/dhclient-noddns
/usr/sbin/dhclient
+ 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
+ mv "$TRUENAME" /usr/sbin/dhclient-noddns
+ elif test "$TRUENAME" != /usr/sbin/dhclient-noddns; then
+ dpkg-divert --package isc-dhcp-client-ddns --add
--no-rename \
+ --divert /usr/sbin/dhclient-noddns
/usr/sbin/dhclient
+ TRUENAME=$(dpkg-divert --truename /sbin/dhclient)
+ 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 "$TRUENAME"; then
+ mv "$TRUENAME"
"/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-21
17:17:47.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.postinst
isc-dhcp-4.4.3-P1/debian/isc-dhcp-client.postinst
--- isc-dhcp-4.4.3-P1/debian/isc-dhcp-client.postinst 1970-01-01
01:00:00.000000000 +0100
+++ isc-dhcp-4.4.3-P1/debian/isc-dhcp-client.postinst 2024-01-21
17:17:47.000000000 +0100
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+set -e
+
+# begin-remove-after: released:forky
+if [ "$1" = configure ] &&
+ [ "$(dpkg-divert --truename /usr/sbin/dhclient)" =
/usr/sbin/dhclient.usr-is-merged ] &&
+ [ "$(dpkg-divert --listpackage /usr/sbin/dhclient)" =
isc-dhcp-client-ddns ]; then
+ # /usr/sbin/dhclient is still diverted in the same way as our
+ # preinst did. Conclude that isc-dhcp-client-ddns was installed
+ # during preinst, we duplicated the diversion and now
+ # isc-dhcp-client-ddns is removed. We have to clean up.
+ echo "Removing duplicated diversion of /usr/sbin/dhclient after
isc-dhcp-client-ddns is removed."
+ dpkg-divert --package isc-dhcp-client-ddns --remove --rename \
+ --divert /usr/sbin/dhclient.usr-is-merged /usr/sbin/dhclient
+fi
+# end-remove-after
+
+#DEBHELPER#
diff -Nru isc-dhcp-4.4.3-P1/debian/isc-dhcp-client.preinst
isc-dhcp-4.4.3-P1/debian/isc-dhcp-client.preinst
--- isc-dhcp-4.4.3-P1/debian/isc-dhcp-client.preinst 1970-01-01
01:00:00.000000000 +0100
+++ isc-dhcp-4.4.3-P1/debian/isc-dhcp-client.preinst 2024-01-21
17:17:47.000000000 +0100
@@ -0,0 +1,17 @@
+#!/bin/sh
+set -e
+
+# begin-remove-after: released:forky
+if [ "$1" = "upgrade" ] || [ "$1" = install ]; then
+ if [ "$(dpkg-divert --truename /sbin/dhclient)" = /sbin/dhclient-noddns
] &&
+ [ "$(dpkg-divert --listpackage /sbin/dhclient)" =
isc-dhcp-client-ddns ] &&
+ [ "$(dpkg-divert --truename /usr/sbin/dhclient)" =
/usr/sbin/dhclient ]; then
+ # A pre-/usr-merge isc-dhcp-client-ddns is installed.
+ echo "Mitigating diversion of /sbin/dhclient on behalf of
isc-dhcp-client-ddns"
+ dpkg-divert --package isc-dhcp-client-ddns --no-rename --add \
+ --divert /usr/sbin/dhclient.usr-is-merged
/usr/sbin/dhclient
+ fi
+fi
+# end-remove-after
+
+#DEBHELPER#
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-05
18:51:22.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-21 17:17:47.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