Hi,

Quoting Trent W. Buck (2020-10-20 16:15:07)
> Per our IRC chat, I found tarfilter stuff[0] triggers a regression of old
> dash bug #606756.
> 
> [0] 
> https://gitlab.mister-muffin.de/josch/mmdebstrap/commit/465c0564345b456c41016abc6a4b1cb727125961
> 
> I narrowed it down with this test command:
> 
>     git bisect start 0.7.1 0.6.1
>     git bisect run ./mmdebstrap --quiet --mode=unshare --variant=apt 
> --dpkgopt=path-exclude='/usr/share/man/*' stable /dev/null
> 
> ...that relies on mmtarfilter being in $PATH, so you will need mmdebstrap 
> 0.7.x package installed.
> 
> Attached are some files:
> 
>   git-bisect.log - a log of the git bisect
>   bad.log        - a log of the actual error (from dpkg.postinst)
>   workaround.log - a log of a minimal workaround
>   tar-t.log      - a log of showing the final tarball's contents with 
> different commits & options
> 
> I think the last one shows a clear difference between tarfilter and dpkg's
> built-in exclusions.

I think I understand the problem now. So, the original problem is, that since I
introduced the tarfilter command, so that packages do not need to be
re-installed when using the dpkg path-excluded option, dash fails to install
with the following error when excluding /usr/share/man/*:

ln: failed to create symbolic link '/usr/share/man/man1/sh.1.gz.tmp': No such 
file or directory

This makes sense, because indeed the directory /usr/share/man/man1 was excluded
and thus the symbolic link cannot be created. The question is, why did this
work before? The answer is simple: before the tarfilter, the initial package
installation was done with the /usr/share/man/man1 still present, because
before tarfilter, mmdebstrap would just extract the full package contents. Only
the re-install step would then delete everything according to the path-excluded
option. But at that point, the relevant part of the postinst script is not run
anymore, so there will not be a failure.

Also, re-reading #606756 and also the dash postinst, I see nothing that is a
safeguard against a missing /usr/share/man/man1. I think I should open another
bug against dash because it clearly fails to install without
/usr/share/man/man1 present.

Thanks!

cheers, josch

Attachment: signature.asc
Description: signature

Reply via email to