Files
homelab-infra/docs/DR_WORKSTATION_SETUP.md
T
Micha 9ca6e47472 docs(dr): wsl2 + borg setup-runbook fuer den gaming-pc
Schritt-fuer-Schritt Runbook fuer den letzten verbleibenden P1-Operator-
Punkt: WSL2 + Borg-Client + SSH-Keys + Quartals-Smoke-Skript auf dem
Operator-Gaming-PC einrichten.

7 Schritte, ~30-60 Min einmaliger Aufwand. Inhalt:
- WSL2 Ubuntu installieren
- borgbackup installieren
- Hetzner-DR-Key aus offline-USB nach ~/.ssh kopieren
- borg list Smoke gegen Hetzner Storage Box
- GitHub-Deploy-Key analog
- dr-smoke.sh Quartals-Skript ablegen
- Bestaetigung in EXTERNAL_DEPENDENCIES und AUDIT-Restliste nachziehen

Troubleshooting-Sektion fuer die haeufigsten Stolpersteine
(WSL-Update, Key-Permissions, Port-23-Block, HTTPS-vs-SSH-URL).

REPO_MAP.md um Verweis auf das neue Runbook ergaenzt.

Wenn dieses Runbook abgearbeitet ist, sind alle vier Bare-Metal-DR-Pillars
produktionsreif.
2026-06-03 20:32:27 +02:00

6.9 KiB

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:

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):

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:

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):

mkdir -p ~/.ssh
cp /mnt/<USB-Buchstabe>/dr-hetzner-2026-06-03/dr-hetzner ~/.ssh/dr-hetzner
chmod 600 ~/.ssh/dr-hetzner

<USB-Buchstabe> ist meistens e, f oder g - Windows-Laufwerke werden in WSL unter /mnt/<buchstabe> gemountet.

Smoke-Test:

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:

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:

cp /mnt/<USB-Buchstabe>/dr-readonly-2026-06-03/dr-readonly ~/.ssh/dr-readonly
chmod 600 ~/.ssh/dr-readonly

Smoke-Test gegen den privaten GitHub-Mirror:

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:

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 ~/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"

wsl --update
wsl --shutdown
wsl --install -d Ubuntu

Hetzner-SSH fragt nach Passwort statt Key-Login zu akzeptieren

Permissions des Keys pruefen:

ls -la ~/.ssh/dr-hetzner

Muss -rw------- (also 600) sein. Wenn anders:

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:

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.