[Bug 1990856] Re: Does not consider all versions in Packages files
Dan Watkins
1990856 at bugs.launchpad.net
Mon Sep 26 18:28:21 UTC 2022
I've created a reproducer (attached, also at
https://pastebin.ubuntu.com/p/H6dTzGBTGp/). This is a small Flask app
which wraps archive.ubuntu.com, and modifies the focal main Packages
file to include the e2fsprogs and libext2fs2 packages currently in
focal-updates (as well as rewriting other metadata as required). It can
be run like this (assuming it's written to repro.py):
FLASK_APP=repro.py flask run
Once it's running, the reported debootstrap error can be reproduced by
attempting to bootstrap from this "mirror" (without GPG verification:
that obviously won't work!):
debootstrap --keep-debootstrap-dir --variant minbase --no-check-gpg
focal bootstrap http://127.0.0.1:5000/ubuntu/
You should see this fail with:
W: Failure trying to run: chroot "/root/bootstrap" dpkg --force-
overwrite --force-confold --skip-same-version --install
This command should have a package name appended to it. debootstrap has
installed the older version of libext2fs2 into the chroot (because it
failed to find the newer one), but it has written
`/var/lib/dpkg/available` such that `dpkg --predep-package` does detect
the newer version and returns "libext2fs2" as a package that needs
installing to satisfy Pre-Depends. debootstrap filters out any already-
installed packages from that list, and that's why we don't have any
package name appended here.
Fixing the determination logic in pkgdetails_field so that debootstrap
installs the most recent packages initially fixes this problem: the Pre-
Depends on the newer package is satisfied, so `dpkg --predep-package`
doesn't return it.
** Attachment added: "repro.py"
https://bugs.launchpad.net/ubuntu/+source/debootstrap/+bug/1990856/+attachment/5619235/+files/repro.py
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to debootstrap in Ubuntu.
https://bugs.launchpad.net/bugs/1990856
Title:
Does not consider all versions in Packages files
Status in debootstrap package in Ubuntu:
New
Bug description:
Some implementations of apt mirror metadata generation generate
Packages files which are not alpha-sorted by package name. apt and
britney2 handle these files without issue, but debootstrap does not:
it will only consider the first contiguous run of stanzas for a
package (taking the last stanza as the latest).
When running debootstrap against a mirror with such Packages files,
debootstrap can fail to resolve versioned dependencies which _are_
present in the Packages file, if the satisfying package version isn't
within the first contiguous run of stanzas for that package. This
leads to avoidable bootstrap failures. (The specific case we hit:
each e2fsprogs package Pre-Depends on the libext2fs2 package with the
same version: `dpkg --predep-package` finds the newer e2fsprogs
version and reports that libext2fs2 needs installing, but debootstrap
has already installed (the old) libext2fs2 so errors out.)
The problem lies in the pkgdetails_field function (which is
implemented in Perl):
https://git.launchpad.net/ubuntu/+source/debootstrap/tree/functions#n1439.
It takes a list of expected packages and, once it has found a version
for all of them, exits (even if there is more of the Packages file to
process). It does already have special-casing for multiple versions
of the same package, but only if they are a contiguous run. (That
behaviour was introduced by cjwatson in 1.0.38[0] to fix
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=649319: that bug
report also has useful background info on why multiple versions of a
package in metadata should be supported).
[0] https://salsa.debian.org/installer-
team/debootstrap/-/commit/0fbf86aa8fbcd06cb62fddddcfd4605fef2ee8b2
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/debootstrap/+bug/1990856/+subscriptions
More information about the foundations-bugs
mailing list