Bug#774844: xfonts-traditional: fails to upgrade from 'wheezy': Can't locate File/Find.pm in @INC
Ian Jackson
ijackson at chiark.greenend.org.uk
Thu Jan 8 16:12:05 UTC 2015
(Resending with debian-perl in the CC.)
Andreas Beckmann writes ("Bug#774844: xfonts-traditional: fails to upgrade from 'wheezy': Can't locate File/Find.pm in @INC"):
> Package: xfonts-traditional
> Version: 1.7.1
Thanks for the report. This is definitely a bad bug which must be
fixed for jessie.
> At the point where the error occurs we have these packages
> installed/unpacked:
> dpkg: wheezy
> perl-base: wheezy (no File/Find.pm, yet)
> perl-modules: jessie (no File/Find.pm any longer)
> xfonts-traditional: wheezy
>
> i.e. the triggers from xfonts-traditional/wheezy are run by dpkg/wheezy.
> What triggered them btw?
I think that the target package for this bug is perhaps wrong. (That
is, that the change will have to be made to a different package.)
Certainly the version is wrong: at the point where this bug occurs,
xfonts-traditional_1.7.1_all.deb has not even been touched.
> Since File/Find.pm moved to perl-base, [...]
I think that the current dependency structure would permit:
* Start with wheezy, without xfonts-traditional
* Unpack perl-modules from jessie but do not configure it
* Install xfonts-traditional
But xfonts-traditional depends on `perl', not `perl-modules' or
`perl-base'. And `perl' is not deconfigured merely because one of its
dependencies goes from configured to unpacked. So at this point
xfonts-traditional's postinst will run but the actual purpose of its
dependency on `perl' is not fully satisfied. The postinst will fail.
This arises from the fact that in dpkg the `dependencies are
configured when postinst is run' requirement is not transitive: it
doesn't apply to the dependencies of one's dependencies.
AFAICT xfonts-traditional's use of dependencies conforms to the
recommendation in the perl policy:
https://www.debian.org/doc/packaging-manuals/perl-policy/ch-programs.html
If my scenario above is correct, this problem is not confined to
packages involving triggers, nor necessarily to xfonts-traditional.
Rather the problem is that the policy implies that most packages will
depend on just `perl', but `perl' can be `installed' despite some of
the functionality it is supposed to provide (File/Find.pm in this
case) being missing.
I think the right fix therefore has to be in the Perl packages.
Here is a suggestion: have perl-modules (jessie) declare a Breaks on
perl (wheezy).
That declares it necessary to deconfigure perl (wheezy) to install
perl-modules (jessie). perl (wheezy) cannot be re-configured until
perl-modules (which it depends on) is re-configured, but perl-modules
(jessie) depends on perl-base (jessie) so apt and dpkg will have to
unpack and configure perl-base (jessie) first.
Thus it will not be possible for `perl' to be `installed' while
File/Find.pm is absent. And xfonts-traditional's (or some other
client package)'s postinst won't run until `perl' is `installed'
again.
> Since File/Find.pm moved to perl-base, maybe the Depends: perl can be
> changed to Depends: perl-base (>= 5.20.1-3~)
> and perl-modules could add a Breaks: xfonts-traditional (<= 1.7.1)
But, firstly, that's not an entirely accurate description of
xfonts-traditional dependencies. The package does in fact work with
older perls. And, this approach suggests that perl-modules should
grow a Breaks for every package in the archive which uses File::Find,
which doesn't seem like a very good approach.
Regards,
Ian.
More information about the Perl-maintainers
mailing list