diff --git a/STATUS.md b/STATUS.md index 3dca28e..de2b389 100644 --- a/STATUS.md +++ b/STATUS.md @@ -2,9 +2,9 @@ -## Issues (33 open, 13 closed) +## Issues (32 open, 14 closed) -Verteilung: M1 8 · M2 19 · M4 2 · M5 4 +Verteilung: M1 7 · M2 19 · M4 2 · M5 4 | Issue | Status | Meilenstein | Priorität | Title | |---|---|---|---|---| @@ -12,7 +12,6 @@ Verteilung: M1 8 · M2 19 · M4 2 · M5 4 | [0004](docs/issues/0004-overmind-02-e1000e-nic-hang-beobachtung-nach.md) | waiting | M1 | low | OVERMIND-02: e1000e-NIC-Hang — Beobachtung nach EEE-Fix + Firmware-Update | | [0008](docs/issues/0008-cfgmon-03-prometheus-remote-write-und-loki.md) | waiting | M1 | medium | CFGMON-03: Prometheus-Remote-Write und Loki öffentlich ohne Auth — Weg A, nachgelagerte Prüfung | | [0009](docs/issues/0009-cfgmon-04-grafana-admin-credentials-aus-env.md) | open | M2 | low | CFGMON-04: Grafana-Admin-Credentials aus .env gelten nicht für die HTTP-API | -| [0010](docs/issues/0010-cfgmon-09-gitea-backups-off-host-borg-storage.md) | in-progress | M1 | medium | CFGMON-09: Gitea-Backups off-host (Borg/Storage Box) — Backup-Cron ist DEAKTIVIERT | | [0014](docs/issues/0014-cfgmon-14-root-zugang-ueber-die-docker-gruppe.md) | waiting | M2 | low | CFGMON-14: Root-Zugang über die docker-Gruppe umgeht sudo und hinterlässt keine Spur | | [0015](docs/issues/0015-cfgmon-15-token-hygiene-einmal-tokens-der.md) | next | M2 | medium | CFGMON-15: Token-Hygiene — Einmal-Tokens der LABNET-02-Nacht widerrufen | | [0018](docs/issues/0018-doc-01-wiki-rollout-abschliessen-ci-freigaben.md) | open | M2 | low | DOC-01: Wiki-Rollout abschließen — CI-Freigaben, Zeitplan, Dokploy-Stack, wiki.lab | diff --git a/docs/issues/0010-cfgmon-09-gitea-backups-off-host-borg-storage.md b/docs/issues/0010-cfgmon-09-gitea-backups-off-host-borg-storage.md index 4f73582..4e5442b 100644 --- a/docs/issues/0010-cfgmon-09-gitea-backups-off-host-borg-storage.md +++ b/docs/issues/0010-cfgmon-09-gitea-backups-off-host-borg-storage.md @@ -1,7 +1,7 @@ --- type: issue id: "0010" -status: in-progress +status: rejected created: 2026-08-01 milestone: M1 priority: medium @@ -62,3 +62,32 @@ potenziell unlesbarer Sicherungen. **Offen (nur mit Host-Zugang, kein SSH zu CFGMON von hier):** Cron reaktivieren; SSH-Key auf CFGMON erzeugen + in der Storage Box hinterlegen; `gitea-backup.sh` auf Borg umstellen. + +## Verworfen 2026-08-14 — Gitea braucht kein eigenes Backup (Entscheidung sorb) + +**Begründung:** Gitea auf rohana ist **Push-Mirror**, nicht Quelle. Kanonisch ist git.lab +(ADR-0001); alle gespiegelten Repos lassen sich nach einem Totalverlust schlicht neu +befüllen. Die Issues liegen seit der Migration ohnehin auf git.lab, der Gitea-Tracker ist +leer. Ein nächtlicher `gitea dump` sichert damit im Wesentlichen eine Kopie — der Aufwand +(Borg-Repo, Host-SSH-Key, Script-Umbau) steht in keinem Verhältnis. + +Der auskommentierte Cron bleibt entsprechend aus; die Platte (73 % voll) wird nicht weiter +belastet, der Altstand `/opt/backup/gitea-dump-2026-07-30.tar.gz` kann weg. + +### Dokumentierte Nuance: was auf rohana *kein* Spiegel ist + +Nicht aus git.lab wiederherstellbar sind die **Gitea-Packages (Container-Registry)** — der +Cluster zieht vier Images ausschließlich von dort: + +| Image | Rolle | +|---|---| +| `threadnet-web:v0.4.3` | Element-Web-Fork, den die Nutzer im Browser laden | +| `axion-backup:v2` | führt die drei nächtlichen Borg-Backups aus (7 Pods) | +| `axion-secret-rotation:v1` | TURN-Secret-Rotation | +| `clamav-http-scanner:v1.0.0` | client-seitiges Scannen | + +Bei Verlust von rohana laufende Pods weiter, aber **neue Pods können nicht mehr pullen**, bis +die Images neu gebaut sind — und Flux verliert zugleich seine Source. Das ist **kein +Datenverlust** (alle vier sind aus dem Quellcode reproduzierbar: Dockerfiles in gitops bzw. +den Fork-Repos), sondern **Wiederherstellungszeit**. Bewusst akzeptiert; die Reproduzierbarkeit +des Build-Wegs ist ohnehin über #0022/#0033 adressiert. diff --git a/docs/issues/0030-der-restore-ist-nie-geprobt-sicherungen-sind.md b/docs/issues/0030-der-restore-ist-nie-geprobt-sicherungen-sind.md index 9d12fd7..b44e58b 100644 --- a/docs/issues/0030-der-restore-ist-nie-geprobt-sicherungen-sind.md +++ b/docs/issues/0030-der-restore-ist-nie-geprobt-sicherungen-sind.md @@ -92,3 +92,23 @@ selbst ungesichert ist. 2. Restore-Verfahren schreiben (Reihenfolge, Herkunft von age-Key und kubeconfig). 3. Einmal gegen eine Wegwerf-Umgebung durchspielen. 4. Ergebnis nach `verfahren/` und Wiederholungsrhythmus festlegen. + +## Update 2026-08-14 — age-Schlüssel ist ausgelagert (Befund entschärft) + +sorb bestätigt: der private age-Schlüssel liegt **zusätzlich im Passwort-Vault**, also außerhalb +von Cluster und Mac. Damit ist die oben beschriebene Zirkelabhängigkeit **aufgelöst** — ein +gleichzeitiger Verlust von Hetzner-Host und Laptop macht die Borg-Repos nicht mehr unlesbar. +Der Befund bleibt hier stehen, weil die Kette (Backup lesen → Borg-Passphrase → SOPS → **ein** +age-Schlüssel) beim Schreiben des Restore-Verfahrens explizit auftauchen muss: der Vault ist +Teil des Wiederherstellungswegs, nicht nur Nebensache. + +**Zu ergänzen beim Verfahren (Schritt 2):** Fundort des Schlüssels benennen (nur *wo*, nie der +Wert) und im Restore-Ablauf als ersten Schritt führen — ohne ihn ist kein weiterer Schritt +möglich. + +## Restaufwand nach heutiger Bestandsaufnahme + +Schritt 1 (Bestandsaufnahme) ist erledigt und positiv ausgefallen; Schritt 2–4 stehen aus: +Restore-Verfahren schreiben, einmal gegen eine Wegwerf-Umgebung durchspielen, Ergebnis nach +`verfahren/` und Wiederholungsrhythmus. Die Homelab-Seite (GitLab auf Overmind → MinIO/DSM) +ist weiterhin ungeprüft — von der Hetzner-Seite aus nicht erreichbar.