* [xfstests-bld PATCH] gen-image: fix running in a foreign build chroot
@ 2018-04-04 0:14 Eric Biggers
2018-04-16 22:08 ` Eric Biggers
0 siblings, 1 reply; 3+ messages in thread
From: Eric Biggers @ 2018-04-04 0:14 UTC (permalink / raw)
To: Theodore Ts'o; +Cc: fstests, Eric Biggers
Building an android-xfstests test appliance on x86_64 with the
documented command (e.g. './do-all --chroot=stretch-arm64 --out-tar') no
longer works. The problem is that when the gen-image script is run in a
foreign build chroot, it incorrectly considers the root_fs's chroot to
be a "native" chroot and doesn't copy the needed /usr/bin/qemu-*-static
binary into it. This is because both 'uname -m' and 'dpkg
--print-architecture' will return the same architecture (the foreign
one), so is_native_chroot() returns true.
This did used to work, but I think it stopped working with 5c76a88c0e57
("test-appliance: improve image generation for chroot tar files")
because previously it was using 'fakechroot' which doesn't actually
change the real root directory, so the /usr/bin directory stayed the
same from the kernel's perspective. But now it uses real chroot.
Fix this by detecting a foreign build chroot by instead mounting
binfmt_misc and checking whether there is an entry for qemu-$(uname -m).
Signed-off-by: Eric Biggers <ebiggers@google.com>
---
kvm-xfstests/test-appliance/gen-image | 58 +++++++++++++++------------
1 file changed, 32 insertions(+), 26 deletions(-)
diff --git a/kvm-xfstests/test-appliance/gen-image b/kvm-xfstests/test-appliance/gen-image
index bba7e88..8d4bebb 100755
--- a/kvm-xfstests/test-appliance/gen-image
+++ b/kvm-xfstests/test-appliance/gen-image
@@ -8,7 +8,6 @@ SUITE=stretch
MIRROR=http://mirrors.kernel.org/debian
DIR=$(pwd)
ROOTDIR=$DIR/rootdir
-#ARCH="--arch=i386"
RAW_ROOT_FS=$DIR/root_fs.raw
ROOT_FS=$DIR/root_fs.img
COMPAT="-o compat=0.10"
@@ -21,18 +20,6 @@ if test -r config.custom ; then
. $(pwd)/config.custom
fi
-is_native_chroot()
-{
- DEBIAN_ARCH="$(dpkg --print-architecture)"
- case "$(uname -m)" in
- x86_64) [[ $DEBIAN_ARCH = amd64 || $DEBIAN_ARCH = i386 ]] ;;
- aarch64) [[ $DEBIAN_ARCH = arm64 || $DEBIAN_ARCH = armhf ]] ;;
- arm) [[ $DEBIAN_ARCH = armhf ]] ;;
- ppc64le) [[ $DEBIAN_ARCH = ppc64el ]] ;;
- *) [[ $DEBIAN_ARCH = "$(uname -m)" ]] ;;
- esac
-}
-
while [ "$1" != "" ]; do
case $1 in
--save_raw_root)
@@ -215,20 +202,39 @@ if test $DO_UPDATE = "yes" ; then
exit 0
fi
-if ! is_native_chroot ; then
- case "$DEBIAN_ARCH" in
- armhf) QEMU=/usr/bin/qemu-arm-static ;;
- arm64) QEMU=/usr/bin/qemu-aarch64-static ;;
- ppc64el) QEMU=/usr/bin/qemu-ppc64le-static ;;
- *) QEMU="/usr/bin/qemu-$DEBIAN_ARCH-static" ;;
- esac
- if ! test -x $QEMU ; then
- echo "Can't find qemu interpreter for non-native gen-image"
-# cleanup_on_abort
-# exit 1
+detect_foreign_chroot()
+{
+ local BINFMT_MISC_MNT=/proc/sys/fs/binfmt_misc
+
+ if [ ! -d "$BINFMT_MISC_MNT" ]; then
+ # binfmt_misc disabled in kernel
+ return
+ fi
+
+ if ! mountpoint "$BINFMT_MISC_MNT" &>/dev/null; then
+ mount binfmt_misc -t binfmt_misc "$BINFMT_MISC_MNT"
+ trap "umount \"$BINFMT_MISC_MNT\"" EXIT
fi
+
+ if [ "$(<"$BINFMT_MISC_MNT/status")" = "disabled" ]; then
+ return
+ fi
+
+ local binfmt="qemu-$(uname -m)"
+ local binfmt_file="$BINFMT_MISC_MNT/$binfmt"
+
+ if [ ! -e "$binfmt_file" ]; then
+ return
+ fi
+
+ QEMU="$(awk '/^interpreter/{print $2}' "$binfmt_file")"
FOREIGN="--foreign"
-fi
+ echo "Detected foreign chroot, using user-mode emulation with $QEMU"
+}
+
+QEMU=
+FOREIGN=
+detect_foreign_chroot
mkdir -p var.cache.apt.archives
mkdir -p var.lib.apt.lists
@@ -255,7 +261,7 @@ else
export FAKECHROOT_CMD_SUBST=/usr/bin/chfn=/bin/true
fi
trap cleanup_on_abort INT TERM
-debootstrap --variant=minbase --include=$PACKAGES $EXCLUDE $ARCH \
+debootstrap --variant=minbase --include=$PACKAGES $EXCLUDE \
$FOREIGN $SUITE $ROOTDIR $MIRROR $DIR/debootstrap.script
if test $? -ne 0 ; then
echo "Deboostrap failed, aborting."
--
2.17.0.484.g0c8726318c-goog
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [xfstests-bld PATCH] gen-image: fix running in a foreign build chroot
2018-04-04 0:14 [xfstests-bld PATCH] gen-image: fix running in a foreign build chroot Eric Biggers
@ 2018-04-16 22:08 ` Eric Biggers
2018-04-17 16:09 ` Theodore Y. Ts'o
0 siblings, 1 reply; 3+ messages in thread
From: Eric Biggers @ 2018-04-16 22:08 UTC (permalink / raw)
To: Theodore Ts'o; +Cc: Eric Biggers, fstests
On Tue, Apr 03, 2018 at 05:14:21PM -0700, Eric Biggers wrote:
> Building an android-xfstests test appliance on x86_64 with the
> documented command (e.g. './do-all --chroot=stretch-arm64 --out-tar') no
> longer works. The problem is that when the gen-image script is run in a
> foreign build chroot, it incorrectly considers the root_fs's chroot to
> be a "native" chroot and doesn't copy the needed /usr/bin/qemu-*-static
> binary into it. This is because both 'uname -m' and 'dpkg
> --print-architecture' will return the same architecture (the foreign
> one), so is_native_chroot() returns true.
>
> This did used to work, but I think it stopped working with 5c76a88c0e57
> ("test-appliance: improve image generation for chroot tar files")
> because previously it was using 'fakechroot' which doesn't actually
> change the real root directory, so the /usr/bin directory stayed the
> same from the kernel's perspective. But now it uses real chroot.
>
> Fix this by detecting a foreign build chroot by instead mounting
> binfmt_misc and checking whether there is an entry for qemu-$(uname -m).
>
> Signed-off-by: Eric Biggers <ebiggers@google.com>
> ---
> kvm-xfstests/test-appliance/gen-image | 58 +++++++++++++++------------
> 1 file changed, 32 insertions(+), 26 deletions(-)
>
Ping.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [xfstests-bld PATCH] gen-image: fix running in a foreign build chroot
2018-04-16 22:08 ` Eric Biggers
@ 2018-04-17 16:09 ` Theodore Y. Ts'o
0 siblings, 0 replies; 3+ messages in thread
From: Theodore Y. Ts'o @ 2018-04-17 16:09 UTC (permalink / raw)
To: Eric Biggers; +Cc: Eric Biggers, fstests
Applied and pushed out, thanks.
- Ted
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-04-17 16:09 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-04-04 0:14 [xfstests-bld PATCH] gen-image: fix running in a foreign build chroot Eric Biggers
2018-04-16 22:08 ` Eric Biggers
2018-04-17 16:09 ` Theodore Y. Ts'o
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox