131 lines
4.3 KiB
Bash
Executable file
131 lines
4.3 KiB
Bash
Executable file
#!/bin/bash
|
|
# Container Training — Debian 12 Setup
|
|
# Als root oder mit sudo ausführen: sudo bash setup.sh
|
|
|
|
set -e
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
ok() { echo -e "${GREEN}[OK]${NC} $*"; }
|
|
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
|
fail() { echo -e "${RED}[FEHLER]${NC} $*"; exit 1; }
|
|
|
|
[ "$(id -u)" -eq 0 ] || fail "Bitte als root oder mit sudo ausführen."
|
|
|
|
echo "================================================"
|
|
echo " Container-Schulung — Setup (Debian 12)"
|
|
echo "================================================"
|
|
echo ""
|
|
|
|
# Trainingsuser ermitteln
|
|
TRAINING_USER=${SUDO_USER:-""}
|
|
if [ -z "$TRAINING_USER" ]; then
|
|
warn "SUDO_USER nicht gesetzt — Linger wird nicht konfiguriert."
|
|
warn "Ggf. manuell ausführen: loginctl enable-linger <username>"
|
|
fi
|
|
|
|
# -------------------------------------------------------
|
|
echo ""
|
|
echo "[1/5] Basis-Tools..."
|
|
# -------------------------------------------------------
|
|
apt-get update -q
|
|
apt-get install -y \
|
|
iputils-ping \
|
|
iproute2 \
|
|
net-tools \
|
|
dnsutils \
|
|
curl \
|
|
wget \
|
|
git \
|
|
vim \
|
|
jq \
|
|
bash-completion
|
|
ok "Netzwerk-Tools installiert."
|
|
|
|
# -------------------------------------------------------
|
|
echo ""
|
|
echo "[2/5] Podman-Abhängigkeiten (rootless)..."
|
|
# -------------------------------------------------------
|
|
apt-get install -y \
|
|
slirp4netns \
|
|
fuse-overlayfs \
|
|
uidmap \
|
|
dbus-user-session \
|
|
systemd-container
|
|
ok "Rootless-Abhängigkeiten installiert."
|
|
|
|
# -------------------------------------------------------
|
|
echo ""
|
|
echo "[3/5] Podman (Kubic-Repo — brauchen >= 4.4 für Quadlets)..."
|
|
# -------------------------------------------------------
|
|
echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_12/ /' \
|
|
| tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
|
|
curl -fsSL https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/Debian_12/Release.key \
|
|
| gpg --dearmor \
|
|
| tee /etc/apt/trusted.gpg.d/devel_kubic_libcontainers_stable.gpg > /dev/null
|
|
apt-get update -q
|
|
apt-get install -y podman
|
|
|
|
PODMAN_VER=$(podman --version | awk '{print $3}')
|
|
PODMAN_MINOR=$(echo "$PODMAN_VER" | cut -d. -f2)
|
|
PODMAN_MAJOR=$(echo "$PODMAN_VER" | cut -d. -f1)
|
|
|
|
if [ "$PODMAN_MAJOR" -gt 4 ] || { [ "$PODMAN_MAJOR" -eq 4 ] && [ "$PODMAN_MINOR" -ge 4 ]; }; then
|
|
ok "Podman $PODMAN_VER — Quadlets werden unterstützt."
|
|
else
|
|
warn "Podman $PODMAN_VER — Quadlets brauchen >= 4.4! Tag 3 könnte Probleme machen."
|
|
fi
|
|
|
|
# -------------------------------------------------------
|
|
echo ""
|
|
echo "[4/5] podman-compose + trivy..."
|
|
# -------------------------------------------------------
|
|
apt-get install -y podman-compose 2>/dev/null \
|
|
|| pip3 install --quiet podman-compose
|
|
ok "podman-compose installiert."
|
|
|
|
# trivy
|
|
curl -fsSL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh \
|
|
| sh -s -- -b /usr/local/bin latest
|
|
ok "trivy installiert: $(trivy --version | head -1)"
|
|
|
|
# -------------------------------------------------------
|
|
echo ""
|
|
echo "[5/5] Benutzer-Setup ($TRAINING_USER)..."
|
|
# -------------------------------------------------------
|
|
if [ -n "$TRAINING_USER" ]; then
|
|
loginctl enable-linger "$TRAINING_USER"
|
|
ok "Linger aktiviert für $TRAINING_USER — systemctl --user überlebt Logout."
|
|
|
|
# subuid/subgid für rootless Container
|
|
if ! grep -q "^${TRAINING_USER}:" /etc/subuid 2>/dev/null; then
|
|
usermod --add-subuids 100000-165535 "$TRAINING_USER"
|
|
usermod --add-subgids 100000-165535 "$TRAINING_USER"
|
|
ok "subuid/subgid konfiguriert."
|
|
else
|
|
ok "subuid/subgid bereits vorhanden."
|
|
fi
|
|
else
|
|
warn "Kein Trainingsuser — Linger und subuid/subgid übersprungen."
|
|
fi
|
|
|
|
# -------------------------------------------------------
|
|
echo ""
|
|
echo "================================================"
|
|
echo " Zusammenfassung"
|
|
echo "================================================"
|
|
podman --version
|
|
podman-compose --version 2>/dev/null | head -1 || true
|
|
trivy --version | head -1
|
|
echo ""
|
|
|
|
if [ -n "$TRAINING_USER" ]; then
|
|
echo "Benutzer: $TRAINING_USER"
|
|
echo "Linger: $(loginctl show-user "$TRAINING_USER" --property=Linger --value 2>/dev/null || echo 'unbekannt')"
|
|
fi
|
|
|
|
echo ""
|
|
ok "Setup abgeschlossen. Bitte einmal aus- und wieder einloggen."
|