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:
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.
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 () { TALLER_ INTERACTION" ] && [ "$PROGRESS_NEXT" ]; then
wget "$@" 2>&1 >/dev/null | $PKGDETAILS "WGET%" $PROGRESS_NOW $PROGRESS_NEXT $PROGRESS_END >&3
ret=$ ?
wget $QSWITCH "$@"
ret=$ ?
[ ! "$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 cfajohnson. com/shell/ cus-faq- 2.html# Q11).
straightforward mechanism to fetch the exit status of the wget command when it
is part of a pipeline. (See: http://
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.