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 78a532d..aaadbb8 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 @@ -58,6 +58,22 @@ Getrennte Dateien, weil `template.sh` und `network.sh` unabhängig voneinander geprüft und wiederholt werden — und weil ein Skript, das alles in einer Datei macht, beim Nachlesen im Fehlerfall unbrauchbar ist. +**Wie es auf die Maschine kommt** (stand in keiner der beiden Fassungen, ist +aber entschieden): als **Archiv**. Die kopierte Zeile aus dem Adminbereich holt +`bootstrap.tar.gz`, packt es nach `/opt/clupilot/bootstrap` aus und startet von +dort — ungefähr so: + +```sh +curl -fsSL https://clupilot.cloud/bootstrap.tar.gz | tar xz -C /opt/clupilot \ + && /opt/clupilot/bootstrap/clupilot-bootstrap.sh --code … --wg-private … … +``` + +Ein `curl … | sh` schied aus: es kann keine `lib/` haben, und die getrennten +Dateien oben sind kein Schmuck. Das Archiv ist eine **statische Datei**, kein +Endpunkt, der Auskunft gibt — Spec §5 bleibt damit unangetastet. Das Ausliefern +selbst gehört zum Plattform-Plan (Task 7 zeigt die Zeile); dieser Plan setzt nur +voraus, dass das Skript samt `lib/` unter `/opt/clupilot/bootstrap` liegt. + --- ### Task 1: Gerüst, Melden und Nachreichen @@ -121,9 +137,43 @@ genau hier seine einzige Gelegenheit, es nicht zu tun. - [ ] **Step 1: Schreiben** -Debian 13 ins Zielsystem, **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. +> **Korrigiert gegenüber der ersten Fassung.** Dort stand „Debian 13 ins +> Zielsystem", und danach hätte Task 4 daraus einen Proxmox-Host gemacht. Der +> Betreiber hat das bestritten, und er hat recht: aus dem Rettungssystem wird +> **Proxmox direkt** installiert. Es gibt kein Debian-Zwischensystem, das +> nachher jemand umbaut. +> +> **Die Abschnittsschlüssel bleiben trotzdem unverändert** — sie sind die +> einzige Absprache mit dem Plattform-Plan und werden nicht wegen einer +> Umbenennung angefasst. Sie passen auch weiterhin, denn Proxmox VE *ist* +> Debian mit PVE-Kernel und -Paketen: +> +> - `debian_installed` = **Grundsystem geschrieben** (das Abbild liegt auf der +> Platte). Die Beschriftung in der Konsole heißt entsprechend +> „Grundsystem geschrieben", nicht „Debian installiert" — das ist Sache von +> 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. + +**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. + +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. + +**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). 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 @@ -153,7 +203,9 @@ bewiesen, bevor neu gestartet wird, nicht danach gehofft. Neustart von allein weiterläuft. **Dazu: nach dem Hochfahren in `/var/lib/clupilot/progress.jsonl` nachsehen, dass die Zeilen von *vor* dem Neustart noch dort stehen, mit ihren ursprünglichen Zeitstempeln.** -- [ ] **Step 3: Committen.** `Write Debian and survive the first reboot` +- [ ] **Step 3: Committen.** `Write the image and survive the first reboot` + (war `Write Debian and survive the first reboot`, bevor klar war, dass kein + Debian-Zwischensystem entsteht) --- @@ -161,14 +213,38 @@ bewiesen, bevor neu gestartet wird, nicht danach gehofft. - [ ] **Step 1: Schreiben** +> **Korrigiert mit Task 3.** PVE kommt jetzt schon mit dem Abbild. Dieser +> Abschnitt **installiert** es also nicht mehr, er **nimmt es ab und bringt +> seine Paketquellen in Ordnung** — und genau dafür wird dasselbe Wissen +> gebraucht, nur an anderer Stelle. + **Lies zuerst `InstallProxmoxVe.php`.** Die Codename-Tabelle dort kennt Debian 13 und PVE 9 und ist aus einem echten Fehler entstanden. Übernimm sie, statt die Paketquellen zu tippen — und übernimm auch, dass ein **unbekanntes Release -abbricht** statt zu raten. +abbricht** statt zu raten. Vier Dinge stehen dort, die hier alle gebraucht +werden: + +1. **Die Zuordnung Codename → Suite und Release-Schlüssel.** Ein Abbild, dessen + PVE-Suite nicht zu seinem Debian passt, ist ein Fund und kein Schönheitsfehler + — PVE gegen eine andere libc gebaut. Passt es nicht, **abbrechen**. +2. **Ein unbekannter Unterbau bricht ab.** Nicht „trixie ist das neueste, also + trixie". Das nächste Debian ist auch unbekannt, und dann sieht niemand hin. +3. **Die Enterprise-Quelle muss weg.** Ein Proxmox-Abbild bringt + `/etc/apt/sources.list.d/pve-enterprise.list` mit, und die scheitert ohne + Abonnement bei **jedem** `apt-get update`. Das ist keine Schönheitskorrektur: + danach schlägt jede Paketinstallation der folgenden Abschnitte fehl. +4. **`Signed-By` auf die Proxmox-Quelle begrenzen.** Sonst bürgt der + Proxmox-Schlüssel für alles, was später in `sources.list` auftaucht. Deshalb + die `.sources`-Datei (deb822) und nicht die alte `.list`-Zeile — und die alte + dabei entfernen, weil eine stehengebliebene `bookworm`-Zeile auf einer + trixie-Maschine genau die Vermischung ist, die Punkt 1 verbietet. - [ ] **Step 2: Auf echter Hardware prüfen.** `pveversion` antwortet, der PVE-Kernel - läuft. -- [ ] **Step 3: Committen.** `Install Proxmox from the sources this Debian actually has` + läuft (`uname -r` enthält `-pve`), und **`apt-get update` läuft ohne Fehler + durch** — das ist der Beweis, dass die Enterprise-Quelle wirklich weg ist und + nicht nur überschrieben wurde. +- [ ] **Step 3: Committen.** `Point Proxmox at the sources this Debian actually has` + (war `Install Proxmox …`, bevor das Abbild PVE schon mitbrachte) ---