Hi, On Mon, Nov 20, 2023 at 04:05:31PM +0100, Helmut Grohne wrote: > I've attached the prospective change to this mail. It passes piuparts > and it passes my own test cases. I definitely think it should be > reviewed before uploaded. One thing I already see for possible > improvement is that since we declare Breaks against all providers of > /sbin/halt, this diversion does not actually have to persist beyond > postinst. Once molly-guard is configured, we know that any broken > package is no longer installed nor unpacked. A molly-guard.postinst > could remove the diversion of /sbin/halt to > /sbin/halt.no-molly-guard.usr-is-merged. Then we are only left with one > diversion per command which also makes this a lot less confusing.
I have implemented the removal of unnecessary diversions in postinst and attach an updated patch. It still passes all of the tests from my earlier mail and also piuparts. > More fundamentally, I'll also have to rework the DEP17 section M18 as it > doesn't work the way it is currently pictured. I updated it. Hope this is good. Would you mind uploading it to experimental? Helmut
diff -Nru molly-guard-0.8.1/debian/changelog molly-guard-0.8.1+nmu1/debian/changelog --- molly-guard-0.8.1/debian/changelog 2023-11-11 23:02:55.000000000 +0100 +++ molly-guard-0.8.1+nmu1/debian/changelog 2023-11-20 09:18:25.000000000 +0100 @@ -1,3 +1,10 @@ +molly-guard (0.8.1+nmu1) UNRELEASED; urgency=medium + + * Non-maintainer upload. + * Attempt to fix the /usr-merge fallout. (Closes: #1056279) + + -- Helmut Grohne <hel...@subdivi.de> Mon, 20 Nov 2023 09:18:25 +0100 + molly-guard (0.8.1) unstable; urgency=medium * Upload to unstable diff -Nru molly-guard-0.8.1/debian/control molly-guard-0.8.1+nmu1/debian/control --- molly-guard-0.8.1/debian/control 2023-11-11 23:02:55.000000000 +0100 +++ molly-guard-0.8.1+nmu1/debian/control 2023-11-20 09:18:25.000000000 +0100 @@ -23,6 +23,7 @@ systemd, sysvinit, upstart +Breaks: systemd-sysv (<< 255), sysvinit-core, finit-sysv, runit-init Description: protects machines from accidental shutdowns/reboots The package installs a shell script that overrides the existing shutdown/reboot/halt/poweroff/coldreboot/pm-hibernate/pm-suspend* commands diff -Nru molly-guard-0.8.1/debian/molly-guard.postinst molly-guard-0.8.1+nmu1/debian/molly-guard.postinst --- molly-guard-0.8.1/debian/molly-guard.postinst 1970-01-01 01:00:00.000000000 +0100 +++ molly-guard-0.8.1+nmu1/debian/molly-guard.postinst 2023-11-20 09:18:25.000000000 +0100 @@ -0,0 +1,14 @@ +#!/bin/sh +set -e + +# begin-remove-after: trixie +if test "$1" = configure; then + for cmd in halt poweroff reboot shutdown coldreboot; do + dpkg-divert --package molly-guard --no-rename --remove "/sbin/$cmd" + done +fi +# end-remove-after + +#DEBHELPER# + +exit 0 diff -Nru molly-guard-0.8.1/debian/molly-guard.postrm molly-guard-0.8.1+nmu1/debian/molly-guard.postrm --- molly-guard-0.8.1/debian/molly-guard.postrm 2023-11-11 23:02:55.000000000 +0100 +++ molly-guard-0.8.1+nmu1/debian/molly-guard.postrm 2023-11-20 09:18:25.000000000 +0100 @@ -16,18 +16,19 @@ # for details, see http://www.debian.org/doc/debian-policy/ or # the debian-policy package - +# begin-remove-after: trixie case "$1" in - remove) - for cmd in halt poweroff reboot shutdown coldreboot ; do - dpkg-divert --package molly-guard --no-rename --remove /sbin/$cmd - dpkg-divert --package molly-guard --no-rename --remove "/usr/sbin/$cmd" - if test -e "/usr/lib/molly-guard/$cmd"; then - mv "/usr/lib/molly-guard/$cmd" "/usr/sbin/$cmd" - fi + abort-install|abort-upgrade|failed-upgrade) + for cmd in halt poweroff shutdown coldreboot; do + dpkg-divert --package molly-guard --rename --remove "/sbin/$cmd" done + ;; +esac +# end-remove-after - for cmd in pm-hibernate pm-suspend pm-suspend-hybrid ; do +case "$1" in + remove) + for cmd in halt poweroff reboot shutdown coldreboot pm-hibernate pm-suspend pm-suspend-hybrid ; do dpkg-divert --package molly-guard --rename --remove /usr/sbin/$cmd done diff -Nru molly-guard-0.8.1/debian/molly-guard.preinst molly-guard-0.8.1+nmu1/debian/molly-guard.preinst --- molly-guard-0.8.1/debian/molly-guard.preinst 2023-11-11 23:02:55.000000000 +0100 +++ molly-guard-0.8.1+nmu1/debian/molly-guard.preinst 2023-11-20 09:18:25.000000000 +0100 @@ -14,35 +14,55 @@ case "$1" in install|upgrade) - mkdir -p /usr/lib/molly-guard - # Cleanup erroneous diversions added in 0.6.0 for cmd in pm-hibernate pm-suspend pm-suspend-hybrid ; do dpkg-divert --package molly-guard --rename --remove /sbin/$cmd done for cmd in halt poweroff reboot shutdown coldreboot ; do - dpkg-divert --package molly-guard --divert "/usr/lib/molly-guard/$cmd" --no-rename --add "/usr/sbin/$cmd" - # DEP17 M18 duplicated diversion. Can be removed after trixie. - dpkg-divert --package molly-guard --divert "/lib/molly-guard/$cmd" --no-rename --add "/sbin/$cmd" - # Avoid --rename as long as we need duplicated diversions. + # begin-remove-after: trixie + # Remove possible pre-/usr-merge diversion + dpkg-divert --package molly-guard --divert "/lib/molly-guard/$cmd" --no-rename --remove "/sbin/$cmd" + if test "$(dpkg-divert --truename "/usr/sbin/$cmd")" = "/usr/lib/molly-guard/$cmd"; then + dpkg-divert --package molly-guard --divert "/usr/lib/molly-guard/$cmd" --no-rename --remove "/usr/sbin/$cmd" + if test -e "/usr/lib/molly-guard/$cmd"; then + mv "/usr/lib/molly-guard/$cmd" "/usr/sbin/$cmd.no-molly-guard" + fi + if test -e "/lib/molly-guard/$cmd"; then + mv "/lib/molly-guard/$cmd" "/usr/sbin/$cmd.no-molly-guard.usr-is-merged" + fi + fi + # end-remove-after + # DEP17 M18 duplicated diversion. Can be --removed after trixie. + dpkg-divert --package molly-guard --divert "/sbin/$cmd.no-molly-guard.usr-is-merged" --no-rename --add "/sbin/$cmd" + # Add post-/usr-merge diversion meant to stay. + dpkg-divert --package molly-guard --divert "/usr/sbin/$cmd.no-molly-guard" --no-rename --add "/usr/sbin/$cmd" + # Avoid --rename as long as we need duplicated diversions. if test "$1" = install; then if test -e "/usr/sbin/$cmd"; then - mv "/usr/sbin/$cmd" "/usr/lib/molly-guard/$cmd" + mv "/usr/sbin/$cmd" "/usr/sbin/$cmd.no-molly-guard" fi if test -e "/sbin/$cmd"; then - mv "/sbin/$cmd" "/usr/lib/molly-guard/$cmd" + mv "/sbin/$cmd" "/sbin/$cmd.no-molly-guard.usr-is-merged" fi fi done for cmd in pm-hibernate pm-suspend pm-suspend-hybrid ; do - if test "$(dpkg-divert --truename "/usr/sbin/$cmd")" = "/lib/molly-guard/$cmd"; then - dpkg-divert --package molly-guard --divert "/lib/molly-guard/$cmd" --no-rename --remove "/usr/sbin/$cmd" - dpkg-divert --package molly-guard --divert "/usr/lib/molly-guard/$cmd" --no-rename --add "/usr/sbin/$cmd" + # begin-remove-after: trixie + truename="$(dpkg-divert --truename "/usr/sbin/$cmd")" + if test "${truename#/usr}" = "/lib/molly-guard/$cmd"; then + dpkg-divert --package molly-guard --divert "$truename" --no-rename --remove "/usr/sbin/$cmd" + dpkg-divert --package molly-guard --divert "/usr/sbin/$cmd.no-molly-guard" --no-rename --add "/usr/sbin/$cmd" + if test -e "/usr/lib/molly-guard/$cmd" -o -h "/usr/lib/molly-guard/$cmd"; then + mv "/usr/lib/molly-guard/$cmd" "/usr/sbin/$cmd.no-molly-guard" + fi else - dpkg-divert --package molly-guard --divert "/usr/lib/molly-guard/$cmd" --rename "/usr/sbin/$cmd" + # end-remove-after: trixie + dpkg-divert --package molly-guard --divert "/usr/sbin/$cmd.no-molly-guard" --rename "/usr/sbin/$cmd" + # begin-remove-after: trixie fi + # end-remove-after: trixie done ;; diff -Nru molly-guard-0.8.1/shutdown.in molly-guard-0.8.1+nmu1/shutdown.in --- molly-guard-0.8.1/shutdown.in 2023-11-11 23:02:55.000000000 +0100 +++ molly-guard-0.8.1+nmu1/shutdown.in 2023-11-20 09:18:25.000000000 +0100 @@ -13,11 +13,10 @@ SCRIPTSDIR="@cfgdir@/run.d" CMD="${0##*/}" -EXEC="@REALPATH@/$CMD" case "$CMD" in halt|reboot|shutdown|poweroff|coldreboot|pm-hibernate|pm-suspend|pm-suspend-hybrid) - if [ ! -f $EXEC ]; then + if ! EXEC=$(command -v "$CMD.no-molly-guard"); then echo "E: not a regular file: $EXEC" >&2 exit 4 fi