Skip to content

Commit 26c4d31

Browse files
committed
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.
1 parent 8541a8d commit 26c4d31

File tree

1 file changed

+38
-22
lines changed

1 file changed

+38
-22
lines changed

toolbox

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,28 @@ set -o pipefail
66
machine=$(uname -m)
77

88
case ${machine} in
9-
aarch64 )
10-
TOOLBOX_DOCKER_IMAGE=arm64v8/fedora
11-
TOOLBOX_DOCKER_TAG=latest
12-
;;
13-
x86_64 )
14-
TOOLBOX_DOCKER_IMAGE=fedora
15-
TOOLBOX_DOCKER_TAG=latest
16-
;;
17-
* )
18-
echo "Warning: Unknown machine type ${machine}" >&2
19-
;;
9+
arm)
10+
PLATFORM=linux/arm/v7
11+
;;
12+
aarch64)
13+
PLATFORM=linux/arm64/v8
14+
;;
15+
riscv64)
16+
PLATFORM=linux/riscv64
17+
;;
18+
x86)
19+
PLATFORM=linux/386
20+
;;
21+
x86_64)
22+
PLATFORM=linux/amd64
23+
;;
24+
*)
25+
echo "Warning: Unknown machine type ${machine}" >&2
26+
;;
2027
esac
2128

29+
TOOLBOX_DOCKER_IMAGE=docker.io/library/debian
30+
TOOLBOX_DOCKER_TAG=unstable-slim
2231
TOOLBOX_USER=root
2332
TOOLBOX_DIRECTORY="/var/lib/toolbox"
2433
TOOLBOX_BIND="--bind=/:/media/root --bind=/usr:/media/root/usr --bind=/run:/media/root/run --bind=/sys/fs/bpf:/sys/fs/bpf"
@@ -48,20 +57,27 @@ fi
4857
machinename=$(echo "${USER}-${TOOLBOX_NAME}" | sed -r 's/[^a-zA-Z0-9_.-]/_/g')
4958
machinepath="${TOOLBOX_DIRECTORY}/${machinename}"
5059
osrelease="${machinepath}/etc/os-release"
60+
5161
if [ ! -f "${osrelease}" ] || systemctl is-failed -q "${machinename}" ; then
52-
sudo mkdir -p "${machinepath}"
53-
sudo chown "${USER}:" "${machinepath}"
62+
sudo mkdir -p "${machinepath}"
63+
sudo chown "${USER}:" "${machinepath}"
64+
65+
if docker stats --no-stream &> /dev/null; then
66+
# Download and extract the image.
67+
sudo --preserve-env docker pull "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}"
68+
dcid=$(sudo --preserve-env docker create "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}")
69+
sudo --preserve-env docker export -o "${machinepath}/${dcid}.tar" ${dcid}
70+
sudo --preserve-env docker rm ${dcid}
71+
sudo --preserve-env docker rmi "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}" || true
72+
sudo tar xvf "${machinepath}/${dcid}.tar" -C "${machinepath}"
73+
sudo rm -f "${machinepath}/${dcid}.tar"
5474

55-
# Download and extract the image.
56-
sudo --preserve-env docker pull "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}"
57-
dcid=$(sudo --preserve-env docker create "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}")
58-
sudo --preserve-env docker export -o "${machinepath}/${dcid}.tar" ${dcid}
59-
sudo --preserve-env docker rm ${dcid}
60-
sudo --preserve-env docker rmi "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}" || true
61-
sudo tar xvf "${machinepath}/${dcid}.tar" -C "${machinepath}"
62-
sudo rm -f "${machinepath}/${dcid}.tar"
75+
elif ctr version &> /dev/null; then
76+
sudo --preserve-env ctr images pull --platform ${PLATFORM} ${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}
77+
sudo ctr images mount --rw --platform ${PLATFORM} ${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG} ${machinepath}
78+
fi
6379

64-
sudo touch "${osrelease}"
80+
sudo touch "${osrelease}"
6581
fi
6682

6783
# Special case for when SSH tries to pass a shell command with -c

0 commit comments

Comments
 (0)