Allow to specify the container engine to run with ENGINE variable. By default, ENGINE=auto and will select either podman or docker.
With current podman, we have to use a uidmap trick in order to be able to rw-share the ccache directory with the container user. With a user 1000, the default mapping is: 1000 (host) -> 0 (container). So write access to /var/tmp/ccache ends will end with permission denied error. With "--uidmap 1000:0:1 --uidmap 0:1:1000", the mapping is: 1000 (host) -> 0 (container, 1st namespace) -> 1000 (container, 2nd namespace). (the rest is mumbo jumbo to avoid holes in the range of UIDs) A future podman version may have an option such as --userns-keep-uid. Thanks to Debarshi Ray for the help! Cc: Debarshi Ray <ri...@redhat.com> Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- Makefile | 2 +- tests/docker/Makefile.include | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index e02b88bcb1..e3a150ac4c 100644 --- a/Makefile +++ b/Makefile @@ -1118,7 +1118,7 @@ endif @echo '' @echo 'Test targets:' @echo ' check - Run all tests (check-help for details)' - @echo ' docker - Help about targets running tests inside Docker containers' + @echo ' docker - Help about targets running tests inside containers' @echo ' vm-test - Help about targets running tests inside VM' @echo '' @echo 'Documentation targets:' diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include index c0e1bf57a3..2bf679767e 100644 --- a/tests/docker/Makefile.include +++ b/tests/docker/Makefile.include @@ -17,7 +17,9 @@ DOCKER_TESTS := $(notdir $(shell \ DOCKER_TOOLS := travis -DOCKER_SCRIPT=$(SRC_PATH)/tests/docker/docker.py +ENGINE := auto + +DOCKER_SCRIPT=$(SRC_PATH)/tests/docker/docker.py --engine $(ENGINE) TESTS ?= % IMAGES ?= % @@ -145,7 +147,7 @@ $(foreach i,$(filter-out $(DOCKER_PARTIAL_IMAGES),$(DOCKER_IMAGES) $(DOCKER_DEPR ) docker: - @echo 'Build QEMU and run tests inside Docker containers' + @echo 'Build QEMU and run tests inside Docker or Podman containers' @echo @echo 'Available targets:' @echo @@ -192,6 +194,14 @@ endif @echo ' EXECUTABLE=<path> Include executable in image.' @echo ' EXTRA_FILES="<path> [... <path>]"' @echo ' Include extra files in image.' + @echo ' ENGINE=auto/docker/podman' + @echo ' Specify which container engine to run.' + +UID=$(shell id -u) +UID1=$(shell expr $(UID) + 1) +ifeq ($(shell $(DOCKER_SCRIPT) probe),podman) +PODMAN=1 +endif # This rule if for directly running against an arbitrary docker target. # It is called by the expanded docker targets (e.g. make @@ -211,7 +221,8 @@ docker-run: docker-qemu-src " COPYING $(EXECUTABLE) to $(IMAGE)")) $(call quiet-command, \ $(DOCKER_SCRIPT) run \ - $(if $(NOUSER),,-u $(shell id -u)) \ + $(if $(NOUSER),,-u $(UID) \ + $(if $(PODMAN),--uidmap $(UID):0:1 --uidmap 0:1:$(UID) --uidmap $(UID1):$(UID1):64536)) \ --security-opt seccomp=unconfined \ $(if $V,,--rm) \ $(if $(DEBUG),-ti,) \ -- 2.22.0.rc1.1.g079e7d2849.dirty