Profile sind deklarative Schritte je Distributionsfamilie; der Adapter übersetzt sie in ein idempotentes Shell-Skript. Ein neuer Adapter (rhel, alpine) ist eine Datei und ein Eintrag in der Registry. Variablen werden typisiert geprüft, in run-Schritten jeder Wert für die Shell gequotet. SSH-Härtung läuft zuletzt, damit sich eine Provisionierung per SSH nicht selbst aussperrt. Geprüft mit shellcheck und echt in Containern (Debian 12/13, Ubuntu 22.04/24.04/26.04) inklusive zweitem Lauf. Dabei aufgefallen: frische Images haben keine Paketlisten – der Vorspann macht jetzt apt-get update. Closes #005 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.0 KiB
2.0 KiB
#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
- Interface + Registry;
debian-Adapter (apt mit Lock-Timeout, deb822, systemd, locale, keyboard, sshd_config.d, sudoers mit visudo-Prüfung) - Profilauflösung (requires transitiv, Zyklen, Variablen mit Typen und Standardwerten, Familien-Prüfung)
- Platzhalter
{{ var.x }},{{ os.* }},{{ guest.* }},a ?? b; inrunjeder Wert shell-gequotet - Profil
base(Updates, Guest-Agent, Europe/Berlin, de_DE.UTF-8, Tastatur de, unattended-upgrades, chrony, SSH-Härtung, fail2ban optional) - Tests der erzeugten Skripte; shellcheck auf die Ausgabe aller Distributionen
pnpm test:container: Skripte wirklich ausführen (Debian 12/13, Ubuntu 22.04/24.04/26.04), Ergebnis prüfen, zweiter Lauf auf Idempotenzdocs/katalog.md: neue Distribution, neuer Adapter, eigenes Profil
Akzeptanzkriterien
- Neues Profil/neuer Adapter braucht keine Änderung an Engine-Code
- 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 <id>im Skript zeigen im Live-Log, welches Profil gerade läuft. - Dateiinhalte gehen base64-kodiert ins Skript – beliebige Zeichen kommen unverändert an.