Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions containerd-docker.sysext/create.sh
Original file line number Diff line number Diff line change
@@ -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"
}
# --
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
[Install]
WantedBy=multi-user.target
WantedBy=multi-user.target
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[Unit]
Upholds=containerd.service
Original file line number Diff line number Diff line change
Expand Up @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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
61 changes: 30 additions & 31 deletions docker.sysext/create.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,6 @@ function list_available_versions() {
}
# --

function populate_sysext_root_options() {
echo " --without <docker|containerd> : Build the sysext without docker or"
echo " containerd/runc, respectively."
}
# --

function populate_sysext_root() {
local sysextroot="$1"
local arch="$2"
Expand All @@ -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"
}
# --

This file was deleted.

13 changes: 13 additions & 0 deletions test-build.sh
Original file line number Diff line number Diff line change
@@ -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!"