On Mon, Jan 13, 2025 at 08:49:29PM +0100, Helmut Grohne wrote: > I'm sorry to tell you that I still got the duplicated diversions wrong.
This never ends. :-( > I'm attaching a patch that fixes both and also attaching my test cases > (that are all passing now). I added more comments such that the mess > becomes easier to understand by my future self and others. Evidently, I missed a relevant test case (reinstalling and removing the package) and of course it would fail. Here is a replacement patch and a new test case. This time, I am completely avoiding --rename and handling all the cases explicitly doing the renames where needed. Hope this one passes the test of time. Helmut
diff --minimal -Nru bfh-metapackages-20211009/debian/bfh-container.preinst
bfh-metapackages-20211009/debian/bfh-container.preinst
--- bfh-metapackages-20211009/debian/bfh-container.preinst 2024-12-12
18:01:16.000000000 +0100
+++ bfh-metapackages-20211009/debian/bfh-container.preinst 2025-01-13
12:35:28.000000000 +0100
@@ -8,46 +8,59 @@
for FILE in halt poweroff reboot shutdown coldreboot
do
- TRUENAME_USR="$(dpkg-divert --truename
"/usr/sbin/${FILE}")"
- TRUENAME_ALIAS="$(dpkg-divert --truename
"/sbin/${FILE}")"
- RENAME_FLAG="--no-rename"
-
- if [ "${TRUENAME_USR}" = "/usr/sbin/${FILE}" ]
+ # DEP17 M18 duplicated diversion. Once trixie is
+ # released, remove the aliased diversions in postinst
+ # and only have the canonical one with --rename here.
+ TRUENAME="$(dpkg-divert --truename "/sbin/${FILE}")"
+ if [ "$(dpkg-divert --truename "/usr/sbin/${FILE}")" !=
"/usr/sbin/${FILE}" ]
then
- if [ "${TRUENAME_ALIAS}" = "/sbin/${FILE}" ]
- then
- RENAME_FLAG="--rename"
- fi
-
- dpkg-divert --package bfh-container --quiet
--add "${RENAME_FLAG}" --divert "/usr/lib/container/divert/${FILE}.orig"
"/usr/sbin/${FILE}"
- fi
-
- # DEP17 M18 duplicated diversion, can be removed after
trixie.
- if [ "${TRUENAME_ALIAS}" = "/sbin/${FILE}" ]
+ : # Canonically diverted already. Nothing to
rename.
+ elif [ "${TRUENAME}" =
"/lib/container/divert/${FILE}.orig.usr-is-merged" ]
then
- dpkg-divert --package bfh-container --quiet
--add "${RENAME_FLAG}" --divert
"/lib/container/divert/${FILE}.orig.usr-is-merged" "/sbin/${FILE}"
- elif [ "${TRUENAME_ALIAS}" !=
"/lib/container/divert/${FILE}.orig.usr-is-merged" ]
+ : # Aliased diversion as expected. Nothing to
rename.
+ elif [ "${TRUENAME}" != "/sbin/${FILE}" ]
then
- dpkg-divert --package bfh-container --quiet
--remove --no-rename "/sbin/${FILE}"
- dpkg-divert --package bfh-container --quiet
--add --no-rename --divert "/lib/container/divert/${FILE}.orig.usr-is-merged"
"/sbin/${FILE}"
-
- if [ -e "${TRUENAME_ALIAS}" ] || [ -h
"${TRUENAME_ALIAS}" ]
+ # Aliased diversion with earlier target. Fix
target.
+ dpkg-divert --remove --no-rename "/sbin/${FILE}"
+ if [ -e "${DPKG_ROOT}${TRUENAME}" ] || [ -h
"${DPKG_ROOT}${TRUENAME}" ]
then
- mv "${TRUENAME_ALIAS}"
"/lib/container/divert/${FILE}.orig.usr-is-merged"
+ mv "${DPKG_ROOT}${TRUENAME}"
"${DPKG_ROOT}/lib/container/divert/${FILE}.orig.usr-is-merged"
fi
+ elif dpkg -S "/sbin/${FILE}" >/dev/null 2>&1
+ then
+ # Not diverted yet. Installed as aliased.
+ mv "${DPKG_ROOT}/sbin/${FILE}"
"${DPKG_ROOT}/lib/container/divert/${FILE}.orig.usr-is-merged"
+ elif [ -e "${DPKG_ROOT}/usr/sbin/${FILE}" ] || [ -h
"${DPKG_ROOT}/usr/sbin/${FILE}" ]
+ then
+ # Not diverted yet. Installed as canonical.
+ mv "${DPKG_ROOT}/usr/sbin/${FILE}"
"${DPKG_ROOT}/usr/lib/container/divert/${FILE}.orig"
fi
+ # All necessary moving has been done. Hence --no-rename.
+ dpkg-divert --package bfh-container --quiet --add
--no-rename --divert "/lib/container/divert/${FILE}.orig.usr-is-merged"
"/sbin/${FILE}"
+ dpkg-divert --package bfh-container --quiet --add
--no-rename --divert "/usr/lib/container/divert/${FILE}.orig"
"/usr/sbin/${FILE}"
done
for FILE in pm-hibernate pm-suspend pm-suspend-hybrid
do
- TRUENAME_USR="$(dpkg-divert --truename
"/usr/sbin/${FILE}")"
+ TRUENAME="$(dpkg-divert --truename "/usr/sbin/${FILE}")"
- if [ "${TRUENAME_USR}" =
"/lib/container/divert/${FILE}.orig" ]
+ if [ "${TRUENAME}" = "/usr/sbin/${FILE}" ]
+ then
+ # Not diverted yet.
+ dpkg-divert --package bfh-container --quiet
--add --rename --divert "/usr/lib/container/divert/${FILE}.orig"
"/usr/sbin/${FILE}"
+ elif [ "${TRUENAME}" !=
"/usr/lib/container/divert/${FILE}.orig" ]
then
+ # Upgrading from pre-trixie. Update the
diversion target from aliased to canonical.
dpkg-divert --package bfh-container --quiet
--remove --no-rename "/usr/sbin/${FILE}"
dpkg-divert --package bfh-container --quiet
--add --no-rename --divert "/usr/lib/container/divert/${FILE}.orig"
"/usr/sbin/${FILE}"
- else
- dpkg-divert --package bfh-container --quiet
--add --rename --divert "/usr/lib/container/divert/${FILE}.orig"
"/usr/sbin/${FILE}"
+ if [ "${TRUENAME}" !=
"/lib/container/divert/${FILE}.orig" ]
+ then
+ # Diversion target differs in more than
aliasing.
+ if [ -e "${DPKG_ROOT}${TRUENAME}" ] ||
[ -h "${DPKG_ROOT}${TRUENAME}" ]
+ then
+ mv "${DPKG_ROOT}${TRUENAME}"
"${DPKG_ROOT}/usr/lib/container/divert/${FILE}.orig"
+ fi
+ fi
fi
done
;;
diff --minimal -Nru bfh-metapackages-20211009/debian/changelog
bfh-metapackages-20211009/debian/changelog
--- bfh-metapackages-20211009/debian/changelog 2024-12-12 18:07:25.000000000
+0100
+++ bfh-metapackages-20211009/debian/changelog 2025-01-13 12:35:28.000000000
+0100
@@ -1,3 +1,10 @@
+bfh-metapackages (20211009-31.1) UNRELEASED; urgency=medium
+
+ * Non-maintainer upload.
+ * Fix --rename flags on duplicated diversions (DEP17 M18, Closes: #-1)
+
+ -- Helmut Grohne <[email protected]> Mon, 13 Jan 2025 12:35:28 +0100
+
bfh-metapackages (20211009-31) sid; urgency=medium
* Uploading to sid.
test-bfh.sh
Description: Bourne shell script

