[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bug#774844: xfonts-traditional: fails to upgrade from 'wheezy': Can't locate File/Find.pm in @INC



(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.


Reply to: