Package: libsigrok4 Version: 0.5.2-4 Severity: important Tags: patch User: helm...@debian.org Usertags: dep17p7 X-Debbugs-Cc: helm...@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 <jani...@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