Files
homelab-infra/docs/MASTER_TODO.md
T

16 KiB

Master To-do - KalliLab CORE

Stand: 2026-06-06 (Wochenend-Sprint, nach Status-Kategorien sortiert)

Diese Liste ist die zentrale Arbeitsliste fuer offene operative Punkte im Homelab. Detailentscheidungen bleiben in den verlinkten Runbooks; diese Datei haelt Status, naechsten konkreten Schritt und Quelle zusammen.

Status-Kategorien

  • Aktiv dieses Wochenende - soll jetzt vorankommen (Claude, Codex oder Operator); konkreter naechster Schritt steht.
  • Operator-Entscheidung - wartet auf eine bewusste Entscheidung des Betreibers (ja/nein/welche Option).
  • Geparkt - bewusst nicht jetzt, mit klarem Review-Trigger.
  • Extern blockiert - wartet auf ein externes Ereignis oder eine Abhaengigkeit (Nachtlauf, zweite Hardware, Geraetebeschaffung).

Owner-Aufteilung fuer das Wochenende: baerchen/Veeam/Backup-Verifikation liegt bei Codex; Doku-/Inventar-/Onboarding-Arbeit liegt bei Claude; Host-/Entscheidungsaufgaben beim Operator.


Aktiv dieses Wochenende

Thema Owner Naechster konkreter Schritt Quelle
Family-Onboarding erster Termin Operator Checkliste ist fertig (docs/FAMILY_ONBOARDING.md Abschnitt "Erster Onboarding-Termin"). Operator legt fest, welche Personen/Geraete real verfuegbar sind, und arbeitet die Reihenfolge Vaultwarden -> Immich -> Mealie pro Person ab docs/FAMILY_ONBOARDING.md, docs/AUDIT_2026-05-25_TODO.md
Restore-Test Unraid OS Flash (Stick-Boot) Operator Artefakt-Validierung am 2026-06-05 erledigt (ops/maintenance/check-unraid-flash-backup.sh, sha256 OK, 8 Kern-Configs). Verbleibt: physischer Ersatzstick-Boot-Test, wenn ein Wegwerf-Stick bereitliegt docs/RESTORE_MATRIX.md Abschnitt "Unraid OS Flash"
Restore-Test Tailscale Operator Runbook-Stub abarbeiten: State-Validierung + Reconnect nur auf Wegwerf-Host/VM, danach Geraet in Tailscale-Admin entfernen docs/RESTORE_MATRIX.md Abschnitt "Tailscale"
Authelia OIDC fuer Apps Operator/Claude Plan + Runbook erstellt 2026-06-06 (docs/AUTHELIA_OIDC_PLAN.md): v4.39-Client-Schema, Issuer/Endpoints, Secret-Erzeugung, Rollout-Reihenfolge. Naechster konkreter Schritt: Stufe-1-Proof Grafana (monitoring) ausrollen — Authelia-Client + GF_AUTH_GENERIC_OAUTH_*; lokaler Grafana-Admin bleibt Fallback (kein Lockout). Danach Familien-Apps (Immich/Nextcloud/Mealie/Paperless) docs/AUTHELIA_OIDC_PLAN.md, security/authelia/configuration.yml
Gast-/IoT-Netz einrichten Operator/Codex Preflight erledigt, Operator-UI-Schritt offen. Runbook docs/GUEST_IOT_NETWORK.md und Checks vorhanden. LAN-Preflight von baerchen gruen (8082/8181 blockiert), Host-Preflight auf Unraid gruen (Report /mnt/user/backups/restore-reports/guest-iot-preflight-2026-06-06-131316.md). Naechster Schritt: FRITZ!Box-Gastzugang aktivieren, Heimnetz-Zugriff im Gastnetz deaktiviert lassen, danach von einem Gast-WLAN-Geraet ops/maintenance/check-guest-iot-isolation.ps1 -Mode Guest ausfuehren docs/GUEST_IOT_NETWORK.md, docs/NETWORK_INVENTORY.md

Operator-Entscheidung

Stand 2026-06-06: keine offenen Operator-Entscheidungen. Alle am 2026-06-06 entschieden — Ergebnisse in "Aktiv", "Geparkt" bzw. "Entschieden 2026-06-06".


Geparkt

Bewusst nicht jetzt - mit Review-Trigger.

Thema Entscheidung / Trigger Quelle
USV-Anschaffung Auf Q3/2026 geparkt (2026-06-05). Power-Loss bleibt akzeptiertes Risiko. Trigger: Hardware-Upgrade, realer Stromausfall mit Datenfolge, oder Q3-Review ab 2026-07-01 docs/HARDWARE_INVENTORY.md
Cold-Backup-Rotation Bewusst Hetzner-only (2026-06-05). Keine zweite rotierende Cold-Kopie. Trigger: stark wachsender Datenwert, wiederholte Hetzner-Probleme, geaenderte Praeferenz docs/HARDWARE_INVENTORY.md
WAN-Ausfallschutz Spaeter evaluieren (2026-06-05). Mobilfunk-Failover inaktiv; lokale Apps laufen bei WAN-Ausfall weiter. Trigger: haeufigere/laengere DSL-Ausfaelle oder kritischer Remote-Zugang docs/NETWORK_INVENTORY.md
Docker Critical Events Watcher Aktiviert 2026-06-05: Unraid User Script docker-critical-events-at-start nutzt den Supervisor und steht in schedule.json auf frequency: start; Watcher manuell gestartet, Status running. Optionaler ntfy-Smoke wurde nachts bewusst nicht gesendet und kann spaeter mit docker-critical-events-supervisor.sh smoke nachgeholt werden docs/SERVICE_CATALOG.md, services/posture-check/docker-critical-events.sh, services/posture-check/unraid-user-scripts.md
Negativ-Test Backup-Frische Validiert 2026-06-06: ops/restore-tests/negative-freshness-alert-test.sh simuliert fehlende Dumps nur in einem synthetischen Restore-Lab-Pfad und sendet einen Test-Alert nach homelab-alerts; Host-Lauf schrieb Report /mnt/user/backups/restore-reports/freshness-negative-2026-06-06-130320.md (10 Criticals, produktive Dumps unangetastet). Quartalsweise wiederholen: ops/restore-tests/run-restore-checks.sh freshness-negative ops/restore-tests/README.md, docs/AUDIT_2026-05-25_TODO.md
End-to-end-DR-Drill Komplett-Bootstrap Phase 1-5 auf Wegwerf-Host; realistisch erst mit zweiter Hardware (siehe auch Extern blockiert) docs/AUDIT_2026-05-25_TODO.md, docs/DISASTER_RECOVERY.md
Wiederkehrende Restore-Drills Vaultwarden, Gitea, Authelia, Komodo, Paperless, Immich, Traefik, PostgreSQL, Mongo, Nextcloud, Mealie, Mail-Archiver nach Matrix-Intervallen rotieren docs/RESTORE_MATRIX.md, docs/RESTORE_HANDBOOK.md
Dedizierter SMB-User veeam-baerchen Optional spaeter, nur wenn Unraid-User-/Share-Rechte bewusst angefasst werden ops/windows-reinstall/docs/windows-image-backup-baseline.md
Nextcloud 2FA (Operator-TOTP) Geparkt (Entscheidung 2026-06-06): Operator-TOTP fuer Nextcloud erst zusammen mit der app-weiten Familien-/OIDC-Policy entscheiden. Trigger: OIDC-/SSO-Block (jetzt aktiv) erreicht die App-Login-Ebene docs/AUDIT_2026-05-25_TODO.md
Tailnet-Konsole aufraeumen (Rest) Nach Docker-Stack-Abbau (2026-06-06) nur noch tote Node-Eintraege: kallilab-core (down) und alter Offline-baerchen in der Tailscale-Admin-Konsole entfernen. Optional State-Pfad /mnt/user/appdata/tailscale nach _archive/. Trivial, kein Risiko docs/NETWORK_INVENTORY.md
CrowdSec vor Traefik Bewusst nicht umgesetzt; einzige WAN-Tuer ist 443/tcp, Authelia regulation: deckt Brute-Force ab. Neu bewerten bei breiterer Attack Surface docs/AUDIT_2026-05-25_TODO.md
Hermes-Agent NAS-Stack bleibt deaktiviert; Review-Deadline 2026-07-25 docs/AUDIT_2026-05-25_TODO.md, docs/SERVICE_CATALOG.md
Filebrowser-Mounts Bei zukuenftigem Hardening-Sprint Mount-Scope reduzieren docs/SERVICE_CATALOG.md
Scrutiny Privileged-Ausnahme Nur mit klarer Begruendung aendern; sonst dokumentierte Ausnahme beibehalten docs/SERVICE_CATALOG.md
Immich Redis named volume Anonymes Volume bei passender Wartung auf named volume umstellen oder Ausnahme dokumentieren docs/SERVICE_CATALOG.md
Storage-Wachstum Zweite NVMe, ZFS/BTRFS-Optionen, zweite Array-Disk nur bei Triggern aus Capacity-Doku docs/STORAGE_LAYOUT.md, docs/CAPACITY_AND_LIFECYCLE.md
Zweites Off-site-Ziel Bewusst nicht umgesetzt; neu bewerten bei Hetzner-Problemen oder wachsendem Datenwert docs/AUDIT_2026-05-25_TODO.md
Borg append-only auf Hetzner Operator-Entscheidung 2026-06-01: nicht umgesetzt (forced-command brach Key-Auth, Nutzen/Risiko unguenstig) docs/AUDIT_2026-05-25_TODO.md

Extern blockiert

Wartet auf ein externes Ereignis oder eine Abhaengigkeit.

Thema Blockiert durch Naechster Schritt sobald entblockt Quelle
baerchen Recovery-Test ohne Restore Haengt am physischen USB-Boot-Test Von USB VEEAMRE booten, SMB-Ziel mounten, Restore Point anzeigen, vor echtem Restore abbrechen. Owner: Codex/Operator ops/windows-reinstall/docs/windows-image-backup-baseline.md, docs/RESTORE_MATRIX.md
End-to-end-DR-Drill (Hardware-Teil) Keine zweite Wegwerf-Hardware verfuegbar Sobald zweite Hardware da ist: Komplett-Bootstrap Phase 1-5 fahren docs/DISASTER_RECOVERY.md

Erledigt im Wochenend-Sprint (2026-06-05)

  • Restore-Matrix "Naechste Restore-Test-Kandidaten" bereinigt: 5 am 2026-06-03 abgeschlossene Kandidaten entfernt, durch die 4 real offenen Pfade ersetzt; Stand-Datum aktualisiert.

  • Restore-Test-Runbook-Stubs fuer Unraid Flash / AdGuard / Tailscale / Redis 8 in docs/RESTORE_MATRIX.md ergaenzt.

  • Alte Windows-Doku bereinigt: WinRE-/Admin-Check-To-dos in boot-cleanup-plan-2026-06-04.md und laufwerks-neustruktur-2026-06-04.md als erledigt markiert.

  • docs/HARDWARE_INVENTORY.md: USV (Q3-Park), Cold-Backup (Hetzner-only) und Stromverbrauch (Operator-Entscheidung offen) von diffusen TBDs auf bewusste Entscheidungen mit Review-Triggern gehoben.

  • docs/NETWORK_INVENTORY.md: Tailscale-Inventar am 2026-06-05 real per read-only SSH gemessen und eingetragen: IPv6 fd7a:115c:a1e0::2c01:62b2, Exit Node nein, Subnet-Router fuer 192.168.178.0/24 aktiv (widerlegt fruehere Vermutung), Tailnet taild9fcf2.ts.net, Geraete-Snapshot + Dubletten-Hinweis. WAN-Failover und Gast-/IoT geschaerft. zu messen-Platzhalter entfernt. Tailscale-Inventar messen damit geschlossen.

  • ops/maintenance/check-unraid-flash-backup.sh neu: read-only Validierung des Flash-Artefakts (sha256, Frische, Kern-Configs, keine Extraktion). Am 2026-06-05 gegen den Host getestet: Exit 0, sha256 OK, 390 Eintraege, 8/8 Kern-Configs. docs/RESTORE_MATRIX.md mit Testdatum/Ergebnis aktualisiert. Artefakt-Validierung des Unraid-Flash-Backups damit erledigt; nur Stick-Boot-Test offen.

  • docs/FAMILY_ONBOARDING.md: Michi-Checkliste in eine echte Erste-Termin-Checkliste (Vorbereitung, Reihenfolge, Erfolgskriterium, bewusst spaeter) umgebaut.

  • docs/MASTER_TODO.md in vier Status-Kategorien (Aktiv / Operator-Entscheidung / Geparkt / Extern blockiert) umstrukturiert.

  • baerchen Veeam-Erstbackup: erster Full-Lauf 2026-06-05 erfolgreich geschrieben (Veeam-GUI 53,8 GB, Dauer 0:11:31, MetaCheck 0 Fehler/0 Warnungen, VSS job: success). Beleg in ops/windows-reinstall/docs/windows-image-backup-baseline.md; Veeam Storage Encryption war im ersten Lauf nicht aktiv und ist als Operator-Entscheidung nachgezogen.

  • Docker Critical Events Watcher auf Unraid aktiviert: Host-Clone auf Commit 2f3d184 aktualisiert, User Script /boot/config/plugins/user.scripts/scripts/docker-critical-events-at-start/script auf den Supervisor umgestellt, altes Script als script.bak-20260605-232621 gesichert, schedule.json zeigt frequency: start, Watcher laeuft mit PID 1681168. ntfy-Smoke am 2026-06-06 erfolgreich beim Operator angekommen.

  • Restore-Test AdGuard Home: automatisierter Test ops/restore-tests/adguard-restore-test.sh erstellt und am 2026-06-06 auf Unraid erfolgreich ausgefuehrt. Ergebnis: Borg-Config-Restore aus Archiv Taegliche-Sicherung-2026-06-06T04:30:05.910, isolierter Container restoretest-adguard, HTTP /control/status = 401, DNS-Smoke git.kaleschke.info -> 192.168.178.58, 7 Filterlisten-Eintraege, Report /mnt/user/backups/restore-reports/adguard-2026-06-06.md.

  • Restore-Test Redis 8: automatisierter Test ops/restore-tests/redis-restore-test.sh erstellt und am 2026-06-06 auf Unraid erfolgreich ausgefuehrt. Ergebnis: Restore aus /mnt/user/backups/borg/dumps/latest/shared-redis-pre-redis8-20260531-185011, isolierter Container restoretest-redis, PING = PONG, Redis 8.8.0, AOF 1, DBSIZE = 1, Report /mnt/user/backups/restore-reports/redis-2026-06-06.md.

  • Tailscale ACL-Policy restriktiv ausgerollt (2026-06-06): Von Default-Allow auf Tag-basierte grants-Policy umgestellt, gemeinsam mit dem Operator in lockout-sicherer Reihenfolge (additiv -> taggen -> Allow-all entfernen), jeder Schritt read-only per SSH verifiziert. Live: kallilabcore=tag:server, baerchen-1+iphone-14=tag:operator, tag:family vorbereitet/schlafend. Subnet-Route 192.168.178.0/24 bleibt via autoApprovers approved. Smoke-Tests gruen (Operator-SSH, AdGuard-Admin HTTP 302 ueber Tailnet, Ping 0%); untagged Nodes (kallilab-core Docker-Sidecar, alter baerchen) isoliert. Beleg: docs/NETWORK_INVENTORY.md Abschnitt "ACL-Policy — ANGEWENDET 2026-06-06". Familien-Dienste konkretisieren bei erstem realem Familiengeraet.

  • Redundanten Docker-Tailscale-Stack entfernt (2026-06-06): Befund: Host hatte zwei tailscaled — die funktionale native Plugin-Instanz kallilabcore (echtes TUN tailscale1, Subnet-Router, State im Flash-Backup) und den redundanten userspace-only Docker-Stack kallilab-core (host-services/tailscale/, routet nichts, nichts haengt dran). Sauber per GitOps abgebaut: Operator hat Komodo-Stack tailscale gestoppt+destroyed; danach git rm host-services/tailscale/, Glance-Widget entfernt, Architektur-/Service-Catalog-/DR-Bootstrap-/CLAUDE-/Restore-Matrix-/Netzwerk-Doku auf "natives Plugin" nachgezogen. Read-only verifiziert: Container weg, nur noch der native tailscaled, Subnet-Route + Operator-Zugriff intakt. Rest: tote Node-Eintraege in der Admin-Konsole entfernen (eigener Todo).

  • DR-Workstation Bare-Metal-Kit abgeschlossen: WSL2 Ubuntu 24.04 auf baerchen, Borg 1.2.8, GitHub-Read-DR-Key und Hetzner-DR-Key in WSL, ~/dr-smoke.sh vorhanden. Finaler Smoke 2026-06-06 erfolgreich: GitHub HEAD 3a263a4..., Hetzner Storage Box Repos sichtbar, Borg-Repo hetzner_borg_appdata_critical gelesen, Repository ID 5dd9b949..., encrypted Yes (repokey), DR-Smoke OK (2026-06-06 10:05:30). Passphrase wurde nur interaktiv eingegeben und nicht gespeichert.

  • Restore-Frische-Negativtest validiert: ops/restore-tests/negative-freshness-alert-test.sh erstellt und am 2026-06-06 auf Unraid erfolgreich ausgefuehrt. Ergebnis: synthetischer leerer Dump-Pfad erzeugte erwartungsgemaess 10 Criticals, Test-Alert nach homelab-alerts gesendet, Report /mnt/user/backups/restore-reports/freshness-negative-2026-06-06-130320.md, produktive Dumps unangetastet.

  • Operator-Entscheidungen 2026-06-06 abgeschlossen (Liste damit ohne offene Entscheidungen):

    • BitLocker baerchen: bewusst deaktiviert. Recovery laeuft ueber Veeam-Image; kein BitLocker-Key-Management. Restrisiko physischer Diebstahl bewusst akzeptiert.
    • Veeam Storage Encryption: bewusst unverschluesselt. Erster Full-Lauf bleibt; Image liegt auf dem lokalen SMB-Share \\kallilabcore\backups. Neu bewerten bei Off-host-Auslagerung des Images.
    • Stromverbrauch: bewusst ohne Messung. Kein Messgeraet; Werte bleiben dauerhaft offen, kein Beschaffungs-Todo mehr.
    • Authelia Rest-2FA: KOMPLETT erledigt 2026-06-06. Catch-all *.kaleschke.info -> two_factor in Repo und Host-Config (chirurgische Einzelzeilen-Aenderung mit Backup, OIDC-Beszel-Client + Secret unangetastet), docker restart authelia -> healthy + "Startup complete", Operator-2FA-Login auf einer vorher-1FA-Domain verifiziert. Nebenbei vorbestehenden Drift gefunden+bereinigt (Host-Config war vom 25. Mai, borg/code nie gemerged); Repo-Baseline an Host-Endzustand angeglichen, damit authelia-diff.sh clean wird sobald der Host-Mirror nachzieht. Rollback-.bak auf dem Host vorhanden.
    • Authelia OIDC: angehen (neuer aktiver Block) — Gast-/IoT-Netz: einrichten/planen (neuer aktiver Block) — Nextcloud 2FA: geparkt bis OIDC die App-Login-Ebene erreicht.

Pflege-Regel

  • Neue operative To-dos zuerst hier eintragen oder aus Detaildokumenten hierher uebernehmen, immer mit Status-Kategorie.
  • Wenn ein Punkt erledigt ist, in der Detaildoku den Beleg/Report eintragen und diese Liste aktualisieren.
  • Keine vagen "pruefen"-Eintraege ohne Kommando oder Entscheidung.
  • Historische Drill-Reports bleiben Belegmaterial, aber nicht die fuehrende Arbeitsliste.