Package: libairspy0
Version: 1.0.10-2
Severity: important
Tags: patch
User: helm...@debian.org
Usertags: dep17p7
X-Debbugs-CC: helm...@debian.org

Dear Maintainer,

libairspy0 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 libairspy0 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[0] P7: Shared multiarch file
loss).

I have raised a Salsa MR[1] 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.

Cheers,

[0] https://subdivi.de/~helmut/dep17.html
[1] https://salsa.debian.org/bottoms/pkg-airspy-host/-/merge_requests/3

-- 
Samuel Henrique <samueloph>
>From 88072b72a2a756df85f6760913363af2d23d8272 Mon Sep 17 00:00:00 2001
From: Samuel Henrique <samuel...@debian.org>
Date: Fri, 24 Nov 2023 16:13:38 +0000
Subject: [PATCH] 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.
---
 debian/{libairspy0.udev => 60-libairspy0.rules} |  0
 debian/changelog                                |  8 ++++++++
 debian/libairspy0.install                       |  1 +
 debian/libairspy0.lintian-overrides             |  2 ++
 debian/libairspy0.postinst                      |  9 +++++++++
 debian/libairspy0.postrm                        | 15 +++++++++++++++
 debian/libairspy0.preinst                       | 14 ++++++++++++++
 7 files changed, 49 insertions(+)
 rename debian/{libairspy0.udev => 60-libairspy0.rules} (100%)
 create mode 100644 debian/libairspy0.lintian-overrides
 create mode 100644 debian/libairspy0.postrm
 create mode 100644 debian/libairspy0.preinst

diff --git a/debian/libairspy0.udev b/debian/60-libairspy0.rules
similarity index 100%
rename from debian/libairspy0.udev
rename to debian/60-libairspy0.rules
diff --git a/debian/changelog b/debian/changelog
index 1ae9cf4..5d81bb9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+airspyone-host (1.0.10-3) UNRELEASED; urgency=medium
+
+  * 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.
+
+ -- Samuel Henrique <samuel...@debian.org>  Fri, 24 Nov 2023 14:23:28 +0000
+
 airspyone-host (1.0.10-2) unstable; urgency=medium
 
   * update to v1.0.10-6-g41c439f
diff --git a/debian/libairspy0.install b/debian/libairspy0.install
index a7e6b7c..38ee09d 100644
--- a/debian/libairspy0.install
+++ b/debian/libairspy0.install
@@ -1,2 +1,3 @@
 usr/lib/*/lib*.so.*
 debian/com.airspy.host.metainfo.xml usr/share/metainfo
+debian/60-libairspy0.rules usr/lib/udev/rules.d
diff --git a/debian/libairspy0.lintian-overrides b/debian/libairspy0.lintian-overrides
new file mode 100644
index 0000000..9c24985
--- /dev/null
+++ b/debian/libairspy0.lintian-overrides
@@ -0,0 +1,2 @@
+# protective diversion for upgrades of files moved from / to /usr
+libairspy0: diversion-for-unknown-file lib/udev/rules.d/60-libairspy0.rules [preinst:11]
diff --git a/debian/libairspy0.postinst b/debian/libairspy0.postinst
index 21edfc4..ecb72c2 100644
--- a/debian/libairspy0.postinst
+++ b/debian/libairspy0.postinst
@@ -20,6 +20,15 @@ if [ "$1" = "configure" ]; then
     # try to update udev now
     udevadm control --reload-rules || true ;
   fi
+# begin-remove-after: released:forky
+  # protective diversion of files moved from / to /usr, to avoid file loss.
+  # Only for upgrades.
+    # 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-libairspy0.rules.usr-is-merged \
+        --remove /lib/udev/rules.d/60-libairspy0.rules
+# end-remove-after
+
 fi
 
 exit 0
diff --git a/debian/libairspy0.postrm b/debian/libairspy0.postrm
new file mode 100644
index 0000000..e370229
--- /dev/null
+++ b/debian/libairspy0.postrm
@@ -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" = "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-libairspy0.rules.usr-is-merged \
+        --remove /lib/udev/rules.d/60-libairspy0.rules
+fi
+# end-remove-after
+
diff --git a/debian/libairspy0.preinst b/debian/libairspy0.preinst
new file mode 100644
index 0000000..af1e4a4
--- /dev/null
+++ b/debian/libairspy0.preinst
@@ -0,0 +1,14 @@
+#!/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-libairspy0.rules.usr-is-merged \
+        --add /lib/udev/rules.d/60-libairspy0.rules
+fi
+# end-remove-after
+
-- 
2.42.0

Reply via email to