diff --git a/containerd-docker.sysext/create.sh b/containerd-docker.sysext/create.sh new file mode 100644 index 0000000..c8a168f --- /dev/null +++ b/containerd-docker.sysext/create.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +# vim: et ts=2 syn=bash +# +# The containerd-docker sysext. +# Built from the containerd components of the docker sysext. +# + +RELOAD_SERVICES_ON_MERGE="true" + +function list_available_versions() { + # Use the same versions list as docker sysext + curl -fsSL https://download.docker.com/linux/static/stable/x86_64/ \ + | sed -n 's/.*docker-\([0-9.]\+\).tgz.*/\1/p' \ + | sort -Vr +} +# -- + +function populate_sysext_root() { + local sysextroot="$1" + local arch="$2" + local version="$3" + + # The github release uses different arch identifiers + local rel_arch="$(arch_transform 'x86-64' 'x86_64' "$arch")" + rel_arch="$(arch_transform 'arm64' 'aarch64' "$rel_arch")" + + curl -o "docker-${version}.tgz" \ + -fsSL "https://download.docker.com/linux/static/stable/${rel_arch}/docker-${version}.tgz" + tar --force-local -xf "docker-${version}.tgz" + + mkdir -p "${sysextroot}"/usr/bin + + # Copy only containerd and runc components + cp docker/containerd \ + docker/containerd-shim-runc-v2 \ + docker/ctr \ + docker/runc \ + "${sysextroot}"/usr/bin/ + + # Create required directories for systemd files + mkdir -p "${sysextroot}/usr/lib/systemd/system/multi-user.target.d/" + mkdir -p "${sysextroot}/usr/share/containerd" +} +# -- \ No newline at end of file diff --git a/docker.sysext/files/usr/lib/systemd/system/containerd.service b/containerd-docker.sysext/files/usr/lib/systemd/system/containerd.service similarity index 95% rename from docker.sysext/files/usr/lib/systemd/system/containerd.service rename to containerd-docker.sysext/files/usr/lib/systemd/system/containerd.service index 2410230..ffe8db6 100644 --- a/docker.sysext/files/usr/lib/systemd/system/containerd.service +++ b/containerd-docker.sysext/files/usr/lib/systemd/system/containerd.service @@ -15,4 +15,4 @@ LimitNPROC=infinity LimitCORE=infinity TasksMax=infinity [Install] -WantedBy=multi-user.target +WantedBy=multi-user.target \ No newline at end of file diff --git a/containerd-docker.sysext/files/usr/lib/systemd/system/multi-user.target.d/10-containerd-service.conf b/containerd-docker.sysext/files/usr/lib/systemd/system/multi-user.target.d/10-containerd-service.conf new file mode 100644 index 0000000..6518804 --- /dev/null +++ b/containerd-docker.sysext/files/usr/lib/systemd/system/multi-user.target.d/10-containerd-service.conf @@ -0,0 +1,2 @@ +[Unit] +Upholds=containerd.service \ No newline at end of file diff --git a/docker.sysext/files/usr/share/containerd/config-cgroupfs.toml b/containerd-docker.sysext/files/usr/share/containerd/config-cgroupfs.toml similarity index 92% rename from docker.sysext/files/usr/share/containerd/config-cgroupfs.toml rename to containerd-docker.sysext/files/usr/share/containerd/config-cgroupfs.toml index fc6ab91..f10eb47 100644 --- a/docker.sysext/files/usr/share/containerd/config-cgroupfs.toml +++ b/containerd-docker.sysext/files/usr/share/containerd/config-cgroupfs.toml @@ -5,4 +5,4 @@ oom_score = -999 # setting runc.options unsets parent settings runtime_type = "io.containerd.runc.v2" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] -SystemdCgroup = false +SystemdCgroup = false \ No newline at end of file diff --git a/docker.sysext/files/usr/share/containerd/config.toml b/containerd-docker.sysext/files/usr/share/containerd/config.toml similarity index 92% rename from docker.sysext/files/usr/share/containerd/config.toml rename to containerd-docker.sysext/files/usr/share/containerd/config.toml index 083d435..cc723a7 100644 --- a/docker.sysext/files/usr/share/containerd/config.toml +++ b/containerd-docker.sysext/files/usr/share/containerd/config.toml @@ -5,4 +5,4 @@ oom_score = -999 # setting runc.options unsets parent settings runtime_type = "io.containerd.runc.v2" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] -SystemdCgroup = true +SystemdCgroup = true \ No newline at end of file diff --git a/docker.sysext/create.sh b/docker.sysext/create.sh index 2685f11..2ab7232 100644 --- a/docker.sysext/create.sh +++ b/docker.sysext/create.sh @@ -17,12 +17,6 @@ function list_available_versions() { } # -- -function populate_sysext_root_options() { - echo " --without : Build the sysext without docker or" - echo " containerd/runc, respectively." -} -# -- - function populate_sysext_root() { local sysextroot="$1" local arch="$2" @@ -41,33 +35,38 @@ function populate_sysext_root() { mkdir -p "${sysextroot}"/usr/bin cp -R docker/* "${sysextroot}"/usr/bin/ - if [[ "${without}" == docker ]] ; then - announce "Removing docker from sysext as requested (shipping containerd/runc only)" - - rm "${sysextroot}/usr/bin/docker" \ - "${sysextroot}/usr/bin/dockerd" \ - "${sysextroot}/usr/bin/docker-init" \ - "${sysextroot}/usr/bin/docker-proxy" \ - "${sysextroot}/usr/lib/systemd/system/docker.socket" \ - "${sysextroot}/usr/lib/systemd/system/sockets.target.d/10-docker-socket.conf" \ - "${sysextroot}/usr/lib/systemd/system/docker.service" - - rmdir "${sysextroot}/usr/lib/systemd/system/sockets.target.d" - - elif [[ "${without}" == containerd ]] ; then - announce "Removing containerd / runc from sysext as requested (shipping docker only)" + announce "Removing containerd / runc from sysext as requested (shipping docker only)" - rm "${sysextroot}/usr/bin/containerd" \ - "${sysextroot}/usr/bin/containerd-shim-runc-v2" \ - "${sysextroot}/usr/bin/ctr" \ - "${sysextroot}/usr/bin/runc" \ - "${sysextroot}/usr/lib/systemd/system/containerd.service" \ - "${sysextroot}/usr/lib/systemd/system/multi-user.target.d/10-containerd-service.conf" \ - "${sysextroot}/usr/share/containerd/config.toml" \ - "${sysextroot}/usr/share/containerd/config-cgroups.toml" + rm "${sysextroot}/usr/bin/containerd" \ + "${sysextroot}/usr/bin/containerd-shim-runc-v2" \ + "${sysextroot}/usr/bin/ctr" \ + "${sysextroot}/usr/bin/runc" - rmdir "${sysextroot}/usr/share/containerd" \ - "${sysextroot}/usr/lib/systemd/system/multi-user.target.d/" + # Always build the containerd-docker sysext + announce "Building containerd-docker sysext based on containerd from Docker" + + # Create a temporary directory for the containerd-docker sysext + local containerd_docker_root="$(mktemp -d)" + trap "rm -rf '${containerd_docker_root}'" EXIT + + mkdir -p "${containerd_docker_root}/usr/bin" + + # Copy only containerd and runc components + cp docker/containerd \ + docker/containerd-shim-runc-v2 \ + docker/ctr \ + docker/runc \ + "${containerd_docker_root}/usr/bin/" + + # Copy the static files from our containerd-docker.sysext/files directory + if [[ -d "${scriptroot}/containerd-docker.sysext/files" ]]; then + cp -R "${scriptroot}/containerd-docker.sysext/files/"* "${containerd_docker_root}/" fi + + # Generate the containerd-docker sysext + announce "Generating containerd-docker sysext file system image" + # Use the scriptroot variable to ensure the output file is created in the project root directory + cd "${scriptroot}" + generate_sysext "${containerd_docker_root}" "$arch" "${@}" --force-reload true --name "containerd-docker" } # -- diff --git a/docker.sysext/files/usr/lib/systemd/system/multi-user.target.d/10-containerd-service.conf b/docker.sysext/files/usr/lib/systemd/system/multi-user.target.d/10-containerd-service.conf deleted file mode 100644 index 82d843d..0000000 --- a/docker.sysext/files/usr/lib/systemd/system/multi-user.target.d/10-containerd-service.conf +++ /dev/null @@ -1,2 +0,0 @@ -[Unit] -Upholds=containerd.service diff --git a/test-build.sh b/test-build.sh new file mode 100644 index 0000000..835be3c --- /dev/null +++ b/test-build.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +# Test building both docker and containerd-docker sysexts + +set -euo pipefail + +# Get the latest docker version +DOCKER_VERSION=$(./bakery.sh list docker --latest true | head -n 1) +echo "Building with Docker version: ${DOCKER_VERSION}" + +# Build both docker and containerd-docker sysexts +./bakery.sh create docker "${DOCKER_VERSION}" + +echo "Build completed successfully!" \ No newline at end of file