Message ID | 1468207242-5015-4-git-send-email-famz@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 11/07/2016 05:20, Fam Zheng wrote: > This allows a docker file to say "ENV QEMU_CHROOT /path/to/new/root" to > indicate that the test execution should be done in a chroot in the > container. > > Bind mount dev,sys,proc into QEMU_CHROOT to make them avaiable for > testing scripts. > > The SYS_ADMIN is a required capability for mount, add it to the > docker run command line. > > Signed-off-by: Fam Zheng <famz@redhat.com> > --- > tests/docker/Makefile.include | 1 + > tests/docker/run | 12 ++++++++++++ > 2 files changed, 13 insertions(+) > > diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include > index c5546ee..e9821ba 100644 > --- a/tests/docker/Makefile.include > +++ b/tests/docker/Makefile.include > @@ -107,6 +107,7 @@ docker-run-%: docker-qemu-src > $(call quiet-command,\ > $(SRC_PATH)/tests/docker/docker.py run $(if $V,,--rm) \ > -t \ > + --cap-add SYS_ADMIN \ > $(if $(DEBUG),-i,--net=none) \ > -e TARGET_LIST=$(TARGET_LIST) \ > -e EXTRA_CONFIGURE_OPTS=$(EXTRA_CONFIGURE_OPTS) \ > diff --git a/tests/docker/run b/tests/docker/run > index 38ce789..4e80cc3 100755 > --- a/tests/docker/run > +++ b/tests/docker/run > @@ -19,6 +19,18 @@ fi > > BASE="$(dirname $(realpath $0))" > > +# cp files into the chroot and execute there > +if test -n "$QEMU_CHROOT"; then > + mkdir -p $QEMU_CHROOT/$BASE > + cp $BASE/* $QEMU_CHROOT/$BASE > + QEMU_CHROOT_SAVE="$QEMU_CHROOT" > + for bp in dev sys proc; do > + mount --bind /$bp $QEMU_CHROOT/$bp Can you ask docker to do these bind mounts instead? Thanks, Paolo > + done > + QEMU_CHROOT="" chroot $QEMU_CHROOT_SAVE $BASE/run "$@" > + exit 0 > +fi > + > # Prepare the environment > . /etc/profile || true > export PATH=/usr/lib/ccache:$PATH >
Paolo Bonzini <pbonzini@redhat.com> writes: > On 11/07/2016 05:20, Fam Zheng wrote: >> This allows a docker file to say "ENV QEMU_CHROOT /path/to/new/root" to >> indicate that the test execution should be done in a chroot in the >> container. >> >> Bind mount dev,sys,proc into QEMU_CHROOT to make them avaiable for >> testing scripts. >> >> The SYS_ADMIN is a required capability for mount, add it to the >> docker run command line. >> >> Signed-off-by: Fam Zheng <famz@redhat.com> >> --- >> tests/docker/Makefile.include | 1 + >> tests/docker/run | 12 ++++++++++++ >> 2 files changed, 13 insertions(+) >> >> diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include >> index c5546ee..e9821ba 100644 >> --- a/tests/docker/Makefile.include >> +++ b/tests/docker/Makefile.include >> @@ -107,6 +107,7 @@ docker-run-%: docker-qemu-src >> $(call quiet-command,\ >> $(SRC_PATH)/tests/docker/docker.py run $(if $V,,--rm) \ >> -t \ >> + --cap-add SYS_ADMIN \ >> $(if $(DEBUG),-i,--net=none) \ >> -e TARGET_LIST=$(TARGET_LIST) \ >> -e EXTRA_CONFIGURE_OPTS=$(EXTRA_CONFIGURE_OPTS) \ >> diff --git a/tests/docker/run b/tests/docker/run >> index 38ce789..4e80cc3 100755 >> --- a/tests/docker/run >> +++ b/tests/docker/run >> @@ -19,6 +19,18 @@ fi >> >> BASE="$(dirname $(realpath $0))" >> >> +# cp files into the chroot and execute there >> +if test -n "$QEMU_CHROOT"; then >> + mkdir -p $QEMU_CHROOT/$BASE >> + cp $BASE/* $QEMU_CHROOT/$BASE >> + QEMU_CHROOT_SAVE="$QEMU_CHROOT" >> + for bp in dev sys proc; do >> + mount --bind /$bp $QEMU_CHROOT/$bp > > Can you ask docker to do these bind mounts instead? AFAICT docker's various mount directives are all focused on tasks like mounting data volumes from the host into the container. It's a bit of a shame having to do this as the original approach was to use docker to avoid having fancy bind mounts on my hosts system. We are now getting to inception levels of nesting here. But the benefit is not requiring the host having the pre-requisites to bootstrap the system. That said looking at the debootstrap requirements I've seen instructions that start with download the deb, ar extract and then run the script by hand so maybe this is over complicating things? Is it possible to bootstrap a Fedora rootfs with a similar script? > > Thanks, > > Paolo > >> + done >> + QEMU_CHROOT="" chroot $QEMU_CHROOT_SAVE $BASE/run "$@" >> + exit 0 >> +fi >> + >> # Prepare the environment >> . /etc/profile || true >> export PATH=/usr/lib/ccache:$PATH >> -- Alex Bennée
On 11/07/2016 12:08, Alex Bennée wrote: > > Paolo Bonzini <pbonzini@redhat.com> writes: > >> On 11/07/2016 05:20, Fam Zheng wrote: >>> This allows a docker file to say "ENV QEMU_CHROOT /path/to/new/root" to >>> indicate that the test execution should be done in a chroot in the >>> container. >>> >>> Bind mount dev,sys,proc into QEMU_CHROOT to make them avaiable for >>> testing scripts. >>> >>> The SYS_ADMIN is a required capability for mount, add it to the >>> docker run command line. >>> >>> Signed-off-by: Fam Zheng <famz@redhat.com> >>> --- >>> tests/docker/Makefile.include | 1 + >>> tests/docker/run | 12 ++++++++++++ >>> 2 files changed, 13 insertions(+) >>> >>> diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include >>> index c5546ee..e9821ba 100644 >>> --- a/tests/docker/Makefile.include >>> +++ b/tests/docker/Makefile.include >>> @@ -107,6 +107,7 @@ docker-run-%: docker-qemu-src >>> $(call quiet-command,\ >>> $(SRC_PATH)/tests/docker/docker.py run $(if $V,,--rm) \ >>> -t \ >>> + --cap-add SYS_ADMIN \ >>> $(if $(DEBUG),-i,--net=none) \ >>> -e TARGET_LIST=$(TARGET_LIST) \ >>> -e EXTRA_CONFIGURE_OPTS=$(EXTRA_CONFIGURE_OPTS) \ >>> diff --git a/tests/docker/run b/tests/docker/run >>> index 38ce789..4e80cc3 100755 >>> --- a/tests/docker/run >>> +++ b/tests/docker/run >>> @@ -19,6 +19,18 @@ fi >>> >>> BASE="$(dirname $(realpath $0))" >>> >>> +# cp files into the chroot and execute there >>> +if test -n "$QEMU_CHROOT"; then >>> + mkdir -p $QEMU_CHROOT/$BASE >>> + cp $BASE/* $QEMU_CHROOT/$BASE >>> + QEMU_CHROOT_SAVE="$QEMU_CHROOT" >>> + for bp in dev sys proc; do >>> + mount --bind /$bp $QEMU_CHROOT/$bp >> >> Can you ask docker to do these bind mounts instead? > > AFAICT docker's various mount directives are all focused on tasks like mounting data > volumes from the host into the container. > > It's a bit of a shame having to do this as the original approach was to > use docker to avoid having fancy bind mounts on my hosts system. We are > now getting to inception levels of nesting here. But the benefit is not > requiring the host having the pre-requisites to bootstrap the system. > > That said looking at the debootstrap requirements I've seen instructions > that start with download the deb, ar extract and then run the script by > hand so maybe this is over complicating things? > > Is it possible to bootstrap a Fedora rootfs with a similar script? In theory "yum" is all that you need to bootstrap a Fedora rootfs. Paolo
Fam Zheng <famz@redhat.com> writes: > This allows a docker file to say "ENV QEMU_CHROOT /path/to/new/root" to > indicate that the test execution should be done in a chroot in the > container. > > Bind mount dev,sys,proc into QEMU_CHROOT to make them avaiable for > testing scripts. > > The SYS_ADMIN is a required capability for mount, add it to the > docker run command line. > > Signed-off-by: Fam Zheng <famz@redhat.com> > --- > tests/docker/Makefile.include | 1 + > tests/docker/run | 12 ++++++++++++ > 2 files changed, 13 insertions(+) > > diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include > index c5546ee..e9821ba 100644 > --- a/tests/docker/Makefile.include > +++ b/tests/docker/Makefile.include > @@ -107,6 +107,7 @@ docker-run-%: docker-qemu-src > $(call quiet-command,\ > $(SRC_PATH)/tests/docker/docker.py run $(if $V,,--rm) \ > -t \ > + --cap-add SYS_ADMIN \ > $(if $(DEBUG),-i,--net=none) \ > -e TARGET_LIST=$(TARGET_LIST) \ > -e EXTRA_CONFIGURE_OPTS=$(EXTRA_CONFIGURE_OPTS) \ > diff --git a/tests/docker/run b/tests/docker/run > index 38ce789..4e80cc3 100755 > --- a/tests/docker/run > +++ b/tests/docker/run > @@ -19,6 +19,18 @@ fi > > BASE="$(dirname $(realpath $0))" > > +# cp files into the chroot and execute there > +if test -n "$QEMU_CHROOT"; then > + mkdir -p $QEMU_CHROOT/$BASE > + cp $BASE/* $QEMU_CHROOT/$BASE > + QEMU_CHROOT_SAVE="$QEMU_CHROOT" > + for bp in dev sys proc; do > + mount --bind /$bp $QEMU_CHROOT/$bp So this misses out /dev/pts which is a subdir of dev which leads to messages like: debconf: delaying package configuration, since apt-utils is not installed Fetched 103 kB in 0s (133 kB/s) E: Can not write log (Is /dev/pts mounted?) - posix_openpt (2: No such file or directory) > + done > + QEMU_CHROOT="" chroot $QEMU_CHROOT_SAVE $BASE/run "$@" > + exit 0 > +fi > + > # Prepare the environment > . /etc/profile || true > export PATH=/usr/lib/ccache:$PATH -- Alex Bennée
Fam Zheng <famz@redhat.com> writes: > This allows a docker file to say "ENV QEMU_CHROOT /path/to/new/root" to > indicate that the test execution should be done in a chroot in the > container. > > Bind mount dev,sys,proc into QEMU_CHROOT to make them avaiable for > testing scripts. > > The SYS_ADMIN is a required capability for mount, add it to the > docker run command line. > > Signed-off-by: Fam Zheng <famz@redhat.com> > --- > tests/docker/Makefile.include | 1 + > tests/docker/run | 12 ++++++++++++ > 2 files changed, 13 insertions(+) > > diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include > index c5546ee..e9821ba 100644 > --- a/tests/docker/Makefile.include > +++ b/tests/docker/Makefile.include > @@ -107,6 +107,7 @@ docker-run-%: docker-qemu-src > $(call quiet-command,\ > $(SRC_PATH)/tests/docker/docker.py run $(if $V,,--rm) \ > -t \ > + --cap-add SYS_ADMIN \ > $(if $(DEBUG),-i,--net=none) \ > -e TARGET_LIST=$(TARGET_LIST) \ > -e EXTRA_CONFIGURE_OPTS=$(EXTRA_CONFIGURE_OPTS) \ > diff --git a/tests/docker/run b/tests/docker/run > index 38ce789..4e80cc3 100755 > --- a/tests/docker/run > +++ b/tests/docker/run > @@ -19,6 +19,18 @@ fi > > BASE="$(dirname $(realpath $0))" > > +# cp files into the chroot and execute there > +if test -n "$QEMU_CHROOT"; then > + mkdir -p $QEMU_CHROOT/$BASE > + cp $BASE/* $QEMU_CHROOT/$BASE > + QEMU_CHROOT_SAVE="$QEMU_CHROOT" > + for bp in dev sys proc; do > + mount --bind /$bp $QEMU_CHROOT/$bp > + done > + QEMU_CHROOT="" chroot $QEMU_CHROOT_SAVE $BASE/run "$@" > + exit 0 > +fi > + Running: make docker-test TEST="test-quick" IMAGES="debootstrap-arm" V=1 J=9 Hmm another failure: Image is up to date. /home/alex/lsrc/qemu/qemu.git/tests/docker/docker.py run -t --cap-add SYS_ADMIN --net=none -e TARGET_LIST= -e EXTRA_CONFIGURE_OPTS= -e V=1 -e J=9 -e DEBUG= -e CCACHE_DIR=/var/tmp/ccache -v $(realpath docker-src.2016-07-11-13.16.09.23334):/var/tmp/qemu:z,ro -v $HOME/.cache/qemu-docker-ccache:/var/tmp/ccache:z qemu:debootstrap-arm /var/tmp/qemu/run test-clang; +++ realpath /var/tmp/qemu/run ++ dirname /var/tmp/qemu/run + BASE=/var/tmp/qemu + test -n /debootstrap-arm + mkdir -p /debootstrap-arm//var/tmp/qemu + cp /var/tmp/qemu/dtc.tgz /var/tmp/qemu/pixman.tgz /var/tmp/qemu/qemu.tgz /var/tmp/qemu/run /debootstrap-arm//var/tmp/qemu + QEMU_CHROOT_SAVE=/debootstrap-arm + for bp in dev sys proc + mount --bind /dev /debootstrap-arm/dev mount: mount /dev on /debootstrap-arm/dev failed: Permission denied /home/alex/lsrc/qemu/qemu.git/tests/docker/Makefile.include:102: recipe for target 'docker-run-test-clang@debootstrap-arm' failed make: *** [docker-run-test-clang@debootstrap-arm] Error 32 You have new mail in /var/mail/alex > # Prepare the environment > . /etc/profile || true > export PATH=/usr/lib/ccache:$PATH -- Alex Bennée
diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include index c5546ee..e9821ba 100644 --- a/tests/docker/Makefile.include +++ b/tests/docker/Makefile.include @@ -107,6 +107,7 @@ docker-run-%: docker-qemu-src $(call quiet-command,\ $(SRC_PATH)/tests/docker/docker.py run $(if $V,,--rm) \ -t \ + --cap-add SYS_ADMIN \ $(if $(DEBUG),-i,--net=none) \ -e TARGET_LIST=$(TARGET_LIST) \ -e EXTRA_CONFIGURE_OPTS=$(EXTRA_CONFIGURE_OPTS) \ diff --git a/tests/docker/run b/tests/docker/run index 38ce789..4e80cc3 100755 --- a/tests/docker/run +++ b/tests/docker/run @@ -19,6 +19,18 @@ fi BASE="$(dirname $(realpath $0))" +# cp files into the chroot and execute there +if test -n "$QEMU_CHROOT"; then + mkdir -p $QEMU_CHROOT/$BASE + cp $BASE/* $QEMU_CHROOT/$BASE + QEMU_CHROOT_SAVE="$QEMU_CHROOT" + for bp in dev sys proc; do + mount --bind /$bp $QEMU_CHROOT/$bp + done + QEMU_CHROOT="" chroot $QEMU_CHROOT_SAVE $BASE/run "$@" + exit 0 +fi + # Prepare the environment . /etc/profile || true export PATH=/usr/lib/ccache:$PATH
This allows a docker file to say "ENV QEMU_CHROOT /path/to/new/root" to indicate that the test execution should be done in a chroot in the container. Bind mount dev,sys,proc into QEMU_CHROOT to make them avaiable for testing scripts. The SYS_ADMIN is a required capability for mount, add it to the docker run command line. Signed-off-by: Fam Zheng <famz@redhat.com> --- tests/docker/Makefile.include | 1 + tests/docker/run | 12 ++++++++++++ 2 files changed, 13 insertions(+)