From fbf4fa1091046fd58f60281134d904e2fb377752 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Tue, 10 Feb 2026 16:35:53 +0000 Subject: [PATCH] tests/docker: improve handling of docker probes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The docker.py script has logic to guess the container command and detects one of * docker * sudo -n docker * podman but the "docker.py probe" command then throws away the detected argv and prints a slightly different argv based solely on the detected argv[0]. The result is that 'probe' will print * docker * sudo docker * podman which means that if sudo was detected & the result of 'probe' were used directly, it would end up prompting for password interaction every time. The 'configure' script, however, runs 'probe' and then throws away the printed argv again, reporting only 'podman' or 'docker', which is used to set the $(RUNC) variable for tests/docker/Makefile.include which is in turn used to pass --engine to docker.py. So the docker.py command will re-detect the need for 'sudo -n' and use it correctly The problem with this is that some commands in Makefile.include do not call docker.py at all, they invoke $(RUNC) directly. Since configure threw away the 'sudo' command prefix Makefile.in won't be adding either 'sudo' or 'sudo -n', it'll just run plain 'docker' which is wrong. This commit sanitizes things so that the 'docker.py probe' prints out the exact detected ARGV, and configure fully preserves this ARGV when setting $(RUNC). Since "$(RUNC)" is no longer just a bare engine name, however, we must now also set the $(CONTAINER_ENGINE) variable for Makefile.include so it can pass something sane to the --engine arg for docker.py Reviewed-by: Thomas Huth Signed-off-by: Daniel P. Berrangé Message-ID: <20260210163556.713841-2-berrange@redhat.com> Signed-off-by: Thomas Huth --- configure | 19 +++++++------------ tests/docker/Makefile.include | 5 +++-- tests/docker/docker.py | 7 +------ 3 files changed, 11 insertions(+), 20 deletions(-) diff --git a/configure b/configure index 5e114acea2..b99ba65d71 100755 --- a/configure +++ b/configure @@ -1319,17 +1319,11 @@ fi ########################################## # functions to probe cross compilers -container="no" -runc="" +runc="no" if test $use_containers = "yes" && (has "docker" || has "podman"); then - case $($python "$source_path"/tests/docker/docker.py --engine "$container_engine" probe) in - *docker) container=docker ;; - podman) container=podman ;; - no) container=no ;; - esac - if test "$container" != "no"; then - docker_py="$python $source_path/tests/docker/docker.py --engine $container" - runc=$container + runc=$($python "$source_path"/tests/docker/docker.py --engine "$container_engine" probe) + if test "$runc" != "no"; then + docker_py="$python $source_path/tests/docker/docker.py --engine $container_engine" fi fi @@ -1449,7 +1443,7 @@ probe_target_compiler() { esac for host in $container_hosts; do - test "$container" != no || continue + test "$runc" != no || continue test "$host" = "$cpu" || continue case $target_arch in # debian-all-test-cross architectures @@ -1771,8 +1765,9 @@ echo all: >> $config_host_mak echo "SRC_PATH=$source_path" >> $config_host_mak echo "TARGET_DIRS=$target_list" >> $config_host_mak echo "GDB=$gdb_bin" >> $config_host_mak -if test "$container" != no; then +if test "$runc" != no; then echo "RUNC=$runc" >> $config_host_mak + echo "CONTAINER_ENGINE=$container_engine" >> $config_host_mak fi echo "SUBDIRS=$subdirs" >> $config_host_mak if test "$rust" != disabled; then diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include index 38467cca61..7d4582b6a8 100644 --- a/tests/docker/Makefile.include +++ b/tests/docker/Makefile.include @@ -16,8 +16,9 @@ DOCKER_DEFAULT_REGISTRY := registry.gitlab.com/qemu-project/qemu endif DOCKER_REGISTRY := $(if $(REGISTRY),$(REGISTRY),$(DOCKER_DEFAULT_REGISTRY)) -RUNC ?= $(if $(shell command -v docker), docker, podman) -DOCKER_SCRIPT=$(SRC_PATH)/tests/docker/docker.py --engine $(RUNC) +CONTAINER_ENGINE = auto +DOCKER_SCRIPT=$(SRC_PATH)/tests/docker/docker.py --engine $(CONTAINER_ENGINE) +RUNC ?= $(shell $(DOCKER_SCRIPT) probe) CUR_TIME := $(shell date +%Y-%m-%d-%H.%M.%S.$$$$) DOCKER_SRC_COPY := $(BUILD_DIR)/docker-src.$(CUR_TIME) diff --git a/tests/docker/docker.py b/tests/docker/docker.py index 3b8a26704d..ff68c7bf6f 100755 --- a/tests/docker/docker.py +++ b/tests/docker/docker.py @@ -618,12 +618,7 @@ class ProbeCommand(SubCommand): def run(self, args, argv): try: docker = Docker() - if docker._command[0] == "docker": - print("docker") - elif docker._command[0] == "sudo": - print("sudo docker") - elif docker._command[0] == "podman": - print("podman") + print(" ".join(docker._command)) except Exception: print("no")