Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
15 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 | Live + verifiziert 2026-06-06: Grafana (admin) + Mealie (family, one_factor, additiv). Muster + Gotchas (extra_hosts, additiv, E-Mail-Linking) in docs/AUTHELIA_OIDC_PLAN.md. Verbleibt: Paperless (env/allauth) -, Immich (Admin-UI/Config-File) -, Nextcloud (user_oidc-App/occ) -. Familien-Accounts in Authelia (nur micha existiert) folgen beim Onboarding |
docs/AUTHELIA_OIDC_PLAN.md, security/authelia/configuration.yml |
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 |
|---|---|---|---|
| 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.mdergaenzt. -
Alte Windows-Doku bereinigt: WinRE-/Admin-Check-To-dos in
boot-cleanup-plan-2026-06-04.mdundlaufwerks-neustruktur-2026-06-04.mdals 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: IPv6fd7a:115c:a1e0::2c01:62b2, Exit Nodenein, Subnet-Router fuer192.168.178.0/24aktiv (widerlegt fruehere Vermutung), Tailnettaild9fcf2.ts.net, Geraete-Snapshot + Dubletten-Hinweis. WAN-Failover und Gast-/IoT geschaerft.zu messen-Platzhalter entfernt.Tailscale-Inventar messendamit geschlossen. -
ops/maintenance/check-unraid-flash-backup.shneu: 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.mdmit 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.mdin vier Status-Kategorien (Aktiv / Operator-Entscheidung / Geparkt / Extern blockiert) umstrukturiert. -
baerchenVeeam-Erstbackup: erster Full-Lauf 2026-06-05 erfolgreich geschrieben (Veeam-GUI 53,8 GB, Dauer 0:11:31, MetaCheck 0 Fehler/0 Warnungen, VSSjob: success). Beleg inops/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
2f3d184aktualisiert, User Script/boot/config/plugins/user.scripts/scripts/docker-critical-events-at-start/scriptauf den Supervisor umgestellt, altes Script alsscript.bak-20260605-232621gesichert,schedule.jsonzeigtfrequency: start, Watcher laeuft mit PID1681168. ntfy-Smoke am 2026-06-06 erfolgreich beim Operator angekommen. -
Restore-Test AdGuard Home: automatisierter Test
ops/restore-tests/adguard-restore-test.sherstellt und am 2026-06-06 auf Unraid erfolgreich ausgefuehrt. Ergebnis: Borg-Config-Restore aus ArchivTaegliche-Sicherung-2026-06-06T04:30:05.910, isolierter Containerrestoretest-adguard, HTTP/control/status=401, DNS-Smokegit.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.sherstellt 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 Containerrestoretest-redis,PING=PONG, Redis8.8.0, AOF1,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:familyvorbereitet/schlafend. Subnet-Route192.168.178.0/24bleibt viaautoApproversapproved. Smoke-Tests gruen (Operator-SSH, AdGuard-AdminHTTP 302ueber Tailnet, Ping 0%); untagged Nodes (kallilab-coreDocker-Sidecar, alterbaerchen) isoliert. Beleg:docs/NETWORK_INVENTORY.mdAbschnitt "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-Instanzkallilabcore(echtes TUNtailscale1, Subnet-Router, State im Flash-Backup) und den redundanten userspace-only Docker-Stackkallilab-core(host-services/tailscale/, routet nichts, nichts haengt dran). Sauber per GitOps abgebaut: Operator hat Komodo-Stacktailscalegestoppt+destroyed; danachgit 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 nativetailscaled, 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.shvorhanden. Finaler Smoke 2026-06-06 erfolgreich: GitHub HEAD3a263a4..., Hetzner Storage Box Repos sichtbar, Borg-Repohetzner_borg_appdata_criticalgelesen, Repository ID5dd9b949..., encryptedYes (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.sherstellt und am 2026-06-06 auf Unraid erfolgreich ausgefuehrt. Ergebnis: synthetischer leerer Dump-Pfad erzeugte erwartungsgemaess 10 Criticals, Test-Alert nachhomelab-alertsgesendet, Report/mnt/user/backups/restore-reports/freshness-negative-2026-06-06-130320.md, produktive Dumps unangetastet. -
Gast-/IoT-Netz aktiviert und validiert: FRITZ!Box-Gastzugang
Fritzi Gastzugangaktiv, Heimnetz-Zugriff aus dem Gastnetz blockiert. LAN- und Host-Preflight gruen; iPhone-Smoke aus dem Gast-WLAN bestaetigt, dass192.168.178.58:8082,:8181,:222,https://192.168.178.58und192.168.178.1nicht erreichbar sind. Runbook:docs/GUEST_IOT_NETWORK.md. -
baerchenVeeam-Recovery-Test ohne echten Restore abgeschlossen: Recovery-USBVEEAMREbootet, SMB-Ziel\\kallilabcore\backups\windows-images\baerchenist in der Recovery Environment erreichbar, Restore Point wird angezeigt, Test vor echtem Restore abgebrochen. Runbook:ops/windows-reinstall/docs/windows-image-backup-baseline.md. -
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_factorin 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, damitauthelia-diff.shclean wird sobald der Host-Mirror nachzieht. Rollback-.bakauf 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.
- BitLocker
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.