[Bug 1599459] Re: cannot bootstrap from repositories without InRelease files when --debian-installer set
Sebastian Unger
sebunger44 at gmail.com
Sun Jan 5 00:39:00 UTC 2020
It looks as though this has been fixed in Ubuntu somewhere between
Bionic and Eoan. Shouldn't this bug be updated accordingly?
--
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/1599459
Title:
cannot bootstrap from repositories without InRelease files when
--debian-installer set
Status in debootstrap package in Ubuntu:
Confirmed
Status in debootstrap package in Debian:
Fix Released
Bug description:
Version: 1.0.78+nmu1ubuntu1
I am using debootstrap in my own minimal system bootstrapper, and am
making use of the progress information reported to FH 3 as enabled by
the --debian-installer command-line flag.
Unfortunately, using this flag causes the behaviour of debootstrap to
change, specifically in its handling of InRelease / Release files.
During normal operation, debootstrap will first attempt to fetch an
InRelease file from the repository; if this is unavailable, i.e. the
fetch fails with 404, then debootstrap will normally fall back to
fetching a Release file instead. Indeed, this is the behaviour of
debootstrap if --debian-installer is not passed on the command-line.
debootstrap uses the wgetprogress() function to fetch these URLs. It
reads:
wgetprogress () {
[ ! "$VERBOSE" ] && QSWITCH="-q"
local ret=0
if [ "$USE_DEBIANINSTALLER_INTERACTION" ] && [ "$PROGRESS_NEXT" ]; then
wget "$@" 2>&1 >/dev/null | $PKGDETAILS "WGET%" $PROGRESS_NOW $PROGRESS_NEXT $PROGRESS_END >&3
ret=$?
else
wget $QSWITCH "$@"
ret=$?
fi
return $ret
}
When the --debian-installer command-line flag is set, the first path
of the if branch will be taken - running the output of wget through a
pipe, so that the $PKGDETAILS command can be used to parse progress
information provided by wget and report it to FH 3 in a format usable
by debian-installer.
However, if the URL passed to wget returns 404, then while the wget command
will fail, the $PKGDETAILS command, and thus the pipeline as a whole, does not, and the wgetprocess () function thus erroneously returns success.
As a consequence, debootstrap does not fall back to fetching and using a
Release file as it should in this case, and the bootstrapping attempt as a
whole fails.
Because this is a POSIX shell-script, I don't believe there is a
straightforward mechanism to fetch the exit status of the wget command when it is part of a pipeline. (See: http://cfajohnson.com/shell/cus-faq-2.html#Q11). It might be possible to enhance the code invoked by $PKGDETAILS to return a fatal exit status if it does not definitely see a successful file retrieval?
A more direct work-around is to modify this function to
unconditionally use the second code path that does not attempt to
invoke wget as part of a pipeline. However, this does mean that you
lose out on intra-file download progress reporting.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/debootstrap/+bug/1599459/+subscriptions
More information about the foundations-bugs
mailing list