From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47855) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bPQtH-0002EE-1Y for qemu-devel@nongnu.org; Tue, 19 Jul 2016 05:00:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bPQtA-0000IH-PX for qemu-devel@nongnu.org; Tue, 19 Jul 2016 05:00:34 -0400 Received: from mail-wm0-x229.google.com ([2a00:1450:400c:c09::229]:36164) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bPQt9-0000Hw-Jf for qemu-devel@nongnu.org; Tue, 19 Jul 2016 05:00:28 -0400 Received: by mail-wm0-x229.google.com with SMTP id q128so12202828wma.1 for ; Tue, 19 Jul 2016 02:00:27 -0700 (PDT) References: <1468916208-18668-1-git-send-email-famz@redhat.com> <1468916208-18668-5-git-send-email-famz@redhat.com> From: Alex =?utf-8?Q?Benn=C3=A9e?= In-reply-to: <1468916208-18668-5-git-send-email-famz@redhat.com> Date: Tue, 19 Jul 2016 10:00:27 +0100 Message-ID: <87mvlem28k.fsf@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH v6 4/8] tests/docker/dockerfiles: new debian-bootstrap.docker List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng Cc: qemu-devel@nongnu.org Fam Zheng writes: > From: Alex Bennée > > Together with the debian-bootstrap.pre script can now build an arbitrary > architecture of Debian using debootstrap. This allows debootstrap to set > up its first stage before the container is built. > > To build a container you need a command line like: > > DEB_ARCH=armhf DEB_TYPE=testing \ > ./tests/docker/docker.py build \ > --include-executable=arm-linux-user/qemu-arm debian:armhf \ > ./tests/docker/dockerfiles/debian-bootstrap.docker > > Although a number of non-debian systems package the debootstrap script > it is fairly portable in itself. Assuming we have some sort of fakeroot > implementation we can just clone the upstream repository and use the > script from there. > > Signed-off-by: Alex Bennée > Message-id: 1468335639-24582-5-git-send-email-alex.bennee@linaro.org Acked-by: Alex Bennée > --- > tests/docker/dockerfiles/debian-bootstrap.docker | 21 ++++++ > tests/docker/dockerfiles/debian-bootstrap.pre | 87 ++++++++++++++++++++++++ > 2 files changed, 108 insertions(+) > create mode 100644 tests/docker/dockerfiles/debian-bootstrap.docker > create mode 100755 tests/docker/dockerfiles/debian-bootstrap.pre > > diff --git a/tests/docker/dockerfiles/debian-bootstrap.docker b/tests/docker/dockerfiles/debian-bootstrap.docker > new file mode 100644 > index 0000000..3a9125e > --- /dev/null > +++ b/tests/docker/dockerfiles/debian-bootstrap.docker > @@ -0,0 +1,21 @@ > +# Create Debian Bootstrap Image > +# > +# This is intended to be pre-poluated by: > +# - a first stage debootstrap (see debian-bootstrap.pre) > +# - a native qemu-$arch that binfmt_misc will run > +FROM scratch > + > +# Add everything from the context into the container > +ADD . / > + > +# Patch all mounts as docker already has stuff set up > +RUN sed -i 's/in_target mount/echo not for docker in_target mount/g' /debootstrap/functions > + > +# Run stage 2 > +RUN /debootstrap/debootstrap --second-stage > + > +# At this point we can install additional packages if we want > +# Duplicate deb line as deb-src > +RUN cat /etc/apt/sources.list | sed "s/deb/deb-src/" >> /etc/apt/sources.list > +RUN apt-get update > +RUN apt-get -y build-dep qemu > diff --git a/tests/docker/dockerfiles/debian-bootstrap.pre b/tests/docker/dockerfiles/debian-bootstrap.pre > new file mode 100755 > index 0000000..55850be > --- /dev/null > +++ b/tests/docker/dockerfiles/debian-bootstrap.pre > @@ -0,0 +1,87 @@ > +#!/bin/sh > +# > +# Simple wrapper for debootstrap, run in the docker build context > +# > +FAKEROOT=`which fakeroot 2> /dev/null` > + > +exit_and_skip() > +{ > + exit 3 > +} > + > +# > +# fakeroot is needed to run the bootstrap stage > +# > +if [ -z $FAKEROOT ]; then > + echo "Please install fakeroot to enable bootstraping" > + exit_and_skip > +fi > + > +# We check in order for > +# > +# - DEBOOTSTRAP_DIR pointing at a development checkout > +# - PATH for the debootstrap script (installed) > +# > +# If neither option works then we checkout debootstrap from its > +# upstream SCM and run it from there. > +# > + > +if [ -z $DEBOOTSTRAP_DIR ]; then > + DEBOOTSTRAP=`which debootstrap 2> /dev/null` > + if [ -z $DEBOOTSTRAP ]; then > + echo "No debootstrap installed, attempting to install from SCM" > + DEBOOTSTRAP_SOURCE=https://anonscm.debian.org/git/d-i/debootstrap.git > + git clone ${DEBOOTSTRAP_SOURCE} ./debootstrap.git > + export DEBOOTSTRAP_DIR=./debootstrap.git > + DEBOOTSTRAP=./debootstrap.git/debootstrap > + fi > +else > + DEBOOTSTRAP=${DEBOOTSTRAP_DIR}/debootstrap > + if [ ! -f $DEBOOTSTRAP ]; then > + echo "Couldn't find script at ${DEBOOTSTRAP}" > + exit_and_skip > + fi > +fi > + > +# > +# Finally check to see if any qemu's are installed > +# > +BINFMT_DIR=/proc/sys/fs/binfmt_misc > +if [ ! -e $BINFMT_DIR ]; then > + echo "binfmt_misc needs enabling for a QEMU bootstrap to work" > + exit_and_skip > +else > + # DEB_ARCH and QEMU arch names are not totally aligned > + case "${DEB_ARCH}" in > + amd64) > + QEMU=qemu-i386 > + ;; > + armel|armhf) > + QEMU=qemu-arm > + ;; > + arm64) > + QEMU=qemu-aarch64 > + ;; > + powerpc) > + QEMU=qemu-ppc > + ;; > + ppc64el) > + QEMU=qemu-ppc64le > + ;; > + s390) > + QEMU=qemu-s390x > + ;; > + *) > + QEMU=qemu-${DEB_ARCH} > + ;; > + esac > + if [ ! -e "${BINFMT_DIR}/$QEMU" ]; then > + echo "No binfmt_misc rule to run $QEMU, can't bootstrap" > + exit_and_skip > + fi > +fi > + > +echo "Building a rootfs using ${FAKEROOT} and ${DEBOOTSTRAP}" > + > +${FAKEROOT} ${DEBOOTSTRAP} --variant=buildd --foreign --arch=$DEB_ARCH $DEB_TYPE . http://httpredir.debian.org/debian || exit 1 > +exit 0 -- Alex Bennée