From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56900) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bMmgm-0007lE-RR for qemu-devel@nongnu.org; Mon, 11 Jul 2016 21:40:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bMmgg-0002BI-M0 for qemu-devel@nongnu.org; Mon, 11 Jul 2016 21:40:43 -0400 Received: from mx1.redhat.com ([209.132.183.28]:59576) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bMmgg-0002BC-Dt for qemu-devel@nongnu.org; Mon, 11 Jul 2016 21:40:38 -0400 Date: Tue, 12 Jul 2016 09:40:35 +0800 From: Fam Zheng Message-ID: <20160712014035.GB8237@ad.usersys.redhat.com> References: <1468207242-5015-1-git-send-email-famz@redhat.com> <1468207242-5015-5-git-send-email-famz@redhat.com> <87mvlo570h.fsf@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <87mvlo570h.fsf@linaro.org> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH RFC v4 4/4] docker: Add debootstrap-arm image List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alex =?iso-8859-1?Q?Benn=E9e?= Cc: qemu-devel@nongnu.org On Mon, 07/11 20:06, Alex Benn=E9e wrote: >=20 > Fam Zheng writes: >=20 > > Signed-off-by: Fam Zheng > > --- > > tests/docker/dockerfiles/debootstrap-arm.docker | 35 +++++++++++++++= ++++++++++ > > 1 file changed, 35 insertions(+) > > create mode 100644 tests/docker/dockerfiles/debootstrap-arm.docker > > > > diff --git a/tests/docker/dockerfiles/debootstrap-arm.docker b/tests/= docker/dockerfiles/debootstrap-arm.docker > > new file mode 100644 > > index 0000000..cb15f2f > > --- /dev/null > > +++ b/tests/docker/dockerfiles/debootstrap-arm.docker > > @@ -0,0 +1,35 @@ > > +FROM debian:testing > > + > > +RUN apt-get update > > +RUN apt-get install -y fakeroot debootstrap qemu-user-static > > + > > +RUN mkdir /debootstrap-arm > > + > > +RUN cd /debootstrap-arm && fakeroot debootstrap --variant=3Dbuildd -= -foreign \ > > + --arch=3Darmhf testing . http://httpredir.debian.org/debian > > + > > +RUN sed -i 's/in_target mount/echo not for docker in_target mount/g'= \ > > + /debootstrap-arm/debootstrap/functions > > + > > +RUN mkdir -p /debootstrap-arm/usr/local/bin > > + > > +RUN ln /usr/bin/qemu-arm-static /debootstrap-arm/usr/bin/qemu-arm &&= \ > > + ln /usr/bin/qemu-arm-static /debootstrap-arm/usr/bin/qemu-arm-st= atic && \ > > + ln /usr/bin/qemu-arm-static /debootstrap-arm/usr/local/bin/qemu-= arm && \ > > + ln /usr/bin/qemu-arm-static /debootstrap-arm/usr/local/bin/qemu-= arm-static > > + > > +# Run stage 2 > > +RUN if ! chroot /debootstrap-arm /debootstrap/debootstrap --second-s= tage; then \ > > + echo "Failed to chroot and do stage 2"; \ > > + echo "Please set up binfmt_misc to point arm binary to one o= f:"; \ > > + echo " /usr/bin/qemu-arm"; \ > > + echo " /usr/bin/qemu-arm-static"; \ > > + echo " /usr/local/bin/qemu-arm"; \ > > + echo " /usr/local/bin/qemu-arm-static"; \ > > + exit 1; \ > > + fi > > +RUN chroot /debootstrap-arm sh -c 'cat /etc/apt/sources.list | sed "= s/deb/deb-src/" >> /etc/apt/sources.list' > > +RUN chroot /debootstrap-arm apt-get update > > +RUN chroot /debootstrap-arm apt-get build-dep -y qemu > > +RUN chroot /debootstrap-arm apt-get install -y ccache > > +ENV QEMU_CHROOT /debootstrap-arm >=20 > OK I've done some more experimenting and two things are apparent: >=20 > debootstrap is widely packaged for various distros >=20 > And >=20 > The script it fairly portable so we can always run it directly >=20 > I hacked up the .pre script to do the following and tested on my Arch > VM: >=20 > #!/bin/sh > # > # Simple wrapper for debootstrap, run in the docker build context > # > FAKEROOT=3D`which fakeroot 2> /dev/null` > DEBOOTSTRAP=3D`which debootstrap 2> /dev/null` > DEBOOTSTRAP_SOURCE=3Dhttps://anonscm.debian.org/git/d-i/debootstrap.git >=20 > if [ -z $FAKEROOT ]; then > echo "Please install fakeroot to enable bootstraping" > exit 1 > fi >=20 > if [ -z $DEBOOTSTRAP ]; then > echo "No debootstrap installed, attempting to install from SCM" > git clone ${DEBOOTSTRAP_SOURCE} ./debootstrap.git > export DEBOOTSTRAP_DIR=3D./debootstrap.git > DEBOOTSTRAP=3D./debootstrap.git/debootstrap > fi >=20 > echo "Building a rootfs using ${FAKEROOT} and ${DEBOOTSTRAP}" >=20 > ${FAKEROOT} /bin/sh -x ${DEBOOTSTRAP} --variant=3Dbuildd --foreign --ar= ch=3D$DEB_ARCH $DEB_TYPE . http://httpredir.debian.org/debian > exit 0 >=20 > So I think it is feasible to but the pre-requisite checking and work > around in the pre script and be done with it. It seems neater than the > chroot within a container approach. >=20 > Thoughts? Yes, makes sense to me. Two more questions: Can we have "make docker-images" to update the docker image if pre script= has been updated? Can we skip debootstrap (i.e. skip .pre script) if it's only the dockerfi= le that has changed? Thanks, Fam