Package: usrmerge
Version: 36
Severity: serious
Tags: patch
Hi,
the recent changes to usr-is-merged.postinst broke DPKG_ROOT support:
Setting up usr-is-merged (36) ...
removed '/lib64'
/tmp/mmdebstrap.P6Rv45i7Hi/var/lib/dpkg/info/usr-is-merged.postinst: 16: rmdir:
not found
dpkg: error processing package usr-is-merged (--configure):
installed usr-is-merged package post-installation script subprocess returned
error exit status 127
Errors were encountered while processing:
usr-is-merged
E: Sub-process /usr/bin/dpkg returned an error code (1)
E: setup failed: E: command failed:
/usr/share/mmdebstrap/hooks/merged-usr/essential00.sh
I: main() received signal PIPE: waiting for setup...
I: removing tempdir /tmp/mmdebstrap.P6Rv45i7Hi...
Can't exec "rm": No such file or directory at /usr/bin/mmdebstrap line 6232.
E: rm failed: -1
Since usr-is-merged.postinst fails to respect $DPKG_ROOT it will operate
on the directory hierarchy outside the chroot and remove several rather
important directories.
I'm filing this with severity series because it breaks the mmdebstrap
autopkgtest and should thus be prevented from transitioning to testing until
fixed. The following patch fixes the problem:
diff -Nru usrmerge-36/debian/usr-is-merged.postinst
usrmerge-36+nmu1/debian/usr-is-merged.postinst
--- usrmerge-36/debian/usr-is-merged.postinst 2023-08-27 13:33:27.000000000
+0200
+++ usrmerge-36+nmu1/debian/usr-is-merged.postinst 2023-08-29
01:14:03.000000000 +0200
@@ -9,11 +9,11 @@
# so clean up the unused (and unowned) ones
local arch_directories="/lib64 /lib32 /libo32 /libx32"
for dir in $arch_directories; do
- [ -e "$dir" ] || continue
+ [ -e "$DPKG_ROOT$dir" ] || continue
if ! dpkg-query -S $dir >/dev/null 2>&1; then
- rm -v $dir
- if [ -e /usr$dir ] && ! dpkg-query -S /usr$dir >/dev/null 2>&1 ; then
- rmdir --ignore-fail-on-non-empty -v /usr$dir
+ rm -v "$DPKG_ROOT$dir"
+ if [ -e "$DPKG_ROOT/usr$dir" ] && ! dpkg-query -S /usr$dir >/dev/null
2>&1 ; then
+ rmdir --ignore-fail-on-non-empty -v "$DPKG_ROOT/usr$dir"
fi
fi
done