# #005 Adapter debian und Profil-Engine **Status:** erledigt **Meilenstein:** v0.2.0 **Labels:** feature, engine **Geschätzt:** 6 h **Tatsächlich:** 0 h 20 min ## Ziel Interface `FamilienAdapter`, Umsetzung `debian`, Profile werden zu einem idempotenten Skript. ## Aufgaben - [x] Interface + Registry; `debian`-Adapter (apt mit Lock-Timeout, deb822, systemd, locale, keyboard, sshd_config.d, sudoers mit visudo-Prüfung) - [x] Profilauflösung (requires transitiv, Zyklen, Variablen mit Typen und Standardwerten, Familien-Prüfung) - [x] Platzhalter `{{ var.x }}`, `{{ os.* }}`, `{{ guest.* }}`, `a ?? b`; in `run` jeder Wert shell-gequotet - [x] Profil `base` (Updates, Guest-Agent, Europe/Berlin, de_DE.UTF-8, Tastatur de, unattended-upgrades, chrony, SSH-Härtung, fail2ban optional) - [x] Tests der erzeugten Skripte; shellcheck auf die Ausgabe aller Distributionen - [x] `pnpm test:container`: Skripte wirklich ausführen (Debian 12/13, Ubuntu 22.04/24.04/26.04), Ergebnis prüfen, zweiter Lauf auf Idempotenz - [x] `docs/katalog.md`: neue Distribution, neuer Adapter, eigenes Profil ## Akzeptanzkriterien - [x] Neues Profil/neuer Adapter braucht keine Änderung an Engine-Code - [x] base + docker + zabbix-agent laufen auf allen fünf Distributionen durch und sind idempotent (Container, 2026-10-12) ## Abhängigkeiten #004 ## Notizen / Entscheidungen - **Fund im Container:** frische Images haben keine Paketlisten – der Vorspann macht jetzt immer `apt-get update`, sonst scheiterte schon die Benutzeranlage an „Unable to locate package sudo“. - **Zeitzone, Locale und Tastatur werden gegen strenge Muster geprüft**, bevor sie ins Skript kommen (shellcheck fand verschachteltes Quoting im sed-Ausdruck). - **SSH-Härtung läuft immer zuletzt:** läuft die Provisionierung per SSH als root (LXC ohne Node-SSH), schlösse sie sich sonst selbst aus. - **Marken `::proxdeploy:: profil `** im Skript zeigen im Live-Log, welches Profil gerade läuft. - Dateiinhalte gehen base64-kodiert ins Skript – beliebige Zeichen kommen unverändert an.