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 <z...@debian.org> 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