Files that the dpkg database considers to be in /bin, /sbin, /lib*/** are now allowed to be physically in /usr/bin, etc. due to symlinks in the root directory, as created by usrmerge or debootstrap --merged-usr.
debootstrap is likely to switch to --merged-usr by default during the buster release cycle. When that happens, piuparts should continue to succeed in the resulting base tarballs. Signed-off-by: Simon McVittie <s...@debian.org> Bug: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=860433 --- debian/changelog | 9 +++++++++ piuparts.py | 16 ++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/debian/changelog b/debian/changelog index 44fc51fa..9adf360f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +piuparts (0.78) UNRELEASED; urgency=medium + + * Consider the /usr merge to be acceptable variation. Files that the + dpkg database considers to be in /bin, /sbin, /lib/**, /lib*/** + are now allowed to be physically in /usr/bin, etc. due to symlinks in + the root directory, as created by usrmerge or debootstrap --merged-usr. + + -- Simon McVittie <s...@debian.org> Tue, 25 Jul 2017 09:17:39 +0100 + piuparts (0.77) unstable; urgency=medium [ Andreas Beckmann ] diff --git a/piuparts.py b/piuparts.py index a3bb89ff..f23c2775 100644 --- a/piuparts.py +++ b/piuparts.py @@ -1390,10 +1390,26 @@ class Chroot: file_owners = self.get_files_owned_by_packages() bad = [] overwrites = False + usrmerge = set() for f in sorted(file_owners.keys()): dn, fn = os.path.split(f) dc = canonicalize_path(self.name, dn) if dn != dc: + # Allow the /usr merge to have taken place. For example, if + # f (the file recorded in the dpkg database) is /bin/cat, + # then dn is /bin, and it's OK for /bin to have become a + # symlink to /usr/bin. Similarly /sbin, /lib, /libQUAL + # (/lib32 etc.) or any subdirectory of /lib or /libQUAL + # can be /usr-merged. + if dc == '/usr' + dn and (dn in ('/bin', '/sbin') or + dn.startswith('/lib')): + # Only report each directory once + if dn not in usrmerge: + usrmerge.add(dn) + logging.info('%s converted to %s by /usr merge', dn, dc) + + continue + fc = os.path.join(dc, fn) of = ", ".join(file_owners[f]) if fc in file_owners: -- 2.13.3