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