From 647e4d05258c4a2eaa52d82a80e9de8b6d620f98 Mon Sep 17 00:00:00 2001 From: Anthony Delannoy Date: Fri, 7 Oct 2022 17:22:16 +0200 Subject: [PATCH] toolbox: add support for ctr usage Toolbox version using docker as principal CRI but with ctr fallback for containerd systems running without docker. Use debian:unstable-slim image as default. --- toolbox | 52 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/toolbox b/toolbox index 2d8e6d4..7c5fb7d 100755 --- a/toolbox +++ b/toolbox @@ -6,19 +6,29 @@ set -o pipefail machine=$(uname -m) case ${machine} in - aarch64 ) - TOOLBOX_DOCKER_IMAGE=arm64v8/fedora - TOOLBOX_DOCKER_TAG=latest + arm) + PLATFORM=linux/arm ;; - x86_64 ) - TOOLBOX_DOCKER_IMAGE=fedora - TOOLBOX_DOCKER_TAG=latest + aarch64) + PLATFORM=linux/arm64 ;; - * ) + riscv64) + PLATFORM=linux/riscv64 + ;; + x86) + PLATFORM=linux/386 + ;; + x86_64) + PLATFORM=linux/amd64 + ;; + *) echo "Warning: Unknown machine type ${machine}" >&2 + exit 1 ;; esac +TOOLBOX_DOCKER_IMAGE=docker.io/library/fedora +TOOLBOX_DOCKER_TAG=latest TOOLBOX_USER=root TOOLBOX_DIRECTORY="/var/lib/toolbox" TOOLBOX_BIND="--bind=/:/media/root --bind=/usr:/media/root/usr --bind=/run:/media/root/run --bind=/sys/fs/bpf:/sys/fs/bpf" @@ -48,18 +58,30 @@ fi machinename=$(echo "${USER}-${TOOLBOX_NAME}" | sed -r 's/[^a-zA-Z0-9_.-]/_/g') machinepath="${TOOLBOX_DIRECTORY}/${machinename}" osrelease="${machinepath}/etc/os-release" + if [ ! -f "${osrelease}" ] || systemctl is-failed -q "${machinename}" ; then sudo mkdir -p "${machinepath}" sudo chown "${USER}:" "${machinepath}" - # Download and extract the image. - sudo --preserve-env docker pull "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}" - dcid=$(sudo --preserve-env docker create "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}") - sudo --preserve-env docker export -o "${machinepath}/${dcid}.tar" ${dcid} - sudo --preserve-env docker rm ${dcid} - sudo --preserve-env docker rmi "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}" || true - sudo tar xvf "${machinepath}/${dcid}.tar" -C "${machinepath}" - sudo rm -f "${machinepath}/${dcid}.tar" + if sudo -E ctr version &> /dev/null; then + # Check if we already got our image, do not overwrite + if ! sudo -E ctr images check | grep "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}"; then + sudo -E ctr images pull --platform ${PLATFORM} ${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG} + fi + sudo ctr images mount --rw --platform ${PLATFORM} ${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG} ${machinepath} + elif sudo -E docker stats --no-stream &> /dev/null; then + # Download and extract the image. + sudo --preserve-env docker pull "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}" + dcid=$(sudo --preserve-env docker create "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}") + sudo --preserve-env docker export -o "${machinepath}/${dcid}.tar" ${dcid} + sudo --preserve-env docker rm ${dcid} + sudo --preserve-env docker rmi "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}" || true + sudo tar xvf "${machinepath}/${dcid}.tar" -C "${machinepath}" + sudo rm -f "${machinepath}/${dcid}.tar" + else + echo "No supported container runtime found." >&2 + exit 2 + fi sudo touch "${osrelease}" fi