#!/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 " 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."