mirror of https://github.com/xemu-project/xemu.git
tests/docker: fix "cc" command to work with podman
Podman requires a little bit of additional magic to the uid mapping which was already done for the normal RunCommand. We simplify the logic by pushing it directly into the Docker::run method to avoid instantiating an extra Docker() object and ensure the CC command always runs as the current user. Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
This commit is contained in:
parent
63772d5cfd
commit
71ebbe09e9
|
@ -318,10 +318,18 @@ class Docker(object):
|
||||||
return False
|
return False
|
||||||
return checksum == _text_checksum(_dockerfile_preprocess(dockerfile))
|
return checksum == _text_checksum(_dockerfile_preprocess(dockerfile))
|
||||||
|
|
||||||
def run(self, cmd, keep, quiet):
|
def run(self, cmd, keep, quiet, as_user=False):
|
||||||
label = uuid.uuid1().hex
|
label = uuid.uuid1().hex
|
||||||
if not keep:
|
if not keep:
|
||||||
self._instances.append(label)
|
self._instances.append(label)
|
||||||
|
|
||||||
|
if as_user:
|
||||||
|
uid = os.getuid()
|
||||||
|
cmd = [ "-u", str(uid) ] + cmd
|
||||||
|
# podman requires a bit more fiddling
|
||||||
|
if self._command[0] == "podman":
|
||||||
|
argv.insert(0, '--userns=keep-id')
|
||||||
|
|
||||||
ret = self._do_check(["run", "--label",
|
ret = self._do_check(["run", "--label",
|
||||||
"com.qemu.instance.uuid=" + label] + cmd,
|
"com.qemu.instance.uuid=" + label] + cmd,
|
||||||
quiet=quiet)
|
quiet=quiet)
|
||||||
|
@ -364,13 +372,8 @@ class RunCommand(SubCommand):
|
||||||
help="Run container using the current user's uid")
|
help="Run container using the current user's uid")
|
||||||
|
|
||||||
def run(self, args, argv):
|
def run(self, args, argv):
|
||||||
if args.run_as_current_user:
|
return Docker().run(argv, args.keep, quiet=args.quiet,
|
||||||
uid = os.getuid()
|
as_user=args.run_as_current_user)
|
||||||
argv = [ "-u", str(uid) ] + argv
|
|
||||||
docker = Docker()
|
|
||||||
if docker._command[0] == "podman":
|
|
||||||
argv.insert(0, '--userns=keep-id')
|
|
||||||
return Docker().run(argv, args.keep, quiet=args.quiet)
|
|
||||||
|
|
||||||
|
|
||||||
class BuildCommand(SubCommand):
|
class BuildCommand(SubCommand):
|
||||||
|
@ -554,8 +557,6 @@ class CcCommand(SubCommand):
|
||||||
help="The docker image in which to run cc")
|
help="The docker image in which to run cc")
|
||||||
parser.add_argument("--cc", default="cc",
|
parser.add_argument("--cc", default="cc",
|
||||||
help="The compiler executable to call")
|
help="The compiler executable to call")
|
||||||
parser.add_argument("--user",
|
|
||||||
help="The user-id to run under")
|
|
||||||
parser.add_argument("--source-path", "-s", nargs="*", dest="paths",
|
parser.add_argument("--source-path", "-s", nargs="*", dest="paths",
|
||||||
help="""Extra paths to (ro) mount into container for
|
help="""Extra paths to (ro) mount into container for
|
||||||
reading sources""")
|
reading sources""")
|
||||||
|
@ -569,11 +570,10 @@ class CcCommand(SubCommand):
|
||||||
if args.paths:
|
if args.paths:
|
||||||
for p in args.paths:
|
for p in args.paths:
|
||||||
cmd += ["-v", "%s:%s:ro,z" % (p, p)]
|
cmd += ["-v", "%s:%s:ro,z" % (p, p)]
|
||||||
if args.user:
|
|
||||||
cmd += ["-u", args.user]
|
|
||||||
cmd += [args.image, args.cc]
|
cmd += [args.image, args.cc]
|
||||||
cmd += argv
|
cmd += argv
|
||||||
return Docker().command("run", cmd, args.quiet)
|
return Docker().run(cmd, False, quiet=args.quiet,
|
||||||
|
as_user=True)
|
||||||
|
|
||||||
|
|
||||||
class CheckCommand(SubCommand):
|
class CheckCommand(SubCommand):
|
||||||
|
|
|
@ -41,7 +41,7 @@ ifneq ($(DOCKER_IMAGE),)
|
||||||
# We also need the Docker make rules to depend on
|
# We also need the Docker make rules to depend on
|
||||||
include $(SRC_PATH)/tests/docker/Makefile.include
|
include $(SRC_PATH)/tests/docker/Makefile.include
|
||||||
|
|
||||||
DOCKER_COMPILE_CMD="$(DOCKER_SCRIPT) cc --user $(shell id -u) \
|
DOCKER_COMPILE_CMD="$(DOCKER_SCRIPT) cc \
|
||||||
--cc $(DOCKER_CROSS_COMPILER) \
|
--cc $(DOCKER_CROSS_COMPILER) \
|
||||||
-i qemu:$(DOCKER_IMAGE) \
|
-i qemu:$(DOCKER_IMAGE) \
|
||||||
-s $(SRC_PATH) -- "
|
-s $(SRC_PATH) -- "
|
||||||
|
|
Loading…
Reference in New Issue