diff --git a/docs/superpowers/plans/2026-07-30-host-uebernahme-bootstrap-skript.md b/docs/superpowers/plans/2026-07-30-host-uebernahme-bootstrap-skript.md index aaadbb8..ffdb793 100644 --- a/docs/superpowers/plans/2026-07-30-host-uebernahme-bootstrap-skript.md +++ b/docs/superpowers/plans/2026-07-30-host-uebernahme-bootstrap-skript.md @@ -154,30 +154,72 @@ genau hier seine einzige Gelegenheit, es nicht zu tun. > Task 7 des Plattform-Plans (`hosts.section.*`). > - `proxmox_installed` = **PVE läuft nachweislich** (Task 4). -Das Abbild schreibt **`installimage`** aus dem Hetzner-Rettungssystem, mit -einem Proxmox-Abbild aus dessen Liste. Kein `debootstrap`, kein eigener -Partitionierer: der Anbieter kennt seine Hardware besser als dieses Skript, und -ein selbstgebauter Bootpfad auf fremdem Blech kommt bei einem Fehler nur über -die Anbieterkonsole zurück. +> **Und ein zweites Mal korrigiert, an der Mechanik.** Hier stand kurzzeitig +> `installimage` mit einem Proxmox-Abbild. **Das gibt es nicht:** Hetzners +> `installimage` führt kein Proxmox, es gilt dort als nicht unterstützt. Wer +> danach sucht, findet nur Debian — und landet wieder beim Zwischensystem, das +> gerade abgeschafft wurde. -**Der genaue Abbildname wird bei der Abnahme festgehalten, nicht hier geraten.** -Die Liste gehört dem Anbieter und ändert sich; das Skript sucht sie zur Laufzeit -ab und **bricht ab, wenn es kein passendes Proxmox-Abbild findet** — dieselbe -Regel wie beim unbekannten Release in Task 4. +Der Weg ist die **offizielle Proxmox-ISO mit eingebetteter Antwortdatei**, seit +PVE 8.2 der reguläre Weg für unbeaufsichtigte Installationen und von Hetzner +selbst als Anleitung geführt: -Die Partitionierung kommt aus den `PART`-Zeilen der `installimage`-Vorgabe: -**Root-Partition als letzte auf der Platte, kein LVM** (Falle 2 aus Block A — -sie gilt für den Host genauso, weil die Vorlage später von hier aus gebaut -wird). Danach Neustart aus dem Rettungssystem heraus. +1. **Bootmodus feststellen** (Legacy oder UEFI) — davon hängt der QEMU-Aufruf ab. +2. `answer.toml` schreiben: `[global]` mit `fqdn`, `country`, `timezone`, + `root-password-hashed` und `root-ssh-keys`; `[network]` mit `source`; + `[disk-setup]` mit dem Dateisystem und der Plattenwahl. +3. **`proxmox-auto-install-assistant prepare-iso`** backt die Antwortdatei in + die ISO. Vorher `validate-answer` — eine ISO, die wegen eines Tippfehlers in + den interaktiven Modus fällt, hängt danach unsichtbar in QEMU. +4. Die ISO **unter QEMU** laufen lassen, die gegen die **echten Platten** + schreibt. Kein VNC, kein Klick: der Eintrag „Automated Installation" wird + nach zehn Sekunden von selbst gewählt. +5. Neustart aus dem Rettungssystem heraus. -**Anbieter:** heute nur Hetzner-dediziert. Ein zweiter Weg (netcup, kein -`installimage`) wird erst geschrieben, wenn eine Maschine dasteht, auf der er -abgenommen werden kann — ein ungeprüfter Rückfallpfad ist genau die Behauptung, -die dieser Plan sonst überall vermeidet (R22). +**Dateisystem: ZFS** (`filesystem = "zfs"`, `zfs.raid` passend zur Plattenzahl). +Damit ist auch kein LVM im Spiel. `arc-max` gehört ausdrücklich in die +Antwortdatei — die Vorgabe nimmt sich die Hälfte des Arbeitsspeichers, und den +braucht ein Host, der Kunden trägt, für die Gäste. -Der Neustart ist die erste Stelle, an der das Skript die Kontrolle verliert. Es -hinterlässt deshalb einen systemd-Dienst, der es nach dem Hochfahren **selbst -wieder aufnimmt** — mit demselben Code und derselben Fortschrittsdatei. +> **Falle 2 gilt dem Gast, nicht dem Host — hier stand es falsch.** Die frühere +> Begründung („gilt für den Host genauso, weil die Vorlage später von hier aus +> gebaut wird") trägt nicht: `GrowGuestFilesystem` wächst ein *Gast*-Dateisystem, +> und die Vorlage entsteht in **Task 8** aus einem Debian-Cloud-Image, nicht aus +> dem Plattenlayout des Hosts. **Für die Vorlage bleibt Falle 2 unverändert +> verbindlich.** Für den Host ist sie gegenstandslos; dass ZFS ohnehin ohne LVM +> auskommt, ist ein Nebeneffekt und nicht der Grund. + +**Anbieter:** heute nur Hetzner-dediziert. Ein zweiter Weg (netcup) wird erst +geschrieben, wenn eine Maschine dasteht, auf der er abgenommen werden kann — ein +ungeprüfter Rückfallpfad ist genau die Behauptung, die dieser Plan sonst überall +vermeidet (R22). Der ISO-Weg ist dabei die bessere Ausgangslage als +`installimage`: er hängt an nichts, was nur einem Anbieter gehört. + +**Was der Installer verlangt und die Befehlszeile nicht mitbringt.** Die +Antwortdatei braucht `fqdn` und ein Root-Kennwort. Keins von beidem steht in den +sechs Angaben aus Task 1. Entschieden, bis jemand widerspricht: + +- **`fqdn`** wird aus dem Hostnamen gebildet, den CluPilot ohnehin kennt. Bis + der Adminbereich ihn mitgibt, wird er aus der Rückwärtsauflösung der + öffentlichen IP genommen und, wenn auch die nichts hergibt, aus `--wg-ip` + abgeleitet. Der Name wird in Task 9 ohnehin gegen das ersetzt, was CluPilot + führt. +- **Das Root-Kennwort wird zufällig erzeugt und weggeworfen.** Niemand braucht + es: die Plattform meldet sich nicht mehr per SSH an (Spec §6), und der Plan + sagt für den Fehlerfall ausdrücklich, dass eine halb installierte Maschine + **neu aufgesetzt und nicht nachgebessert** wird (Task 10). Ein Kennwort + aufzubewahren, das nur im Notfall gebraucht würde, den es laut Plan nicht + gibt, schafft nur eine weitere Stelle, an der ein Geheimnis liegt. +- **Optional `--root-ssh-key`.** Gibt der Adminbereich einen öffentlichen + Schlüssel mit, landet er als `root-ssh-keys` in der Antwortdatei. Ohne die + Angabe gibt es keinen Weg per SSH auf die Maschine, und das ist die Vorgabe. + +Der Neustart ist die erste Stelle, an der das Skript die Kontrolle verliert. +**Der Wiederanlauf ist kein handgeschriebener systemd-Dienst mehr** — die +Antwortdatei hat dafür einen `[first-boot]`-Abschnitt. Mit +`source = "from-iso"` liegt das Skript schon in der ISO und startet nach dem +Hochfahren von selbst; das ist auch der einzige Weg, der vor dem Tunnel +funktioniert, weil ein `from-url`-Hook CluPilot noch nicht erreichen könnte. **Und genau das ist der Punkt, an dem „dieselbe Fortschrittsdatei" Arbeit ist und keine Feststellung.** Das Rettungssystem läuft im Arbeitsspeicher; sein