On Tue, Oct 02, 2018 at 10:13:42AM +0200, Johannes Schauer wrote: > Quoting Johannes Schauer (2018-10-02 04:23:54) > > > Another thing that I have stumbled upon is that providing a sources.list > > > on > > > stdin only works when no target directory is provided on the commandline, > > > i.e. when automatically creating a tarball. While > > > > > > echo -e "deb http://deb.debian.org/debian-ports/ sid main\ndeb > > > http://deb.debian.org/debian-ports/ unreleased main" | mmdebstrap > > > --architectures=riscv64 > /tmp/rv64-chroot.tar > > > > > > works, the following doesn't: > > > > > > echo -e "deb http://deb.debian.org/debian-ports/ sid main\ndeb > > > http://deb.debian.org/debian-ports/ unreleased main" | mmdebstrap > > > --architectures=riscv64 sid /tmp/rv64-chroot > > > > > > It results in > > > > > > I: riscv64 cannot be executed, falling back to qemu-user > > > I: automatically chosen mode: root > > > I: running apt-get update... > > > done > > > apt-get update didn't download anything at /usr/bin/mmdebstrap line 721. > > > > This is actually a feature. In your second invocation, you didn't specify > > the > > "MIRROR" argument. The docs say: > > > > > If no MIRROR option is provided, http://deb.debian.org/debian is used. > > > > In your first invocation, you also didn't specify the "SUITE" argument. The > > docs say: > > > > > If no SUITE was specified, then a single MIRROR "-" is added and thus the > > > information of the desired suite has to come from standard input as part > > > of a > > > valid apt sources.list file. > > > > So the implicit '-' as the mirror argument only works if there was no > > SUITE. If > > you pass a SUITE, you need to explicitly tell it that you want to read the > > mirror from stdin. This is to have compatibility with how debootstrap also > > just > > uses deb.debian.org/debian as the mirror if the mirror argument is missing. > > > > To make the cause of the problem more obvious, I'm now printing the content > > of > > /etc/apt/sources.list in the chroot in case apt-get didn't download > > anything: > > > > https://gitlab.mister-muffin.de/josch/mmdebstrap/commit/1f13d0157bc8364ac491203a6a9156a78f6228a9 > > > > But we could turn this bug into a feature request of the following form: > > > > If no MIRROR was provided *and* something was specified on standard input, > > then > > don't use deb.debian.org/debian but use whatever was given on standard input > > instead. > > > > Or even more liberal: > > > > If anything is provided on standard input and there is no '-' MIRROR > > argument, > > then just append whatever is given on standard input to the apt sources.list > > inside the chroot. > > > > What do you think? > > now that I've slept about it, I think your idea makes sense. If you don't > specify a mirror but you pass something on standard input, then the default > mirror should *not* be used. The default mirror should only be used if neither > a mirror nor anything from standard input was given. > > I pushed a fix to the upstream repository. I would be happy if you could > download the latest version of the shell script from there and test if it > works > as you had expected it to work.
Many thanks! I've run a number of tests covering different options (native/foreign chroot, implicit/explicit mirror, plain-url/sources.list-entry, mirror information via stdin/on the commandline, target directory/tarball) with the current upstream git head and everything looks good: * native chroot with default mirror and with a directory as the target: # mmdebstrap --include="debian-ports-archive-keyring" sid /tmp/amd64-chroot I: chroot architecture amd64 is equal to the host's architecture I: automatically chosen mode: root I: running apt-get update... done I: downloading packages with apt... done I: extracting archives... done I: installing packages... done I: downloading apt... done I: installing apt... done I: installing remaining packages inside the chroot... done I: cleaning package lists and apt cache... done done * native chroot with a mirror URL on the commandline and a directory as the target: # mmdebstrap --include="debian-ports-archive-keyring" sid /tmp/amd64-chroot http://deb.debian.org/debian I: chroot architecture amd64 is equal to the host's architecture I: automatically chosen mode: root I: running apt-get update... done I: downloading packages with apt... done I: extracting archives... done I: installing packages... done I: downloading apt... done I: installing apt... done I: installing remaining packages inside the chroot... done I: cleaning package lists and apt cache... done done * foreign (riscv64) chroot with sources.list passed on stdin and with a directory as the target: # echo -e "deb http://deb.debian.org/debian-ports/ sid main\ndeb http://deb.debian.org/debian-ports/ unreleased main" | mmdebstrap --architectures=riscv64 --include="debian-ports-archive-keyring" sid /tmp/rv64-chroot I: riscv64 cannot be executed, falling back to qemu-user I: Reading sources.list from standard input... I: automatically chosen mode: root I: running apt-get update... done I: downloading packages with apt... done I: extracting archives... done I: installing packages... done I: downloading apt... done I: installing apt... done I: installing remaining packages inside the chroot... done I: cleaning package lists and apt cache... done done * foreign (riscv64) chroot with mirrors (in sources.list-style) passed on the commandline and with a directory as the target: # mmdebstrap --architectures=riscv64 --include="debian-ports-archive-keyring" sid /tmp/rv64-chroot "deb http://deb.debian.org/debian-ports/ sid main" "deb http://deb.debian.org/debian-ports/ unreleased main" I: riscv64 cannot be executed, falling back to qemu-user I: automatically chosen mode: root I: running apt-get update... done I: downloading packages with apt... done I: extracting archives... done I: installing packages... done I: downloading apt... done I: installing apt... done I: installing remaining packages inside the chroot... done I: cleaning package lists and apt cache... done done * foreign (riscv64) chroot with mirrors (in sources.list-style) passed on the commandline and with a gzipped tarball as the target: # mmdebstrap --architectures=riscv64 --include="debian-ports-archive-keyring" sid /tmp/rv64-chroot.tar.gz "deb http://deb.debian.org/debian-ports/ sid main" "deb http://deb.debian.org/debian-ports/ unreleased main" I: riscv64 cannot be executed, falling back to qemu-user I: automatically chosen mode: root I: running apt-get update... done I: downloading packages with apt... done I: extracting archives... done I: installing packages... done I: downloading apt... done I: installing apt... done I: installing remaining packages inside the chroot... done I: cleaning package lists and apt cache... done done I: creating tarball... done Regards, Karsten -- Gem. Par. 28 Abs. 4 Bundesdatenschutzgesetz widerspreche ich der Nutzung sowie der Weitergabe meiner personenbezogenen Daten für Zwecke der Werbung sowie der Markt- oder Meinungsforschung.