[Bug 1599459] Re: cannot bootstrap from repositories without InRelease files when --debian-installer set

Sebastian Unger sebunger44 at gmail.com
Tue May 9 03:46:13 UTC 2017


I'm also affected by this. The attached patch fixes the problem using
only posix shell mechanisms.

Please note that the paths in the diff are absolute to patch the problem
in-system.


** Patch added: "functions.diff"
   https://bugs.launchpad.net/ubuntu/+source/debootstrap/+bug/1599459/+attachment/4873850/+files/functions.diff

-- 
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:
  New

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