8.2 KiB
ADR-0024: Golden-Image-Deployment statt Distributions-Installer-Automatisierung
Status: Beschlossen, Phase 0+1 live verifiziert Datum: 29.08.2026
Kontext
Nach einem vollen Tag Fehlersuche an Linux Mints Ubiquity-Installer (siehe
project_e2e_flow_dogfooding_2026-08-28 und ADR-0023-Nachtrag) blieb
trotz eines live verifizierten, zuverlässigen AT-SPI-Autoklickers (100+
korrekte Klicks) ein tiefer, undokumentierter Blocker bestehen: Ubiquity
springt nach dem Klick auf "Jetzt installieren" wiederholt in eine
ubiquity/partman-rebuild-cache-Schleife zurück
(/lib/partman/update.d/99signal_ubiquity), ohne dass mehrere geprüfte
Hypothesen (Rezept-Flags, Timing) die Ursache klären konnten.
Diese Schwierigkeit ist strukturell dieselbe wie das frühere WLAN-Problem mit Fedora/Anaconda: interaktive Distributions-Installer (Ubiquity, Anaconda, potenziell Subiquity) sind für menschliche Bedienung gebaut, nicht für Automatisierung - jede Automatisierungslösung dagegen ist eine fragile, distributionsspezifische Sonderkonstruktion. Zusätzlich würde "jeden Installer einzeln automatisieren" das Projekt vom eigentlichen Ziel wegbewegen, dass ein Kunde frei zwischen Distributionen wählen kann.
Der User hat diese Einschätzung unabhängig mit einer separaten Claude-Web-Session vertieft; nach kritischer Durchsicht dieses Gesprächs wurde gemeinsam entschieden, die Richtung zu ändern.
Entscheidung
Der eigentliche Installationsschritt wird durch das Muster ersetzt, das
curtin (Canonical/MAAS) und FAI (Debian) bereits lösen: das bestehende,
bereits distributionsunabhängige Boot-/Provisionierungs-Environment
(Tuxflotte-Module 00-40: Hardware-Erkennung, Netzwerk/WLAN,
Registrierung, Blueprint-Abruf) partitioniert die Zielplatte direkt
(parted/mkfs), entpackt ein fertiges Root-Filesystem-Image und macht
chroot-Nacharbeiten (fstab, initramfs, machine-id, SSH-Hostkeys,
Bootloader).
Golden Image bewusst schlank, ohne Desktop-Umgebung: bei Tuxflotte
ist die kundensichtbare Identität (Cinnamon, Theming) laut
Blueprint/Merkmal-Modell (ADR-0002) ohnehin ein Merkmal, das der
Provisioning Agent erst nach dem ersten Boot per Ansible ausrollt - das
Golden Image selbst muss nur überall booten und Netzwerk haben. Damit
entfällt Ubiquity/GTK/AT-SPI für den Image-Bau komplett: der Bau läuft
rein über debootstrap, CLI-only, ohne GUI-Installer.
Reines Debian statt Mints Ubuntu-Basis nachzubilden: da die kundensichtbare Identität komplett aus der Ansible-Schicht kommt, ist die exakte Basis-Distribution des Images zweitrangig - ein Nebeneffekt ist, dass dieselbe Debian-Basis später auch für ein mögliches Ubuntu-Angebot wiederverwendbar wäre.
Selbst gebaut statt curtin/FAI zu adoptieren: die Einzelschritte (parted/mkfs, tar/squashfs-Extraktion, chroot-Fixup, grub-install) sind Standard-Handwerk. Volle Kontrolle/Debugbarkeit wiegt schwerer als der Wegfall von Ubiquity/Anacondas eingebauter Bootloader-/Hardware-Logik - genau die Fremdcode-Undurchsichtigkeit war das heutige Kernproblem.
Architektonisch passend: scripts/modules/40_backend.sh orchestriert
Backends bereits über eine Fünf-Funktionen-Lebenszyklus-Schnittstelle
(backend_init/backend_validate/backend_generate_config/
backend_launch/backend_postinstall) - ein neues Backend fügt sich ein,
ohne Orchestrator oder Module 00-40 zu ändern. Der Agent-Bootstrap
(backends/mint/postinstall.sh) ist bereits ein reines,
distributionsunabhängiges Bash-Skript, wiederverwendbar durch einfaches
chroot-Ausführen statt über ubiquity/success_command.
Die heutige Ubiquity/AT-SPI-Arbeit bleibt als dokumentierte Referenz (ADR-0023) erhalten, hat aber keine aktive Rolle mehr in diesem Plan - auch nicht als Image-Bau-Werkzeug.
Vollständiger Phasenplan: ~/.claude/plans/inherited-forging-puffin.md
(Phase 0: Golden Image bauen; Phase 1: Kernmechanik isoliert testen;
Phase 2: neues Backend backends/mint-image/; Phase 3: End-to-End über
den echten Self-Service-Flow; Phase 4: diese ADR + Memory).
Phase 0+1: live verifiziert (29.08.2026)
scripts/build_golden_image.sh baut eine schlanke Debian-bookworm-Basis
(Kernel, breites linux-firmware, NetworkManager, openssh-server) - kein
Root-Passwort, keine SSH-Hostkeys im Ergebnis (reale Zugangsdaten
entstehen erst durch den Provisioning Agent pro Geraet).
scripts/lib/image_deploy.sh kapselt die Deployment-Mechanik
(partitionieren, formatieren, mounten, Image entpacken, fstab aus echten
UUIDs, chroot-Fixup, Bootloader-Installation UEFI+BIOS) als
wiederverwendbare Funktionsbibliothek; scripts/image_deploy_test.sh ist
der isolierte Testtreiber für Phase 1.
Live auf der lenny-QEMU-VM getestet (frische 20-GB-Platte, UEFI/OVMF), dabei drei reale Bugs gefunden und behoben:
zstdverweigerte das Überschreiben der Ausgabedatei bei wiederholten Baeulaeufen --fergänzt.grub-installkonnte im Testkontext keinen NVRAM-Booteintrag setzen ("EFI variables are not supported on this system"), ohne--removableblieb dann nur ein benannter Pfad übrig, den die Firmware ohne NVRAM-Eintrag nie findet ("No bootable option or device was found" beim ersten Boot-Test). Fix: zusätzlichergrub-install- Lauf mit--removableschreibt auf den Standard-Fallback-PfadEFI/BOOT/BOOTX64.EFI- robuster generell für heterogene Zielhardware, nicht nur für dieses Testszenario.- Kritischster Fund: das komplette Root-Dateisystem des Golden
Image hatte die Rechte
0700statt0755-mktemp -dlegt sein Zielverzeichnis mit0700an,debootstrapändert das nicht, undtar -pübernahm diesen Modus beim Verpacken/Entpacken 1:1 als Root-Verzeichnis-Rechte des gesamten ausgerollten Systems. Ergebnis: jeder nicht-root-Prozess (dbus-daemon wechselt intern auf den unprivilegierten "messagebus"-Benutzer) bekam "Permission denied" schon beim Traversieren von "/" - eine komplette Boot-Fehlerkaskade (dbus, systemd-logind, NetworkManager, wpa_supplicant, ModemManager schlugen alle fehl, kein Netzwerk). Fix:chmod 0755direkt nachdebootstrapinbuild_golden_image.sh.
Nach allen drei Fixes: sauberer, stiller Boot bis zum Login-Prompt, keine
einzige [FAILED]-Zeile, echte DHCP-Lease bestätigt
(192.168.122.244, Hostname tuxflotte-image-test korrekt gesetzt). Der
Erfolgsmaßstab für Phase 0+1 ("bootet überall, hat Netzwerk") ist damit
erreicht.
Nachtrag (30.08.2026): Debian trixie statt bookworm, erweiterte WLAN-Abdeckung, Umzug auf enterprise
Nach Rückfrage des Users umgestellt:
trixie(Debian 13) stattbookwormals Ziel-Suite - bookworm ist inzwischen oldstable, trixie liefert ausserdem von Haus aus einen neueren Kernel (6.12 statt 6.1), direkt relevant fürs Ziel "möglichst breite Hardwareunterstützung". Die Secure-Boot-Kette (shim-signed/grub-efi-amd64-signed/signierter Kernel) funktioniert in beiden Suiten identisch - kein Unterschied dort, DKMS-Module (Nvidia u.ä.) bleiben so oder so unsigniert und damit Agent-Zuständigkeit.- WLAN-Paketliste erweitert:
firmware-brcm80211(Broadcom, vorher nicht abgedeckt),wireless-regdb(Regulatory-Datenbank - ohne sie Kanal-/Sendeleistungs-Einschränkungen, leicht zu übersehen),wpasupplicantexplizit (kam vorher nur transitiv mit),iw+rfkill(Diagnose/Kontrolle). - Testinfrastruktur von lenny auf enterprise umgezogen: enterprise ist
eine Workstation mit praktischer 24/7-Verfügbarkeit, lenny ein Notebook
auf WLAN, das reist und einschläft - für mehrstündige/mehrstufige
Testzyklen unzuverlässiger. Dieselbe VM (
tuxflotte-mint-autoinstall-test, vormals eine andere Testfixtur auf enterprise, siehe project_qemu_vm_enterprise) wurde auf UEFI/OVMF umgestellt und für diesen Zweck wiederverwendet.
Erneut live verifiziert (trixie + erweiterte WLAN-Pakete, auf enterprise):
sauberer Boot ("Debian GNU/Linux 13"), keine [FAILED]-Zeile, bestätigte
DHCP-Lease. Image-Größe rund 448 MB (etwas größer als die bookworm-Fassung
durch neuere/mehr Pakete).
Nächste Schritte
Phase 2 (Backend backends/mint-image/) und Phase 3 (End-to-End über den
echten Self-Service-Flow) sind noch offen - siehe Plandatei. Fedora/Ubuntu
folgen erst nach erfolgreichem Mint-Vollzyklus demselben Muster.