489a429316
- MASTER_TODO.md is now the only status list: parked decisions point to DECISIONS.md, done log capped at 5 condensed entries - delete AUDIT_2026-05-25_TODO.md (open items and parked decisions fully covered by MASTER_TODO/DECISIONS) - AI_CONTEXT.md: drop duplicated status block, keep rules and pointers - EXTERNAL_DEPENDENCIES.md: condense review log to recent entries - fix references in DR_WORKSTATION_SETUP, EXTERNAL_OPERATOR_RUNBOOK, STORAGE_LAYOUT, REPO_MAP, docs/README Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
226 lines
7.1 KiB
Markdown
226 lines
7.1 KiB
Markdown
# 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/<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:
|
|
|
|
```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/<USB-Buchstabe>/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:
|
|
|
|
Stand 2026-06-06: Das Skript liegt zusaetzlich versioniert unter
|
|
`ops/maintenance/dr-workstation-smoke.sh` und wurde auf `baerchen` bereits nach
|
|
`~/dr-smoke.sh` in die Ubuntu-WSL kopiert. Borg 1.2.8 ist installiert, die
|
|
DR-Key-Arbeitskopien liegen unter `~/.ssh/dr-readonly` und
|
|
`~/.ssh/dr-hetzner`, GitHub-Read-Smoke und Hetzner-SSH-Smoke sind erfolgreich.
|
|
Der finale Borg-Smoke via `bash ~/dr-smoke.sh` wurde am 2026-06-06 ebenfalls
|
|
erfolgreich gefahren (`DR-Smoke OK (2026-06-06 10:05:30)`). Die Borg-Passphrase
|
|
wurde nur interaktiv eingegeben und nicht gespeichert.
|
|
|
|
```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 |
|
|
```
|
|
|
|
Falls der Punkt noch als offen in `docs/MASTER_TODO.md` steht, dort in den Kurzlog uebernehmen.
|
|
|
|
---
|
|
|
|
## 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.
|