cannot bootstrap from repositories without InRelease files when --debian-installer set
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
debootstrap (Debian) |
Fix Released
|
Unknown
|
|||
debootstrap (Ubuntu) |
Confirmed
|
Undecided
|
Unassigned |
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_DEBIANINS
else
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://
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.
description: | updated |
Changed in debootstrap (Debian): | |
status: | Unknown → New |
Changed in debootstrap (Debian): | |
status: | New → Fix Committed |
Changed in debootstrap (Debian): | |
status: | Fix Committed → Fix Released |
Status changed to 'Confirmed' because the bug affects multiple users.