Control: reassign -1 fuse,ntfs-3g
Control: clone -1 -2
Control: reassign -2 src:fuse3
Control: tags -2 + patch

Hi Laszlo,

On Sun, Jan 07, 2024 at 10:52:52PM +0100, Chris Hofstaedtler wrote:
> fuse, fuse3, and ntfs-3g use dpkg-statoverride on aliased paths in
> /bin: /bin/fusermount, /bin/fusermount3.
> 
> They do so in their postinst scripts, only checking if a
> statoverride exists. If not, they run chmod on some programs.
> The postinst does not add a statoverride.
> 
> As you know, these paths need to become canonicalized to /usr/{...}.
> When this happens, the old dpkg-statoverride entries stop working.
> 
> Now my question: do you think it is worth migrating any such
> dpkg-statoverride automatically?
> 
> If not, how should users/admins who previously created an override
> be informed about this problem? Some suggestions might be:
> - NEWS.Debian entry
> - trixie Release Notes

I believe that it is not useful to migrate statoverrides, because in
many cases they will be issued by automated tools such as puppet or
ansible and one needs to migrate them there.

Rather, I propose to temporarily honour both statoverrides in postinst
(though dpkg will only honour the matching ones) and add a NEWS entry.
We'll also be adding generic release notes asking administrators to
review their statoverrides.

Patch attached.

> I've started working on UsrMerge patches for fuse and fuse3. Those
> patches would need to take into account the question above, and also
> the file loss problem between fuse and fuse3.

File loss problem also handled in the attached by adding the safe
diversion+conflicts combo.

Helmut
diff -Nru fuse3-3.14.0/debian/NEWS fuse3-3.14.0/debian/NEWS
--- fuse3-3.14.0/debian/NEWS    1970-01-01 01:00:00.000000000 +0100
+++ fuse3-3.14.0/debian/NEWS    2024-06-12 13:37:25.000000000 +0200
@@ -0,0 +1,9 @@
+fuse3 (3.14.0-5.1) unstable; urgency=medium
+
+  The fuse3 package honours a dpkg-statoverride of /bin/fusermount3 installed
+  by a system administrator (e.g. to remove the setuid binary installed by
+  default). The path to this file according to the package manager is
+  transitioned to /usr/bin/fusermount3. If you installed a statoverride,
+  please move it to the new path and verify the permissions.
+
+ -- Helmut Grohne <hel...@subdivi.de>  Wed, 12 Jun 2024 13:41:27 +0200
diff -Nru fuse3-3.14.0/debian/changelog fuse3-3.14.0/debian/changelog
--- fuse3-3.14.0/debian/changelog       2024-01-12 16:46:21.000000000 +0100
+++ fuse3-3.14.0/debian/changelog       2024-06-12 13:37:25.000000000 +0200
@@ -1,3 +1,10 @@
+fuse3 (3.14.0-5.1) UNRELEASED; urgency=medium
+
+  * Non-maintainer upload.
+  * Move aliased files to /usr (DEP17). (Closes: #-1)
+
+ -- Helmut Grohne <hel...@subdivi.de>  Wed, 12 Jun 2024 13:37:25 +0200
+
 fuse3 (3.14.0-5) unstable; urgency=medium
 
   * Fix 99-fuse3.rules path (closes: #1060067).
diff -Nru fuse3-3.14.0/debian/control fuse3-3.14.0/debian/control
--- fuse3-3.14.0/debian/control 2024-01-12 01:21:04.000000000 +0100
+++ fuse3-3.14.0/debian/control 2024-06-12 13:37:25.000000000 +0200
@@ -25,7 +25,7 @@
  sed (>= 4)
 Provides: fuse (= ${source:Version})
 Breaks: fuse
-Replaces: fuse
+Conflicts: fuse
 Description: Filesystem in Userspace (3.x version)
  Filesystem in Userspace (FUSE) is a simple interface for userspace programs to
  export a virtual filesystem to the Linux kernel. It also aims to provide a
diff -Nru fuse3-3.14.0/debian/fuse3-udeb.install 
fuse3-3.14.0/debian/fuse3-udeb.install
--- fuse3-3.14.0/debian/fuse3-udeb.install      2018-07-21 16:11:44.000000000 
+0200
+++ fuse3-3.14.0/debian/fuse3-udeb.install      2024-06-12 13:32:27.000000000 
+0200
@@ -1,2 +1,2 @@
-usr/bin/fusermount3    bin
-usr/sbin/mount.fuse3   sbin
+usr/bin/fusermount3
+usr/sbin/mount.fuse3
diff -Nru fuse3-3.14.0/debian/fuse3.install fuse3-3.14.0/debian/fuse3.install
--- fuse3-3.14.0/debian/fuse3.install   2018-12-25 17:57:44.000000000 +0100
+++ fuse3-3.14.0/debian/fuse3.install   2024-06-12 13:32:16.000000000 +0200
@@ -1,3 +1,3 @@
-usr/bin/fusermount3    bin
-usr/sbin/mount.fuse3   sbin
+usr/bin/fusermount3
+usr/sbin/mount.fuse3
 etc/fuse.conf
diff -Nru fuse3-3.14.0/debian/fuse3.links fuse3-3.14.0/debian/fuse3.links
--- fuse3-3.14.0/debian/fuse3.links     2018-12-25 17:57:44.000000000 +0100
+++ fuse3-3.14.0/debian/fuse3.links     2024-06-12 13:37:25.000000000 +0200
@@ -1,4 +1,4 @@
-/bin/fusermount3       /bin/fusermount
-/sbin/mount.fuse3      /sbin/mount.fuse
+/usr/bin/fusermount3   /usr/bin/fusermount
+/usr/sbin/mount.fuse3  /usr/sbin/mount.fuse
 /usr/share/man/man1/fusermount3.1.gz   /usr/share/man/man1/fusermount.1.gz
 /usr/share/man/man8/mount.fuse3.8.gz   /usr/share/man/man8/mount.fuse.8.gz
diff -Nru fuse3-3.14.0/debian/fuse3.postinst fuse3-3.14.0/debian/fuse3.postinst
--- fuse3-3.14.0/debian/fuse3.postinst  2021-06-20 15:45:33.000000000 +0200
+++ fuse3-3.14.0/debian/fuse3.postinst  2024-06-12 13:37:25.000000000 +0200
@@ -12,11 +12,21 @@
        return 0
 }
 
+# begin-remove-after: released:trixie
+# protective diversion of files moved from / to /usr, to avoid file loss.
+if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ]; then
+       for f in /bin/fusermount /sbin/mount.fuse; do
+               dpkg-divert --package #PACKAGE# --no-rename --divert 
"$f.usr-is-merged" --remove "$f"
+       done
+fi
+# end-remove-after
+
 case "${1}" in
        configure)
-               if ! dpkg-statoverride --list /bin/fusermount3 > /dev/null 2>&1
+               if ! dpkg-statoverride --list /bin/fusermount3 > /dev/null 2>&1 
&&
+                       ! dpkg-statoverride --list /usr/bin/fusermount3 > 
/dev/null 2>&1
                then
-                       chmod 4755 /bin/fusermount3
+                       chmod 4755 /usr/bin/fusermount3
                fi
 
                modprobe fuse > /dev/null 2>&1 || true
diff -Nru fuse3-3.14.0/debian/fuse3.preinst fuse3-3.14.0/debian/fuse3.preinst
--- fuse3-3.14.0/debian/fuse3.preinst   1970-01-01 01:00:00.000000000 +0100
+++ fuse3-3.14.0/debian/fuse3.preinst   2024-06-12 13:37:25.000000000 +0200
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+set -e
+
+# begin-remove-after: released:trixie
+# protective diversion of files moved from / to /usr, to avoid file loss.
+if [ "$1" = "upgrade" ] || [ "$1" = "install" ]; then
+       for f in /bin/fusermount /sbin/mount.fuse; do
+               dpkg-divert --package #PACKAGE# --no-rename --divert 
"$f.usr-is-merged" --add "$f"
+       done
+fi
+# end-remove-after
+
+#DEBHELPER#
+
+exit 0
diff -Nru fuse3-3.14.0/debian/libfuse3-3-udeb.install 
fuse3-3.14.0/debian/libfuse3-3-udeb.install
--- fuse3-3.14.0/debian/libfuse3-3-udeb.install 2014-06-20 08:23:50.000000000 
+0200
+++ fuse3-3.14.0/debian/libfuse3-3-udeb.install 2024-06-12 13:32:33.000000000 
+0200
@@ -1 +1 @@
-usr/lib/*/*.so.*       lib
+usr/lib/*/*.so.*
diff -Nru fuse3-3.14.0/debian/libfuse3-3.install 
fuse3-3.14.0/debian/libfuse3-3.install
--- fuse3-3.14.0/debian/libfuse3-3.install      2014-06-20 08:23:50.000000000 
+0200
+++ fuse3-3.14.0/debian/libfuse3-3.install      2024-06-12 13:32:42.000000000 
+0200
@@ -1 +1 @@
-usr/lib/*/*.so.*       lib
+usr/lib/*/*.so.*
diff -Nru fuse3-3.14.0/debian/not-installed fuse3-3.14.0/debian/not-installed
--- fuse3-3.14.0/debian/not-installed   1970-01-01 01:00:00.000000000 +0100
+++ fuse3-3.14.0/debian/not-installed   2024-06-12 13:35:58.000000000 +0200
@@ -0,0 +1,2 @@
+debian/tmp/etc/init.d/fuse3
+debian/tmp/usr/lib/udev/rules.d/99-fuse3.rules
diff -Nru fuse3-3.14.0/debian/rules fuse3-3.14.0/debian/rules
--- fuse3-3.14.0/debian/rules   2024-01-12 01:09:38.000000000 +0100
+++ fuse3-3.14.0/debian/rules   2024-06-12 13:37:25.000000000 +0200
@@ -6,12 +6,7 @@
 
 SHELL := sh -e
 
-DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
-DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
-
-ifeq ($(DEB_HOST_ARCH_OS), kfreebsd)
-       DEB_CONFIGURE_EXTRA_FLAGS = -Dudevrulesdir=/lib/udev/rules.d
-endif
+include /usr/share/dpkg/architecture.mk
 
 export DEB_BUILD_MAINT_OPTIONS = hardening=+all
 
@@ -30,25 +25,11 @@
        dh_fixperms
        chmod a-x 
debian/libfuse3-dev/usr/share/doc/libfuse3-dev/examples/cuse_client.c
 
-ifeq ($(DEB_BUILD_ARCH),linux)
+ifeq ($(DEB_HOST_ARCH),linux)
        chmod 0755 debian/fuse3/bin/fusermount3
 endif
 
-override_dh_install:
-       # remove unused files
-       rm -f debian/tmp/etc/init.d/fuse3
-       rm -f debian/tmp/usr/lib/udev/rules.d/99-fuse3.rules
-
-       dh_install
-
-       # adjusting /lib for multiarch
-       mkdir -p debian/libfuse3-3/lib/$(DEB_HOST_MULTIARCH)
-       mv debian/libfuse3-3/lib/*.so* 
debian/libfuse3-3/lib/$(DEB_HOST_MULTIARCH)
-ifeq ($(with_udeb),yes)
-       mkdir -p debian/libfuse3-3-udeb/lib/$(DEB_HOST_MULTIARCH)
-       mv debian/libfuse3-3-udeb/lib/*.so* 
debian/libfuse3-3-udeb/lib/$(DEB_HOST_MULTIARCH)
-endif
-
+execute_after_dh_install:
        # adding initramfs-tools integration
        install -D -m 0755 debian/local/fuse.hook 
debian/fuse3/usr/share/initramfs-tools/hooks/fuse
 
@@ -60,15 +41,6 @@
 endif
 endif
 
-override_dh_link:
-       # correcting symlink targets
-       for LIB in debian/tmp/usr/lib/*/*.so; \
-       do \
-               dh_link -plibfuse3-dev lib/$(DEB_HOST_MULTIARCH)/$$(basename 
$$(readlink $${LIB})) usr/lib/$(DEB_HOST_MULTIARCH)/$$(basename $${LIB}); \
-       done
-
-       dh_link --remaining-packages
-
 override_dh_missing:
        dh_missing --fail-missing
 
@@ -76,5 +48,5 @@
        dh ${@} --buildsystem=meson
 
 .PHONY: override_dh_auto_configure override_dh_compress \
-       override_dh_fixperms override_dh_install \
+       override_dh_fixperms execute_after_dh_install \
        override_dh_link override_dh_missing

Reply via email to