Package: libmirisdr0
Version: 0.0.4.59ba37-5
Severity: important
Tags: patch
User: helm...@debian.org
Usertags: dep17p7
X-Debbugs-Cc: helm...@debian.org

Dear Maintainer,

libmirisdr0 contains udev files which are installed to /lib; these files
need to be moved to /usr/lib as part of Debian's usr-merge effort.
Because your package is Multi-Arch: same, an unfortunate corner-case can
occur whereby shared files (such as the udev rules) may be erroneously
removed on upgrades (please see DEP17[1] P7: Shared multiarch file
loss).

You will find a patch attached to move the udev files, including the
mitigation for the file loss scenario. Alternatively you can find the
changes in a salsa MR[2].

Please consider applying this patch at your earliest convenience. This
bug will be upgraded to release critical soon, as it blocks the overall
usr-merge effort which is being undertaken for the trixie release.


Many thanks,
Chris


[1] https://wiki.debian.org/UsrMerge
diff -Nru libmirisdr-0.0.4.59ba37/debian/changelog 
libmirisdr-0.0.4.59ba37/debian/changelog
--- libmirisdr-0.0.4.59ba37/debian/changelog    2016-04-27 03:14:13.000000000 
+0200
+++ libmirisdr-0.0.4.59ba37/debian/changelog    2023-11-26 21:16:08.000000000 
+0100
@@ -1,3 +1,13 @@
+libmirisdr (0.0.4.59ba37-5.1) UNRELEASED; urgency=medium
+
+  * Non-maintainer upload.
+  * Move udev files from /lib to /usr/lib, including protective diversion
+    against Multi-Arch: same file loss scenario (DEP17 P7 M10). (Closes: #-1)
+  * Remove obsolete postinst tasks (ldconfig, udev reload), now handled by
+    triggers.
+
+ -- Chris Hofstaedtler <z...@debian.org>  Sun, 26 Nov 2023 21:16:08 +0100
+
 libmirisdr (0.0.4.59ba37-5) unstable; urgency=medium
 
   * swap short descriptions. Thanks Daniele! (Closes: #813996)
diff -Nru libmirisdr-0.0.4.59ba37/debian/libmirisdr0.lintian-overrides 
libmirisdr-0.0.4.59ba37/debian/libmirisdr0.lintian-overrides
--- libmirisdr-0.0.4.59ba37/debian/libmirisdr0.lintian-overrides        
1970-01-01 01:00:00.000000000 +0100
+++ libmirisdr-0.0.4.59ba37/debian/libmirisdr0.lintian-overrides        
2023-11-26 21:16:01.000000000 +0100
@@ -0,0 +1,4 @@
+# begin-remove-after: released:forky
+# protective diversion for upgrades of files moved from / to /usr
+libmirisdr0: diversion-for-unknown-file lib/udev/rules.d/60-libmirisdr0.rules 
[preinst:*]
+# end-remove-after
diff -Nru libmirisdr-0.0.4.59ba37/debian/libmirisdr0.postinst 
libmirisdr-0.0.4.59ba37/debian/libmirisdr0.postinst
--- libmirisdr-0.0.4.59ba37/debian/libmirisdr0.postinst 2013-10-01 
19:39:33.000000000 +0200
+++ libmirisdr-0.0.4.59ba37/debian/libmirisdr0.postinst 2023-11-26 
21:16:08.000000000 +0100
@@ -2,28 +2,15 @@
 
 set -e
 
-#DEBHELPER#
-
+# begin-remove-after: released:forky
+# protective diversion of files moved from / to /usr, to avoid file loss.
+# Only for upgrades.
 if [ "$1" = "configure" ]; then
-        ldconfig
+    # At this point, the package will have installed the same file in */usr*.
+    dpkg-divert --package usr-is-merged --no-rename \
+        --divert /lib/udev/rules.d/60-libmirisdr0.rules.usr-is-merged \
+        --remove /lib/udev/rules.d/60-libmirisdr0.rules
 fi
+# end-remove-after
 
-# same test as udev postinst...
-chrooted() {
-  if [ "$(stat -c %d/%i /)" = "$(stat -Lc %d/%i /proc/1/root 2>/dev/null)" ];
-  then
-    # the devicenumber/inode pair of / is the same as that of /sbin/init's
-    # root, so we're *not* in a chroot and hence return false.
-    return 1
-  fi
-  return 0
-}
-
-if [ "$1" = "configure" ]; then
-  if ! chrooted ; then
-    # try to update udev now
-    udevadm control --reload-rules || true ;
-  fi
-fi
-
-exit 0
+#DEBHELPER#
diff -Nru libmirisdr-0.0.4.59ba37/debian/libmirisdr0.postrm 
libmirisdr-0.0.4.59ba37/debian/libmirisdr0.postrm
--- libmirisdr-0.0.4.59ba37/debian/libmirisdr0.postrm   1970-01-01 
01:00:00.000000000 +0100
+++ libmirisdr-0.0.4.59ba37/debian/libmirisdr0.postrm   2023-11-26 
21:16:01.000000000 +0100
@@ -0,0 +1,16 @@
+#!/bin/sh
+set -e
+
+# begin-remove-after: released:forky
+# protective diversion of files moved from / to /usr, to avoid file loss.
+# Only for upgrades.
+if [ "$1" = "remove" ] && [ "$DPKG_MAINTSCRIPT_PACKAGE_REFCOUNT" = "1" ]; then
+    # Cleanup in case package is removed before upgrade is finished (postinst 
ran).
+    dpkg-divert --package usr-is-merged --no-rename \
+        --divert /lib/udev/rules.d/60-libmirisdr0.rules.usr-is-merged \
+        --remove /lib/udev/rules.d/60-libmirisdr0.rules
+fi
+# end-remove-after
+
+#DEBHELPER#
+
diff -Nru libmirisdr-0.0.4.59ba37/debian/libmirisdr0.preinst 
libmirisdr-0.0.4.59ba37/debian/libmirisdr0.preinst
--- libmirisdr-0.0.4.59ba37/debian/libmirisdr0.preinst  1970-01-01 
01:00:00.000000000 +0100
+++ libmirisdr-0.0.4.59ba37/debian/libmirisdr0.preinst  2023-11-26 
21:16:01.000000000 +0100
@@ -0,0 +1,15 @@
+#!/bin/sh
+set -e
+
+# begin-remove-after: released:forky
+# protective diversion of files moved from / to /usr, to avoid file loss.
+# Only for upgrades.
+if [ "$1" = "upgrade" ]; then
+    dpkg-divert --package usr-is-merged --no-rename \
+        --divert /lib/udev/rules.d/60-libmirisdr0.rules.usr-is-merged \
+        --add /lib/udev/rules.d/60-libmirisdr0.rules
+fi
+# end-remove-after
+
+#DEBHELPER#
+
diff -Nru libmirisdr-0.0.4.59ba37/debian/rules 
libmirisdr-0.0.4.59ba37/debian/rules
--- libmirisdr-0.0.4.59ba37/debian/rules        2013-10-01 23:12:43.000000000 
+0200
+++ libmirisdr-0.0.4.59ba37/debian/rules        2023-11-26 21:16:08.000000000 
+0100
@@ -10,3 +10,8 @@
 
 debian/libmirisdr0.udev: mirisdr.rules
        cp -p mirisdr.rules debian/libmirisdr0.udev
+
+override_dh_installudev:
+       dh_installudev
+       set -e; if test -d debian/libmirisdr0/lib/udev/rules.d; then mv 
debian/libmirisdr0/lib/udev debian/libmirisdr0/usr/lib; fi
+       set -e; if test -d debian/libmirisdr0/lib; then rmdir 
debian/libmirisdr0/lib; fi

Reply via email to