[Pkg-electronics-devel] Bug#1056668: libsigrok4: DEP17 P7: Shared multiarch file loss

Chris Boot bootc at debian.org
Fri Nov 24 16:15:33 GMT 2023


Package: libsigrok4
Version: 0.5.2-4
Severity: important
Tags: patch
User: helmutg at debian.org
Usertags: dep17p7
X-Debbugs-Cc: helmutg at debian.org

Dear Maintainer,

libsigrok4 contains udev rules which are installed to /lib; these files
need to be moved to /usr/lib as part of Debian's usr-merge effort.
Because libsigrok4 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).

I have raised a Salsa MR[2] and attached an equivalent patch which
avoids the problem by implementating DEP17 M10 (Protective diversions
for shared files) for the affected files.

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.

Best regards,
Chris

1. https://subdivi.de/~helmut/dep17.html
2. https://salsa.debian.org/electronics-team/sigrok/libsigrok/-/merge_requests/4

-- 
diff --git a/debian/changelog b/debian/changelog
index 7ee1fbd1c020..d6f0de8f12fc 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,5 +1,6 @@
 libsigrok (0.5.2-5) UNRELEASED; urgency=medium
 
+  [ Debian Janitor ]
   * Remove constraints unnecessary since buster (oldstable):
     + Build-Depends: Drop versioned constraint on libglib2.0-dev (>= 2.32.0).
     + Build-Depends: Drop versioned constraint on libserialport-dev (>= 0.1.0).
@@ -15,6 +16,11 @@ libsigrok (0.5.2-5) UNRELEASED; urgency=medium
     + libsigrok-dev: Drop versioned constraint on libzip-dev (>= 0.10) in
       Depends.
 
+  [ Chris Boot ]
+  * DEP17: Install udev rules into /usr, with (M10) protective diversion
+    against possible file loss as exhibited by Multi-Arch: same packages (P7).
+    Diversion code can be removed in forky+1. (Closes: XXXXXXX)
+
  -- Debian Janitor <janitor at jelmer.uk>  Fri, 06 Jan 2023 19:12:00 -0000
 
 libsigrok (0.5.2-4) unstable; urgency=medium
diff --git a/debian/libsigrok4.install b/debian/libsigrok4.install
index 5b2c20e2c107..29e1c6f778ea 100644
--- a/debian/libsigrok4.install
+++ b/debian/libsigrok4.install
@@ -1,4 +1,4 @@
-lib/udev/rules.d/*sigrok*
+usr/lib/udev/rules.d/*sigrok*
 usr/lib/*/libsigrok.so.*
 usr/share/icons/hicolor/*/mimetypes/libsigrok.*
 usr/share/mime/packages/*sigrok*
diff --git a/debian/libsigrok4.lintian-overrides b/debian/libsigrok4.lintian-overrides
new file mode 100644
index 000000000000..106d56cb4e0e
--- /dev/null
+++ b/debian/libsigrok4.lintian-overrides
@@ -0,0 +1,6 @@
+# begin-remove-after: released:forky
+# protective diversion for upgrades of files moved from / to /usr
+libsigrok4: diversion-for-unknown-file lib/udev/rules.d/60-libsigrok.rules [preinst:*]
+libsigrok4: diversion-for-unknown-file lib/udev/rules.d/61-libsigrok-plugdev.rules [preinst:*]
+libsigrok4: diversion-for-unknown-file lib/udev/rules.d/61-libsigrok-uaccess.rules [preinst:*]
+# end-remove-after
diff --git a/debian/libsigrok4.postinst b/debian/libsigrok4.postinst
new file mode 100644
index 000000000000..3517d585f80b
--- /dev/null
+++ b/debian/libsigrok4.postinst
@@ -0,0 +1,23 @@
+#!/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" = "configure" ]; then
+    # 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-libsigrok.rules.usr-is-merged \
+        --remove /lib/udev/rules.d/60-libsigrok.rules
+    dpkg-divert --package usr-is-merged --no-rename \
+        --divert /lib/udev/rules.d/61-libsigrok-plugdev.rules.usr-is-merged \
+        --remove /lib/udev/rules.d/61-libsigrok-plugdev.rules
+    dpkg-divert --package usr-is-merged --no-rename \
+        --divert /lib/udev/rules.d/61-libsigrok-uaccess.rules.usr-is-merged \
+        --remove /lib/udev/rules.d/61-libsigrok-uaccess.rules
+fi
+# end-remove-after
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/libsigrok4.postrm b/debian/libsigrok4.postrm
new file mode 100644
index 000000000000..a5d537dd3247
--- /dev/null
+++ b/debian/libsigrok4.postrm
@@ -0,0 +1,23 @@
+#!/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-libsigrok.rules.usr-is-merged \
+        --remove /lib/udev/rules.d/60-libsigrok.rules
+    dpkg-divert --package usr-is-merged --no-rename \
+        --divert /lib/udev/rules.d/61-libsigrok-plugdev.rules.usr-is-merged \
+        --remove /lib/udev/rules.d/61-libsigrok-plugdev.rules
+    dpkg-divert --package usr-is-merged --no-rename \
+        --divert /lib/udev/rules.d/61-libsigrok-uaccess.rules.usr-is-merged \
+        --remove /lib/udev/rules.d/61-libsigrok-uaccess.rules
+fi
+# end-remove-after
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/libsigrok4.preinst b/debian/libsigrok4.preinst
new file mode 100644
index 000000000000..1b2d4953485e
--- /dev/null
+++ b/debian/libsigrok4.preinst
@@ -0,0 +1,22 @@
+#!/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-libsigrok.rules.usr-is-merged \
+        --add /lib/udev/rules.d/60-libsigrok.rules
+    dpkg-divert --package usr-is-merged --no-rename \
+        --divert /lib/udev/rules.d/61-libsigrok-plugdev.rules.usr-is-merged \
+        --add /lib/udev/rules.d/61-libsigrok-plugdev.rules
+    dpkg-divert --package usr-is-merged --no-rename \
+        --divert /lib/udev/rules.d/61-libsigrok-uaccess.rules.usr-is-merged \
+        --add /lib/udev/rules.d/61-libsigrok-uaccess.rules
+fi
+# end-remove-after
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/rules b/debian/rules
index 369918c17aaa..8e410c058ca6 100755
--- a/debian/rules
+++ b/debian/rules
@@ -9,8 +9,8 @@ export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
 	dh $@
 
 override_dh_auto_install:
-	mkdir -p debian/tmp/lib/udev/rules.d
-	install -m 644 contrib/60-libsigrok.rules debian/tmp/lib/udev/rules.d/
-	install -m 644 contrib/61-libsigrok-plugdev.rules debian/tmp/lib/udev/rules.d/
-	install -m 644 contrib/61-libsigrok-uaccess.rules debian/tmp/lib/udev/rules.d/
+	mkdir -p debian/tmp/usr/lib/udev/rules.d
+	install -m 644 contrib/60-libsigrok.rules debian/tmp/usr/lib/udev/rules.d/
+	install -m 644 contrib/61-libsigrok-plugdev.rules debian/tmp/usr/lib/udev/rules.d/
+	install -m 644 contrib/61-libsigrok-uaccess.rules debian/tmp/usr/lib/udev/rules.d/
 	dh_auto_install



More information about the Pkg-electronics-devel mailing list