tests: make docker.py update use configured binfmt path

When copying a QEMU binary into a linux-user docker image we should
check what the current configured binfmt_misc path is rather than
just assuming "/usr/bin/qemu-bin". Obviously if the user changes the
configuration afterwards they will break their images again.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
This commit is contained in:
Alex Bennée 2019-01-15 14:28:39 +00:00
parent d6db2a1cdf
commit 7e81d19840
1 changed files with 15 additions and 10 deletions

View File

@ -123,17 +123,17 @@ def _check_binfmt_misc(executable):
if not os.path.exists(binfmt_entry): if not os.path.exists(binfmt_entry):
print ("No binfmt_misc entry for %s" % (binary)) print ("No binfmt_misc entry for %s" % (binary))
return False return None
with open(binfmt_entry) as x: entry = x.read() with open(binfmt_entry) as x: entry = x.read()
qpath = "/usr/bin/%s" % (binary) m = re.search("interpreter (\S+)\n", entry)
if not re.search("interpreter %s\n" % (qpath), entry): interp = m.group(1)
print ("binfmt_misc for %s does not point to %s" % (binary, qpath)) if interp and interp != executable:
return False print("binfmt_misc for %s does not point to %s, using %s" %
(binary, executable, interp))
return True
return interp
def _read_qemu_dockerfile(img_name): def _read_qemu_dockerfile(img_name):
# special case for Debian linux-user images # special case for Debian linux-user images
@ -394,9 +394,14 @@ def run(self, args, argv):
tmp = tempfile.NamedTemporaryFile(suffix="dckr.tar.gz") tmp = tempfile.NamedTemporaryFile(suffix="dckr.tar.gz")
tmp_tar = TarFile(fileobj=tmp, mode='w') tmp_tar = TarFile(fileobj=tmp, mode='w')
# Add the executable to the tarball # Add the executable to the tarball, using the current
bn = os.path.basename(args.executable) # configured binfmt_misc path.
ff = "/usr/bin/%s" % bn 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) tmp_tar.add(args.executable, arcname=ff)
# Add any associated libraries # Add any associated libraries