From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: qemu-arm@nongnu.org, "Alex Bennée" <alex.bennee@linaro.org>
Subject: [Qemu-devel] [PATCH v2 10/16] tests: docker.py be even smarter with persistent binfmt_misc
Date: Thu, 7 Feb 2019 18:37:38 +0000 [thread overview]
Message-ID: <20190207183744.5054-11-alex.bennee@linaro.org> (raw)
In-Reply-To: <20190207183744.5054-1-alex.bennee@linaro.org>
If we have a persistent mapping we don't need the QEMU binary copied
into the container as the kernel has already opened the file and will
pass the fd in. However the support libraries will still need to be
there.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/docker/docker.py | 56 ++++++++++++++++++++++++++++--------------
1 file changed, 38 insertions(+), 18 deletions(-)
diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index 768728785f..a74338cb61 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -96,13 +96,22 @@ def _get_so_libs(executable):
return libs
-def _copy_binary_with_libs(src, dest_dir):
- """Copy a binary executable and all its dependent libraries.
+def _copy_binary_with_libs(src, bin_dest, dest_dir):
+ """Maybe copy a binary and all its dependent libraries.
+
+ If bin_dest isn't set we only copy the support libraries because
+ we don't need qemu in the docker path to run (due to persistent
+ mapping). Indeed users may get confused if we aren't running what
+ is in the image.
This does rely on the host file-system being fairly multi-arch
- aware so the file don't clash with the guests layout."""
+ aware so the file don't clash with the guests layout.
+ """
- _copy_with_mkdir(src, dest_dir, "/usr/bin")
+ if bin_dest:
+ _copy_with_mkdir(src, dest_dir, os.path.dirname(bin_dest))
+ else:
+ print("only copying support libraries for %s" % (src))
libs = _get_so_libs(src)
if libs:
@@ -116,21 +125,26 @@ def _check_binfmt_misc(executable):
The details of setting up binfmt_misc are outside the scope of
this script but we should at least fail early with a useful
- message if it won't work."""
+ message if it won't work.
+
+ Returns the configured binfmt path and a valid flag. For
+ persistent configurations we will still want to copy and dependent
+ libraries.
+ """
binary = os.path.basename(executable)
binfmt_entry = "/proc/sys/fs/binfmt_misc/%s" % (binary)
if not os.path.exists(binfmt_entry):
print ("No binfmt_misc entry for %s" % (binary))
- return None
+ return None, False
with open(binfmt_entry) as x: entry = x.read()
if re.search("flags:.*F.*\n", entry):
print("binfmt_misc for %s uses persistent(F) mapping to host binary\n" %
(binary))
- return None
+ return None, True
m = re.search("interpreter (\S+)\n", entry)
interp = m.group(1)
@@ -138,7 +152,8 @@ def _check_binfmt_misc(executable):
print("binfmt_misc for %s does not point to %s, using %s" %
(binary, executable, interp))
- return interp
+ return interp, True
+
def _read_qemu_dockerfile(img_name):
# special case for Debian linux-user images
@@ -345,7 +360,8 @@ class BuildCommand(SubCommand):
# Validate binfmt_misc will work
if args.include_executable:
- if not _check_binfmt_misc(args.include_executable):
+ qpath, enabled = _check_binfmt_misc(args.include_executable)
+ if not enabled:
return 1
# Is there a .pre file to run in the build context?
@@ -368,7 +384,9 @@ class BuildCommand(SubCommand):
# FIXME: there is no checksum of this executable and the linked
# libraries, once the image built any change of this executable
# or any library won't trigger another build.
- _copy_binary_with_libs(args.include_executable, docker_dir)
+ _copy_binary_with_libs(args.include_executable,
+ qpath, docker_dir)
+
for filename in args.extra_files or []:
_copy_with_mkdir(filename, docker_dir)
cksum += [(filename, _file_checksum(filename))]
@@ -400,14 +418,16 @@ class UpdateCommand(SubCommand):
tmp_tar = TarFile(fileobj=tmp, mode='w')
# Add the executable to the tarball, using the current
- # configured binfmt_misc path.
- ff = _check_binfmt_misc(args.executable)
- if not ff:
- bn = os.path.basename(args.executable)
- ff = "/usr/bin/%s" % bn
- print ("No binfmt_misc configured: copied to %s" % (ff))
-
- tmp_tar.add(args.executable, arcname=ff)
+ # configured binfmt_misc path. If we don't get a path then we
+ # only need the support libraries copied
+ ff, enabled = _check_binfmt_misc(args.executable)
+
+ if not enabled:
+ print("binfmt_misc not enabled, update disabled")
+ return 1
+
+ if ff:
+ tmp_tar.add(args.executable, arcname=ff)
# Add any associated libraries
libs = _get_so_libs(args.executable)
--
2.20.1
next prev parent reply other threads:[~2019-02-07 18:38 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-07 18:37 [Qemu-devel] [PATCH v2 00/16] current testing/next queue (with build fixes) Alex Bennée
2019-02-07 18:37 ` [Qemu-devel] [PATCH v2 01/16] .cirrus.yml: basic compile and test for FreeBSD Alex Bennée
2019-02-07 18:37 ` [Qemu-devel] [PATCH v2 02/16] .travis.yml: stop requesting libffi & gettext from homebrew Alex Bennée
2019-02-07 18:37 ` [Qemu-devel] [PATCH v2 03/16] .travis.yml: separate tools and docs into another entry Alex Bennée
2019-02-07 18:37 ` [Qemu-devel] [PATCH v2 04/16] .travis.yml: fold --disable-tcg into alternate coroutine builds Alex Bennée
2019-02-07 18:37 ` [Qemu-devel] [PATCH v2 05/16] MAINTAINERS: Add an entry for scripts/archive-source.sh Alex Bennée
2019-02-07 18:37 ` [Qemu-devel] [PATCH v2 06/16] archive-source.sh: Clone the submodules locally Alex Bennée
2019-02-07 18:37 ` [Qemu-devel] [PATCH v2 07/16] docker: add debian-buster-arm64-cross Alex Bennée
2019-02-07 18:37 ` [Qemu-devel] [PATCH v2 08/16] tests: make docker.py update use configured binfmt path Alex Bennée
2019-02-07 18:37 ` [Qemu-devel] [PATCH v2 09/16] tests: make docker.py check for persistent configs Alex Bennée
2019-02-07 18:37 ` Alex Bennée [this message]
2019-02-07 18:37 ` [Qemu-devel] [PATCH v2 11/16] tests: PEP8 cleanup of docker.py, mostly white space Alex Bennée
2019-02-07 18:37 ` [Qemu-devel] [PATCH v2 12/16] tests/vm: move images to $HOME/.cache/qemu-vm/images Alex Bennée
2019-02-07 18:37 ` [Qemu-devel] [PATCH v2 13/16] tests/vm: call make check directly for netbsd/freebsd/ubuntu.i386 Alex Bennée
2019-02-07 18:37 ` [Qemu-devel] [PATCH v2 14/16] tests/vm: add --build-target option Alex Bennée
2019-02-07 18:37 ` [Qemu-devel] [PATCH v2 15/16] tests/vm: expose BUILD_TARGET, TARGET_LIST and EXTRA_CONFIGURE_OPTS Alex Bennée
2019-02-07 18:37 ` [Qemu-devel] [PATCH v2 16/16] scripts/qemu.py: allow arches use KVM for their 32bit cousins Alex Bennée
2019-02-07 22:01 ` [Qemu-devel] [PATCH v2 00/16] current testing/next queue (with build fixes) Philippe Mathieu-Daudé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190207183744.5054-11-alex.bennee@linaro.org \
--to=alex.bennee@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).