diff --git a/docs/DR_WORKSTATION_SETUP.md b/docs/DR_WORKSTATION_SETUP.md new file mode 100644 index 0000000..2d9087f --- /dev/null +++ b/docs/DR_WORKSTATION_SETUP.md @@ -0,0 +1,218 @@ +# DR-Workstation Setup-Runbook + +Stand: 2026-06-03 + +Konkrete Schritte, um den Operator-Gaming-PC als DR-Workstation einzurichten. Der Endzustand ist in `docs/EXTERNAL_DEPENDENCIES.md` Abschnitt "DR-Workstation Bare-Metal-Kit" beschrieben; dieses Dokument ist der Weg dahin. + +Vorbedingung: Repo-Clone unter `G:\Gitea_Clone\homelab-infra`, Hetzner-DR-SSH-Key und GitHub-Deploy-Key liegen offline auf USB. + +Aufwand: einmalig ~30-60 Min interaktiv. + +--- + +## Schritt 1 - WSL2 + Ubuntu installieren (~15 Min) + +PowerShell als **Administrator** oeffnen: + +```powershell +wsl --install -d Ubuntu +``` + +- Bei "Virtualization nicht aktiviert"-Fehler: BIOS rein, Intel VT-x / AMD-V einschalten, neu starten, Befehl wiederholen. +- Nach Install: Ubuntu startet automatisch und fragt nach Username + Passwort. Username egal (z. B. `dr`), Passwort merken (wird fuer `sudo` gebraucht). +- Reboot kann noetig sein - PowerShell sagt es. + +Verifikation in Ubuntu (oeffnet sich automatisch): + +```bash +lsb_release -a +uname -r +``` + +Erwartet: `Ubuntu 24.04 LTS`, Kernel beginnt mit `5.x` oder `6.x` und enthaelt `microsoft-standard-WSL2`. + +--- + +## Schritt 2 - Borg-Client installieren (~3 Min) + +In der Ubuntu-Shell: + +```bash +sudo apt update +sudo apt install -y borgbackup openssh-client +borg --version +``` + +Erwartet: `borg 1.2.x` oder `1.4.x`. Beides reicht fuer das produktive Borg-Repo auf Hetzner. + +--- + +## Schritt 3 - Hetzner-DR-SSH-Key in WSL ablegen (~5 Min) + +Wichtig: der Private-Key liegt offline auf USB. Fuer die Workstation-Routine wird er auf das WSL-Filesystem kopiert - **das ist die Arbeitskopie**, nicht die Offline-Sicherung. Wenn die WSL kaputtgeht, kommt der Key zurueck vom USB; das Offline-Original bleibt unangetastet. + +USB einstecken. In WSL kopieren (Pfad anpassen je nach Laufwerksbuchstabe): + +```bash +mkdir -p ~/.ssh +cp /mnt//dr-hetzner-2026-06-03/dr-hetzner ~/.ssh/dr-hetzner +chmod 600 ~/.ssh/dr-hetzner +``` + +`` ist meistens `e`, `f` oder `g` - Windows-Laufwerke werden in WSL unter `/mnt/` gemountet. + +Smoke-Test: + +```bash +ssh -i ~/.ssh/dr-hetzner -o IdentitiesOnly=yes -p 23 \ + u565255@u565255.your-storagebox.de "ls" +``` + +Erwartet: vier Verzeichnisse (`backup`, `backup2`, `hetzner_borg_appdata`, `hetzner_borg_appdata_critical`), exit 0, kein Passwort-Prompt. + +--- + +## Schritt 4 - Borg-Passphrase eingeben und `borg list` testen (~5 Min) + +Borg verlangt die Passphrase beim ersten Repo-Zugriff. Die liegt offline gesichert (Operator-Bestaetigung 2026-05-26). + +Einmaliger Smoke gegen das wichtige Repo: + +```bash +export BORG_RSH="ssh -i ~/.ssh/dr-hetzner -o IdentitiesOnly=yes -p 23" +borg list ssh://u565255@u565255.your-storagebox.de/./hetzner_borg_appdata_critical +``` + +Borg fragt nach der Passphrase. Eingeben (sie wird nicht angezeigt, das ist normal). + +Erwartet: Liste mit Archiv-Namen, jeder im Stil `Taegliche-Sicherung-YYYY-MM-DDTHH:MM:SS.xxx`. Wenn ja: Borg-Schicht funktioniert. + +**Wert wird nirgendwo gespeichert.** `BORG_PASSPHRASE`-Env-Variable wird **nicht** dauerhaft gesetzt; Passphrase wird im Notfall immer interaktiv eingegeben. + +--- + +## Schritt 5 - GitHub-Deploy-Key in WSL ablegen (~3 Min) + +Gleiches Muster wie Hetzner-Key: + +```bash +cp /mnt//dr-readonly-2026-06-03/dr-readonly ~/.ssh/dr-readonly +chmod 600 ~/.ssh/dr-readonly +``` + +Smoke-Test gegen den privaten GitHub-Mirror: + +```bash +GIT_SSH_COMMAND="ssh -i ~/.ssh/dr-readonly -o IdentitiesOnly=yes" \ + git ls-remote git@github.com:michaelkaleschke-spec/homelab-infra.git | head -3 +``` + +Erwartet: HEAD und mindestens ein `refs/heads/master`-Eintrag. + +--- + +## Schritt 6 - Quartals-Smoke als Skript ablegen (~5 Min) + +Damit der "ich pruefe das vierteljaehrlich"-Schritt zur Routine wird, ein kleines Skript ins WSL-Home: + +```bash +cat > ~/dr-smoke.sh <<'EOF' +#!/bin/bash +# DR-Workstation Quartals-Smoke +# Pruefen: GitHub-Read, Hetzner-SSH, Borg-Repo-Erreichbarkeit +# Passphrase wird interaktiv abgefragt - Skript speichert keinen Wert. +set -e +echo "=== GitHub Deploy-Key ===" +GIT_SSH_COMMAND="ssh -i ~/.ssh/dr-readonly -o IdentitiesOnly=yes" \ + git ls-remote git@github.com:michaelkaleschke-spec/homelab-infra.git \ + | head -1 +echo +echo "=== Hetzner SSH-Login ===" +ssh -i ~/.ssh/dr-hetzner -o IdentitiesOnly=yes -p 23 \ + u565255@u565255.your-storagebox.de "ls" | head -5 +echo +echo "=== Borg-Repo (Passphrase wird abgefragt) ===" +export BORG_RSH="ssh -i ~/.ssh/dr-hetzner -o IdentitiesOnly=yes -p 23" +borg info ssh://u565255@u565255.your-storagebox.de/./hetzner_borg_appdata_critical | head -10 +echo +echo "DR-Smoke OK ($(date '+%F %T'))" +EOF +chmod +x ~/dr-smoke.sh +``` + +Aufrufen mit: + +```bash +bash ~/dr-smoke.sh +``` + +Termin im Kalender: einmal pro Quartal, ~5 Min Aufwand. + +--- + +## Schritt 7 - Eintrag in EXTERNAL_DEPENDENCIES Review nachziehen + +Nach erfolgreicher Einrichtung im Repo dokumentieren. In `docs/EXTERNAL_DEPENDENCIES.md` unter "Review": + +``` +| 2026-06-XX | DR-Workstation produktiv: WSL2 Ubuntu auf Gaming-PC, borgbackup installiert, Hetzner-DR-Key und GitHub-Deploy-Key in ~/.ssh, Quartals-Smoke-Skript ~/dr-smoke.sh. Bare-Metal-DR-Pillars sind damit alle vier produktionsreif. | Quartalsweise Smoke laufen lassen | +``` + +Audit-Restliste analog: in `docs/AUDIT_2026-05-25_TODO.md` den P1 "DR-Workstation Bare-Metal-Kit: WSL2 + Borg-Client installieren" auf erledigt setzen und unter "Zuletzt geschlossen" einen Eintrag mit Smoke-Ergebnis machen. + +Wenn ich (Claude) am Tag der Einrichtung mit SSH-Zugang dabei bin, ziehe ich das nach. Sonst per `git add docs/EXTERNAL_DEPENDENCIES.md docs/AUDIT_2026-05-25_TODO.md && git commit && git push`. + +--- + +## Troubleshooting + +### `wsl --install` schlaegt fehl mit "WSL 2 requires an update" + +```powershell +wsl --update +wsl --shutdown +wsl --install -d Ubuntu +``` + +### Hetzner-SSH fragt nach Passwort statt Key-Login zu akzeptieren + +Permissions des Keys pruefen: + +```bash +ls -la ~/.ssh/dr-hetzner +``` + +Muss `-rw-------` (also `600`) sein. Wenn anders: + +```bash +chmod 600 ~/.ssh/dr-hetzner +``` + +Bei weiterhin Passwort-Prompt: Pubkey-Inhalt gegen das authorized_keys-Format der Storage Box pruefen (sollte `ssh-ed25519 AAAA...` ohne Leerzeilen sein). + +### `borg list` haengt oder schlaegt mit "Connection refused" fehl + +Port 23 explizit pruefen: + +```bash +nc -vz u565255.your-storagebox.de 23 +``` + +Wenn das fehlschlaegt: Hetzner-Status-Page pruefen, sonst SSH-Verbindung an sich blockiert (Firewall, ISP). + +### GitHub-Pull fragt nach Username/Passwort + +Stelle sicher dass die URL `git@github.com:...` ist (SSH), nicht `https://github.com/...`. Bei HTTPS wuerde GitHub Username/PAT verlangen, was wir bewusst nicht eingerichtet haben. + +--- + +## Was nach diesem Runbook gilt + +Mit allen Schritten erledigt ist der vierte Bare-Metal-DR-Pillar zu (siehe `docs/EXTERNAL_DEPENDENCIES.md`). Der DR-Workstation-Status ist dann: + +- WSL2 Ubuntu installiert +- borgbackup einsatzbereit +- SSH-Keys (Hetzner, GitHub) in `~/.ssh/` +- Quartals-Smoke-Skript laeuft + +Damit ist im Bare-Metal-Fall der Pfad "Unraid tot -> Gaming-PC nimmt die DR-Arbeit auf" tatsaechlich gangbar, nicht nur in Doku theoretisch. diff --git a/docs/REPO_MAP.md b/docs/REPO_MAP.md index 8d631b7..9adbda1 100644 --- a/docs/REPO_MAP.md +++ b/docs/REPO_MAP.md @@ -34,6 +34,7 @@ Details gilt immer die betroffene Compose-Datei oder das jeweilige Runbook. | `docs/SECRETS_MAP.md` | Secret-Namen und Pfade ohne Werte | | `docs/GITOPS_DRIFT_RUNBOOK.md` | Git/Gitea/Komodo/Docker/Host-Drift | | `docs/AUDIT_2026-05-25_TODO.md` | aktuelle Restliste | +| `docs/DR_WORKSTATION_SETUP.md` | Schritt-fuer-Schritt-Runbook fuer den DR-Gaming-PC (WSL2 + Borg-Client + SSH-Keys) | ## Wichtige Skripte