mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-27 18:18:55 +00:00
129 lines
3.8 KiB
YAML
129 lines
3.8 KiB
YAML
name: "Setup Docker"
|
|
description: "Install Docker from static binaries"
|
|
|
|
inputs:
|
|
version:
|
|
description: "Docker version to install"
|
|
required: false
|
|
default: "29.0.0"
|
|
architecture:
|
|
description: "Architecture to install (x86_64 or aarch64)"
|
|
required: false
|
|
default: "x86_64"
|
|
|
|
runs:
|
|
using: "composite"
|
|
steps:
|
|
- name: Stop existing Docker daemon
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
echo "Stopping existing Docker daemon..."
|
|
sudo systemctl stop docker.socket || true
|
|
sudo systemctl stop docker.service || true
|
|
sudo systemctl stop containerd.service || true
|
|
|
|
# Kill any remaining processes
|
|
sudo pkill -9 dockerd || true
|
|
sudo pkill -9 containerd || true
|
|
|
|
# Clean up pid files
|
|
sudo rm -f /var/run/docker.pid || true
|
|
sudo rm -f /run/docker.pid || true
|
|
sudo rm -f /var/run/containerd/containerd.pid || true
|
|
|
|
# Wait a moment for cleanup
|
|
sleep 2
|
|
|
|
echo "Existing Docker daemon stopped"
|
|
|
|
- name: Download and install Docker
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
DOCKER_VERSION="${{ inputs.version }}"
|
|
DOCKER_ARCH="${{ inputs.architecture }}"
|
|
DOCKER_URL="https://download.docker.com/linux/static/stable/${DOCKER_ARCH}/docker-${DOCKER_VERSION}.tgz"
|
|
|
|
echo "Downloading Docker ${DOCKER_VERSION} for ${DOCKER_ARCH}..."
|
|
curl -fsSL "${DOCKER_URL}" -o /tmp/docker.tgz
|
|
|
|
echo "Extracting Docker binaries..."
|
|
tar -xzf /tmp/docker.tgz -C /tmp
|
|
|
|
echo "Installing Docker binaries to /usr/local/bin..."
|
|
sudo cp /tmp/docker/* /usr/local/bin/
|
|
sudo chmod +x /usr/local/bin/docker*
|
|
sudo chmod +x /usr/local/bin/containerd*
|
|
sudo chmod +x /usr/local/bin/ctr
|
|
sudo chmod +x /usr/local/bin/runc
|
|
|
|
echo "Cleaning up..."
|
|
rm -rf /tmp/docker /tmp/docker.tgz
|
|
|
|
echo "Docker binaries installed successfully"
|
|
docker --version
|
|
|
|
- name: Configure and start Docker daemon
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
# Create containerd config directory
|
|
sudo mkdir -p /etc/containerd
|
|
|
|
# Generate default containerd config
|
|
sudo containerd config default | sudo tee /etc/containerd/config.toml
|
|
|
|
# Create Docker daemon config
|
|
sudo mkdir -p /etc/docker
|
|
cat <<EOF | sudo tee /etc/docker/daemon.json
|
|
{
|
|
"features": {
|
|
"containerd-snapshotter": true
|
|
}
|
|
}
|
|
EOF
|
|
|
|
echo "Starting containerd..."
|
|
sudo containerd &
|
|
|
|
# Wait for containerd to start
|
|
echo "Waiting for containerd to be ready..."
|
|
sleep 3
|
|
|
|
# Verify containerd is running
|
|
if ! sudo ctr version >/dev/null 2>&1; then
|
|
echo "ERROR: containerd failed to start"
|
|
ps aux | grep containerd || true
|
|
exit 1
|
|
fi
|
|
echo "containerd is ready"
|
|
|
|
echo "Starting dockerd..."
|
|
sudo dockerd --host=unix:///var/run/docker.sock &
|
|
|
|
# Wait for Docker daemon to be ready
|
|
echo "Waiting for Docker daemon to be ready..."
|
|
timeout=60
|
|
elapsed=0
|
|
while ! docker info >/dev/null 2>&1; do
|
|
if [ $elapsed -ge $timeout ]; then
|
|
echo "ERROR: Docker daemon failed to start within ${timeout} seconds"
|
|
echo "--- dockerd logs ---"
|
|
sudo journalctl -u docker --no-pager -n 50 || true
|
|
echo "--- containerd logs ---"
|
|
sudo journalctl -u containerd --no-pager -n 50 || true
|
|
echo "--- processes ---"
|
|
ps aux | grep -E 'docker|containerd' || true
|
|
exit 1
|
|
fi
|
|
sleep 1
|
|
elapsed=$((elapsed + 1))
|
|
done
|
|
|
|
echo "Docker daemon is ready"
|
|
docker info
|