Skip to content

Commit ee2289f

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 ee2289f

File tree

1 file changed

+37
-15
lines changed

1 file changed

+37
-15
lines changed

toolbox

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,29 @@ 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
9+
arm)
10+
PLATFORM=linux/arm/v7
1211
;;
13-
x86_64 )
14-
TOOLBOX_DOCKER_IMAGE=fedora
15-
TOOLBOX_DOCKER_TAG=latest
12+
aarch64)
13+
PLATFORM=linux/arm64/v8
1614
;;
17-
* )
15+
riscv64)
16+
PLATFORM=linux/riscv64
17+
;;
18+
x86)
19+
PLATFORM=linux/386
20+
;;
21+
x86_64)
22+
PLATFORM=linux/amd64
23+
;;
24+
*)
1825
echo "Warning: Unknown machine type ${machine}" >&2
26+
exit 1
1927
;;
2028
esac
2129

30+
TOOLBOX_DOCKER_IMAGE=docker.io/library/debian
31+
TOOLBOX_DOCKER_TAG=unstable-slim
2232
TOOLBOX_USER=root
2333
TOOLBOX_DIRECTORY="/var/lib/toolbox"
2434
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
4858
machinename=$(echo "${USER}-${TOOLBOX_NAME}" | sed -r 's/[^a-zA-Z0-9_.-]/_/g')
4959
machinepath="${TOOLBOX_DIRECTORY}/${machinename}"
5060
osrelease="${machinepath}/etc/os-release"
61+
5162
if [ ! -f "${osrelease}" ] || systemctl is-failed -q "${machinename}" ; then
5263
sudo mkdir -p "${machinepath}"
5364
sudo chown "${USER}:" "${machinepath}"
5465

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"
66+
if sudo -E ctr version &> /dev/null; then
67+
# Check iw we already got our image, do not overwrite
68+
if ! sudo -E ctr images check | grep "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}"; then
69+
sudo -E ctr images pull --platform ${PLATFORM} ${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}
70+
fi
71+
sudo ctr images mount --rw --platform ${PLATFORM} ${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG} ${machinepath}
72+
elif sudo -E docker stats --no-stream &> /dev/null; then
73+
# Download and extract the image.
74+
sudo --preserve-env docker pull "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}"
75+
dcid=$(sudo --preserve-env docker create "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}")
76+
sudo --preserve-env docker export -o "${machinepath}/${dcid}.tar" ${dcid}
77+
sudo --preserve-env docker rm ${dcid}
78+
sudo --preserve-env docker rmi "${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}" || true
79+
sudo tar xvf "${machinepath}/${dcid}.tar" -C "${machinepath}"
80+
sudo rm -f "${machinepath}/${dcid}.tar"
81+
else
82+
echo "No supported container runtime found." >&2
83+
exit 2
84+
fi
6385

6486
sudo touch "${osrelease}"
6587
fi

0 commit comments

Comments
 (0)