From a5dc5f8663a3a014c1d8dc582b77534644d78cb9 Mon Sep 17 00:00:00 2001 From: Harald Seiler Date: Wed, 3 Jun 2020 11:45:02 +0200 Subject: [PATCH] kas-docker: Add support for podman On many modern Linux systems, docker no longer works because they only have cgroups v2 support. To use kas in a container on these systems, one can resort to using podman. Add support for this alternative docker engine to kas-docker. Now, kas-docker searches for the first available engine in "docker, podman" or, if the KAS_DOCKER_ENGINE environment variable is set, will force the specified engine. Signed-off-by: Harald Seiler Signed-off-by: Jan Kiszka --- kas-docker | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/kas-docker b/kas-docker index 30c84ad..3cf951a 100755 --- a/kas-docker +++ b/kas-docker @@ -50,6 +50,9 @@ usage() printf "%b" "--aws-dir\t\tDirectory containing AWScli configuration.\n" printf "%b" "--no-proxy-from-env\tDo not inherit proxy settings from " \ "environment.\n" + printf "%b" "\n" + printf "%b" "You can force the use of podman over docker using " \ + "KAS_DOCKER_ENGINE=podman.\n" exit 1 } @@ -71,12 +74,43 @@ else KAS_WORK_DIR="$(pwd)" fi +if [ -z "${KAS_DOCKER_ENGINE}" ]; then + # Try to auto-detect a docker engine + if command -v docker >/dev/null; then + KAS_DOCKER_ENGINE=docker + elif command -v podman >/dev/null; then + KAS_DOCKER_ENGINE=podman + else + echo "$0: no docker engine found, need docker or podman" >&2 + exit 1 + fi +fi + +case "${KAS_DOCKER_ENGINE}" in +docker) + DOCKER_COMMAND="docker" + ;; +podman) + DOCKER_COMMAND="podman" + DOCKER_IMAGE="docker://${DOCKER_IMAGE}" + ;; +*) + echo "$0: unknown docker engine '${KAS_DOCKER_ENGINE}'" >&2 + exit 1 + ;; +esac + # parse kas-docker options while [ $# -gt 0 ]; do case "$1" in --isar) - DOCKER_IMAGE=kasproject/kas-isar:${KAS_IMAGE_VERSION} + DOCKER_IMAGE="${DOCKER_IMAGE/kasproject\/kas/kasproject\/kas-isar}" ISAR_ARGS="--cap-add=SYS_ADMIN --cap-add=MKNOD --privileged" + + # sudo is needed for a privileged podman container + if [ "${KAS_DOCKER_ENGINE}" = "podman" ]; then + DOCKER_COMMAND="sudo ${DOCKER_COMMAND}" + fi shift 1 ;; --with-loop-dev) @@ -130,7 +164,7 @@ while [ $# -gt 0 ]; do [ $# -eq 1 ] || usage CLEAN_DIR=build/tmp if [ -n "${ISAR_ARGS}" ]; then - trace docker run -v "${KAS_WORK_DIR}":/work:rw \ + trace ${DOCKER_COMMAND} run -v "${KAS_WORK_DIR}":/work:rw \ --workdir=/work --rm ${ISAR_ARGS} \ ${DOCKER_IMAGE} \ sudo rm -rf ${CLEAN_DIR} @@ -156,7 +190,7 @@ done while [ $# -gt 0 ]; do case "$1" in -h|--help) - trace docker run ${DOCKER_IMAGE} ${CMD} --help + trace ${DOCKER_COMMAND} run ${DOCKER_IMAGE} ${CMD} --help exit 0 ;; --skip|--target|--task|-c|--cmd|--command) @@ -280,6 +314,6 @@ if [ -z "${NO_PROXY_FROM_ENV+x}" ]; then done fi -trace docker run "$@" ${ISAR_ARGS} ${WITH_LOOP_DEV} ${USER_ARGS} \ +trace ${DOCKER_COMMAND} run "$@" ${ISAR_ARGS} ${WITH_LOOP_DEV} ${USER_ARGS} \ ${DOCKER_IMAGE} ${CMD} ${KAS_OPTIONS} ${KAS_FILES} \ ${KAS_EXTRA_BITBAKE_ARGS}