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

librtlsdr0 contains udev rules which are installed to /lib; the rules
file needs to be moved to /usr/lib as part of Debian's usr-merge
effort. Because librtlsdr0 is Multi-Arch: same, an unfortunate corner-
case can occur whereby shared files (such as 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 implementing DEP17 M10 (Protective diversions for
shared files) for the affected file.

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/bottoms/pkg-rtl-sdr/-/merge_requests/2

-- 
diff --git a/debian/README.source b/debian/README.source
new file mode 100644
index 000000000000..f1296533f36f
--- /dev/null
+++ b/debian/README.source
@@ -0,0 +1,9 @@
+rtl-sdr (0.6.0-5.1) UNRELEASED; urgency=medium
+
+  In this version, librtlsdr0 has moved its udev rules file from /lib
+  to /usr/lib. If this package is back-ported to a release prior to
+  trixie this change must be revertedm, otherwise the dpkg-divert calls
+  in the maintainer scripts will cause breakage (dh_movetousr is a
+  no-op pre-trixie).
+
+ -- Chris Boot <bo...@debian.org>  Fri, 24 Nov 2023 17:13:53 +0000
diff --git a/debian/changelog b/debian/changelog
index 838d7d7a6f1b..1d31a473a3b5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+rtl-sdr (0.6.0-5.1) UNRELEASED; urgency=medium
+
+  * Non-maintainer upload.
+  * 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)
+
+ -- Chris Boot <bo...@debian.org>  Fri, 24 Nov 2023 16:50:24 +0000
+
 rtl-sdr (0.6.0-5) unstable; urgency=medium
 
   * update to 0.6.0-36-g1261fbb
diff --git a/debian/control b/debian/control
index 29fbb226cdb5..7f5755a6f179 100644
--- a/debian/control
+++ b/debian/control
@@ -2,8 +2,11 @@ Source: rtl-sdr
 Section: comm
 Priority: optional
 Maintainer: A. Maitland Bottoms <bott...@debian.org>
-Build-Depends: cmake,
+# Warning: see README.source before back-porting this package
+Build-Depends: base-files (>= 13~),
+               cmake,
                debhelper (>= 12~),
+               dh-sequence-movetousr,
                libusb-1.0-0-dev [!kfreebsd-any],
                libusb2-dev [kfreebsd-any],
               pkg-config
diff --git a/debian/librtlsdr0.lintian-overrides 
b/debian/librtlsdr0.lintian-overrides
new file mode 100644
index 000000000000..3e0788f167bb
--- /dev/null
+++ b/debian/librtlsdr0.lintian-overrides
@@ -0,0 +1,4 @@
+# begin-remove-after: released:forky
+# protective diversion for upgrades of files moved from / to /usr
+librtlsdr0: diversion-for-unknown-file lib/udev/rules.d/60-librtlsdr0.rules 
[preinst:*]
+# end-remove-after
diff --git a/debian/librtlsdr0.postinst b/debian/librtlsdr0.postinst
new file mode 100644
index 000000000000..05299725f587
--- /dev/null
+++ b/debian/librtlsdr0.postinst
@@ -0,0 +1,18 @@
+#!/bin/sh
+set -e
+
+# begin-remove-after: released:forky
+# protective diversion of files moved from / to /usr, to avoid file loss.
+# Only for upgrades.
+# Warning: see README.source and remove this section when back-porting
+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-librtlsdr0.rules.usr-is-merged \
+        --remove /lib/udev/rules.d/60-librtlsdr0.rules
+fi
+# end-remove-after
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/librtlsdr0.postrm b/debian/librtlsdr0.postrm
new file mode 100644
index 000000000000..a4c11ee68ede
--- /dev/null
+++ b/debian/librtlsdr0.postrm
@@ -0,0 +1,18 @@
+#!/bin/sh
+set -e
+
+# begin-remove-after: released:forky
+# protective diversion of files moved from / to /usr, to avoid file loss.
+# Only for upgrades.
+# Warning: see README.source and remove this section when back-porting
+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-librtlsdr0.rules.usr-is-merged \
+        --remove /lib/udev/rules.d/60-librtlsdr0.rules
+fi
+# end-remove-after
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/librtlsdr0.preinst b/debian/librtlsdr0.preinst
new file mode 100644
index 000000000000..abca28e35734
--- /dev/null
+++ b/debian/librtlsdr0.preinst
@@ -0,0 +1,17 @@
+#!/bin/sh
+set -e
+
+# begin-remove-after: released:forky
+# protective diversion of files moved from / to /usr, to avoid file loss.
+# Only for upgrades.
+# Warning: see README.source and remove this section when back-porting
+if [ "$1" = "upgrade" ]; then
+    dpkg-divert --package usr-is-merged --no-rename \
+        --divert /lib/udev/rules.d/60-librtlsdr0.rules.usr-is-merged \
+        --add /lib/udev/rules.d/60-librtlsdr0.rules
+fi
+# end-remove-after
+
+#DEBHELPER#
+
+exit 0

Reply via email to