Source: lintian
Version: 2.118.0
Tags: patch
User: helm...@debian.org
Usertags: dep17m2

Hi lintian maintainers,

I am proposing the addition of a new lintian-tag "aliased-location" that
is to be emitted for the inclusion of any file below one of the
locations /bin, /lib* or /sbin as only base-files should carry the
relevant aliasing links and all other packages should move their files
as part of the /usr-move transition. At this time, we're below 100
offending source package all of which have a bug report at rc severity.
We have a pending policy change making this mandatory. Consequently, I
am proposing a check for lintian and attaching a patch.

I note that I cannot currently test the patch as lintian fails to build
from source. I have filed a separate bug about that. Also note that I am
removing the subdir-in-bin tag, because any affected file emits
aliased-location with my patch and subdirectories are allowed in
/usr/bin, so this tag can no longer be emitted.

Please let me know if you have any questions regarding the transition or
the patch.

Helmut
diff --minimal -Nru lintian-2.118.0/debian/changelog 
lintian-2.118.0+nmu1/debian/changelog
--- lintian-2.118.0/debian/changelog    2024-07-30 11:21:17.000000000 +0200
+++ lintian-2.118.0+nmu1/debian/changelog       2024-08-14 12:45:47.000000000 
+0200
@@ -1,3 +1,13 @@
+lintian (2.118.0+nmu1) UNRELEASED; urgency=medium
+
+  * Non-maintainer upload.
+  * Add aliased-location tag to support /usr-move (Closes: #-1)
+  * Delete tag subdir-in-bin: Installing anything in bin/ causes the
+    emission of aliased-location now and subdirectories in usr/bin/ are
+    actually allowed.
+
+ -- Helmut Grohne <hel...@subdivi.de>  Wed, 14 Aug 2024 12:45:47 +0200
+
 lintian (2.118.0) unstable; urgency=medium
 
   * Retroactively add missing entry to the 2.117.1 changelog entry
diff --minimal -Nru 
lintian-2.118.0/lib/Lintian/Check/Files/Hierarchy/Standard.pm 
lintian-2.118.0+nmu1/lib/Lintian/Check/Files/Hierarchy/Standard.pm
--- lintian-2.118.0/lib/Lintian/Check/Files/Hierarchy/Standard.pm       
2022-08-13 15:53:35.000000000 +0200
+++ lintian-2.118.0+nmu1/lib/Lintian/Check/Files/Hierarchy/Standard.pm  
2024-08-14 12:45:47.000000000 +0200
@@ -184,10 +184,10 @@
         # /mnt
         $self->pointed_hint('dir-or-file-in-mnt', $item->pointer);
 
-    } elsif ($item->name =~ m{^bin/}) {
-        # /bin
-        $self->pointed_hint('subdir-in-bin', $item->pointer)
-          if $item->is_dir && $item->name =~ m{^bin/.};
+    } elsif ($item->name =~ m{^(bin|lib[a-z0-9]*|sbin)($|/)}
+        && $self->processable->name ne 'base-files') {
+        # Aliased file
+        $self->pointed_hint('aliased-location', $item->pointer);
 
     } elsif ($item->name =~ m{^srv/.}) {
         # /srv
diff --minimal -Nru 
lintian-2.118.0/t/recipes/checks/files/hierarchy/standard/files-foo-in-bar/build-spec/debian/dirs
 
lintian-2.118.0+nmu1/t/recipes/checks/files/hierarchy/standard/files-foo-in-bar/build-spec/debian/dirs
--- 
lintian-2.118.0/t/recipes/checks/files/hierarchy/standard/files-foo-in-bar/build-spec/debian/dirs
   2021-09-04 16:23:12.000000000 +0200
+++ 
lintian-2.118.0+nmu1/t/recipes/checks/files/hierarchy/standard/files-foo-in-bar/build-spec/debian/dirs
      2024-08-14 12:45:47.000000000 +0200
@@ -1,7 +1,6 @@
 etc/apt/preferences.d
 etc/apt
 etc/init
-bin/foo
 mnt/foo
 tmp/foo
 usr/bin/foo
diff --minimal -Nru 
lintian-2.118.0/t/recipes/checks/files/hierarchy/standard/files-foo-in-bar/build-spec/debian/install
 
lintian-2.118.0+nmu1/t/recipes/checks/files/hierarchy/standard/files-foo-in-bar/build-spec/debian/install
--- 
lintian-2.118.0/t/recipes/checks/files/hierarchy/standard/files-foo-in-bar/build-spec/debian/install
        2021-09-04 16:23:12.000000000 +0200
+++ 
lintian-2.118.0+nmu1/t/recipes/checks/files/hierarchy/standard/files-foo-in-bar/build-spec/debian/install
   2024-08-14 12:45:47.000000000 +0200
@@ -1,4 +1,4 @@
-bar bin/foo
+bar bin
 bar emul
 bar etc/apt/preferences.d
 bar etc/apt/sources.list.d
@@ -8,11 +8,12 @@
 bar etc/rc.boot
 bar etc/rc.d
 bar etc/udev/rules.d
-bar lib32
-bar lib64
-bar libx32
+bar usr/lib32
+bar usr/lib64
+bar usr/libx32
 bar mnt/foo
 bar run/foo
+bar sbin
 bar srv/foo
 bar tmp/foo
 bar usr/bin/foo
diff --minimal -Nru 
lintian-2.118.0/t/recipes/checks/files/hierarchy/standard/files-foo-in-bar/eval/hints
 
lintian-2.118.0+nmu1/t/recipes/checks/files/hierarchy/standard/files-foo-in-bar/eval/hints
--- 
lintian-2.118.0/t/recipes/checks/files/hierarchy/standard/files-foo-in-bar/eval/hints
       2022-08-13 15:53:35.000000000 +0200
+++ 
lintian-2.118.0+nmu1/t/recipes/checks/files/hierarchy/standard/files-foo-in-bar/eval/hints
  2024-08-14 12:45:47.000000000 +0200
@@ -1,5 +1,8 @@
 files-foo-in-bar (binary): subdir-in-usr-bin [usr/bin/foo/]
-files-foo-in-bar (binary): subdir-in-bin [bin/foo/]
+files-foo-in-bar (binary): aliased-location [bin/bar]
+files-foo-in-bar (binary): aliased-location [bin/]
+files-foo-in-bar (binary): aliased-location [sbin/bar]
+files-foo-in-bar (binary): aliased-location [sbin/]
 files-foo-in-bar (binary): non-standard-toplevel-dir [emul/]
 files-foo-in-bar (binary): non-standard-toplevel-dir [build/]
 files-foo-in-bar (binary): non-standard-dir-in-var [var/foo/]
@@ -7,9 +10,9 @@
 files-foo-in-bar (binary): non-multi-arch-lib-dir [usr/libx32/]
 files-foo-in-bar (binary): non-multi-arch-lib-dir [usr/lib64/]
 files-foo-in-bar (binary): non-multi-arch-lib-dir [usr/lib32/]
-files-foo-in-bar (binary): non-multi-arch-lib-dir [libx32/]
-files-foo-in-bar (binary): non-multi-arch-lib-dir [lib64/]
-files-foo-in-bar (binary): non-multi-arch-lib-dir [lib32/]
+files-foo-in-bar (binary): aliased-location [libx32/]
+files-foo-in-bar (binary): aliased-location [lib64/]
+files-foo-in-bar (binary): aliased-location [lib32/]
 files-foo-in-bar (binary): file-in-usr-local [usr/local/foo/bar]
 files-foo-in-bar (binary): file-in-unusual-dir [var/run/foo/bar]
 files-foo-in-bar (binary): file-in-unusual-dir [var/lock/foo/bar]
diff --minimal -Nru 
lintian-2.118.0/t/recipes/checks/files/hierarchy/standard/files-package-contains-usr-unmerged-pathnames/eval/hints
 
lintian-2.118.0+nmu1/t/recipes/checks/files/hierarchy/standard/files-package-contains-usr-unmerged-pathnames/eval/hints
--- 
lintian-2.118.0/t/recipes/checks/files/hierarchy/standard/files-package-contains-usr-unmerged-pathnames/eval/hints
  2022-08-13 15:53:35.000000000 +0200
+++ 
lintian-2.118.0+nmu1/t/recipes/checks/files/hierarchy/standard/files-package-contains-usr-unmerged-pathnames/eval/hints
     2024-08-14 12:45:47.000000000 +0200
@@ -1 +1,3 @@
-files-package-contains-usr-unmerged-pathnames (binary): subdir-in-bin 
[bin/subdir/]
+files-package-contains-usr-unmerged-pathnames (binary): aliased-location 
[bin/subdir/file-outside-usr]
+files-package-contains-usr-unmerged-pathnames (binary): aliased-location 
[bin/subdir/]
+files-package-contains-usr-unmerged-pathnames (binary): aliased-location [bin/]
diff --minimal -Nru lintian-2.118.0/tags/a/aliased-location.tag 
lintian-2.118.0+nmu1/tags/a/aliased-location.tag
--- lintian-2.118.0/tags/a/aliased-location.tag 1970-01-01 01:00:00.000000000 
+0100
+++ lintian-2.118.0+nmu1/tags/a/aliased-location.tag    2024-08-14 
12:35:50.000000000 +0200
@@ -0,0 +1,17 @@
+Tag: aliased-location
+Severity: error
+Check: files/hierarchy/standard
+Explanation: The package installs into an aliased location.
+ Since Debian trixie, the <code>base-files</code> package sets up symbolic
+ links such as <code>/bin</code> pointing to <code>usr/bin</code>. Using the
+ former paths triggers undefined behaviour in the <code>dpkg</code> package
+ manager. It treats e.g. <code>/bin/sh</code> and <code>/usr/bin/sh</code> as
+ two distinct filesystem objects and does not notice that operations on either
+ affect the other. Therefore, packages must no longer install files into such
+ locations and must install them to the corresponding location below
+ <code>usr/</code> instead. References to such files do not have to be updated
+ as all packages may rely on their files being accessible via the aliased
+ locations at all times. The requirement is only imposed on the contents of
+ the <code>data.tar</code> of a binary package.
+See-Also:
+ debian-policy 10.1 #1074014
diff --minimal -Nru lintian-2.118.0/tags/s/subdir-in-bin.tag 
lintian-2.118.0+nmu1/tags/s/subdir-in-bin.tag
--- lintian-2.118.0/tags/s/subdir-in-bin.tag    2022-08-13 15:53:35.000000000 
+0200
+++ lintian-2.118.0+nmu1/tags/s/subdir-in-bin.tag       1970-01-01 
01:00:00.000000000 +0100
@@ -1,6 +0,0 @@
-Tag: subdir-in-bin
-Severity: error
-Check: files/hierarchy/standard
-Explanation: The Filesystem Hierarchy Standard forbids the installation of new
- directories in <code>/bin</code>.
-See-Also: filesystem-hierarchy binessentialusercommandbinaries

Reply via email to