58 lines
2.6 KiB
Bash
Executable File
58 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
||
# ESPO-02-Docker – installiert Docker in gepinnter Version und setzt die Daemon-Grundlagen.
|
||
# Laeuft als root ueber einen RMM-Bash-Task, idempotent.
|
||
# Firewallregeln (ufw, DOCKER-USER) kommen in einem eigenen Task, weil dafuer die Adresse
|
||
# der OPNsense als Parameter gebraucht wird.
|
||
set -u
|
||
FEHLER=0
|
||
|
||
# Gepinnte Staende - hier wird der Flottenstand gesetzt, nicht auf der VM entschieden.
|
||
DOCKER_VERSION="5:29.8.1-1~ubuntu.24.04~noble"
|
||
CONTAINERD_VERSION="2.3.5-1~ubuntu.24.04~noble"
|
||
COMPOSE_VERSION="5.5.1-1~ubuntu.24.04~noble"
|
||
BUILDX_VERSION="0.37.1-1~ubuntu.24.04~noble"
|
||
|
||
# 1. Paketquelle von Docker einrichten (Schluessel und deb822-Quelle), falls noch nicht vorhanden.
|
||
install -m 0755 -d /etc/apt/keyrings
|
||
if [ ! -s /etc/apt/keyrings/docker.asc ]; then
|
||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc || { echo "FEHLER: Schluessel nicht ladbar"; exit 1; }
|
||
chmod a+r /etc/apt/keyrings/docker.asc
|
||
fi
|
||
cat > /etc/apt/sources.list.d/docker.sources <<CONF
|
||
Types: deb
|
||
URIs: https://download.docker.com/linux/ubuntu
|
||
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
|
||
Components: stable
|
||
Architectures: $(dpkg --print-architecture)
|
||
Signed-By: /etc/apt/keyrings/docker.asc
|
||
CONF
|
||
apt-get update -qq || { echo "FEHLER: apt-get update"; exit 1; }
|
||
|
||
# 2. Genau diese Versionen installieren und auf Hold setzen, damit nichts unbemerkt nachzieht.
|
||
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq \
|
||
docker-ce="$DOCKER_VERSION" docker-ce-cli="$DOCKER_VERSION" containerd.io="$CONTAINERD_VERSION" \
|
||
docker-compose-plugin="$COMPOSE_VERSION" docker-buildx-plugin="$BUILDX_VERSION" || { echo "FEHLER: Installation"; exit 1; }
|
||
apt-mark hold docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin >/dev/null
|
||
|
||
# 3. Daemon-Grundlagen: Logrotation (der Standardtreiber rotiert nicht) und veroeffentlichte
|
||
# Ports ohne Adressangabe nur auf die Loopback-Adresse binden.
|
||
install -d -m 755 /etc/docker
|
||
cat > /etc/docker/daemon.json <<'CONF'
|
||
{
|
||
"log-driver": "local",
|
||
"log-opts": { "max-size": "20m", "max-file": "5" },
|
||
"ip": "127.0.0.1",
|
||
"live-restore": true
|
||
}
|
||
CONF
|
||
systemctl enable --now docker >/dev/null 2>&1
|
||
systemctl restart docker || { echo "FEHLER: docker startet nicht"; exit 1; }
|
||
|
||
# 4. Ergebnis zeigen und pruefen.
|
||
docker --version
|
||
docker compose version
|
||
docker info --format 'Logtreiber: {{.LoggingDriver}} Live-Restore: {{.LiveRestoreEnabled}}'
|
||
[ "$(docker info --format '{{.LoggingDriver}}')" = "local" ] || { echo "FEHLER: Logtreiber nicht gesetzt"; FEHLER=1; }
|
||
|
||
if [ "$FEHLER" -eq 0 ]; then echo "ESPO02_ERGEBNIS: OK"; exit 0; else echo "ESPO02_ERGEBNIS: FEHLER"; exit 1; fi
|