From 1a4593110a35992d8ae6a5a9650708897d016d00 Mon Sep 17 00:00:00 2001 From: Micha Date: Sun, 21 Jun 2026 18:02:58 +0200 Subject: [PATCH] nearline: S4U-Root-Cause dokumentiert + Exitcode-Leak gefixt Diagnose 2026-06-21: Der Scheduled Task "KalliLab H Drive Nearline Pull" lief als LogonType S4U (ohne gespeichertes Passwort) und hatte damit keine Netzwerk-Anmeldeinformationen fuer den SMB-Share \192.168.178.58\backups. Jeder geplante 05:30-Lauf brach still mit Exit 1 ab, ohne Report; der Nearline-Spiegel war 2026-06-19 bis 2026-06-21 veraltet. Manuell nachgezogen, Spiegel wieder frisch. pull-critical-backups.ps1: explizites `exit 0` auf dem Erfolgspfad, damit der letzte robocopy-Exitcode (1 = "Dateien kopiert") nicht als Prozess-Exit leakt und der Scheduled Task ein wahrheitsgemaesses Ergebnis meldet. README: Pflicht-Hinweis, dass der Task mit gespeichertem Passwort (nicht S4U) laufen muss. MASTER_TODO: Root-Cause + verbleibender Operator-Schritt. Co-Authored-By: Claude Opus 4.8 --- docs/MASTER_TODO.md | 2 +- ops/h-drive-nearline/README.md | 15 ++++++++++++++- ops/h-drive-nearline/pull-critical-backups.ps1 | 4 ++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/docs/MASTER_TODO.md b/docs/MASTER_TODO.md index ca3bca6..ad8993a 100644 --- a/docs/MASTER_TODO.md +++ b/docs/MASTER_TODO.md @@ -25,7 +25,7 @@ Host-Reports (`/mnt/user/backups/restore-reports/`) und in der Git-Historie. | Restore-Test Tailscale | Operator | State-Validierung + Reconnect nur auf Wegwerf-Host/VM, danach Geraet in Tailscale-Admin entfernen | `ops/restore-tests/tailscale-runbook.md` | | Authelia OIDC fuer Apps | Operator/Codex | Live: Grafana + Mealie login-verifiziert; Paperless Secret verdrahtet und Service-Smoke am 2026-06-17 gruen, finaler Browser-Login mit Operator-Account offen. Immich + Nextcloud bewusst geparkt bis Family-Onboarding (siehe `docs/DECISIONS.md` 2026-06-06) | `docs/AUTHELIA_OIDC_PLAN.md` | | Home Assistant Tibber | Operator/Codex | Tibber per HA-UI-Config-Flow verbinden. Danach Energy-Dashboard um echte Kosten/Preisquelle ergaenzen; SolarEdge-PV, Netz und Speicher sind bereits konfiguriert und validiert | `docs/runbooks/smart-home-bootstrap.md`, `docs/DECISIONS.md` | -| Nearline-Pull Dead-Man's-Switch | Operator | Heartbeat-Pings (`/start`, `/fail`, Erfolg) sind lokal in `pull-critical-backups.ps1` und `ops/borg-ui/scripts/pre-borg.sh` verdrahtet (endpoint-agnostisch, No-Op ohne URL). **Verbleibt:** Operator legt je einen Healthchecks-Check an, hinterlegt die Capability-URL (baerchen: ENV `HEALTHCHECKS_NEARLINE_URL` bzw. `%USERPROFILE%\.kallilab\…`; Unraid: `/mnt/user/appdata/secrets/healthchecks_borg_url`) und macht je einen Testlauf | `ops/h-drive-nearline/README.md` | +| Nearline-Pull Dead-Man's-Switch + S4U-Fix | Operator | **Root-Cause 2026-06-21:** Scheduled Task `KalliLab H Drive Nearline Pull` lief als LogonType S4U (kein gespeichertes Passwort) -> keine SMB-Netz-Creds -> jeder 05:30-Lauf brach still ab; Spiegel war 19.-21.06. veraltet. Manuell nachgezogen (Stand: 21.06.-04:00-Dumps), Heartbeat-Pings + Exit-Code-Fix in `pull-critical-backups.ps1`/`pre-borg.sh` gepusht. **Verbleibt (braucht Windows-Passwort des Operators):** Task auf "Run whether logged on or not" MIT gespeichertem Passwort umstellen (LogonType Password); dann je einen Healthchecks-Check anlegen + Capability-URL hinterlegen (baerchen ENV `HEALTHCHECKS_NEARLINE_URL`/Datei; Unraid `/mnt/user/appdata/secrets/healthchecks_borg_url`) | `ops/h-drive-nearline/README.md` | | Monitoring Single-File-Bind-Mount Hardening | Operator/Claude | alertmanager/blackbox/loki/promtail + alertmanager-ntfy-bridge lokal auf Directory-Mounts umgestellt (grafana-provisioning war bereits Directory-Mount); `docker compose config` gruen. **Verbleibt:** Push + Komodo-Redeploy des monitoring-Stacks mit `--force-recreate` (Mount-Pfade aendern sich), danach Reload-/Alert-Smoke | `monitoring/docker-compose.yml` | --- diff --git a/ops/h-drive-nearline/README.md b/ops/h-drive-nearline/README.md index 6d4f654..585ad81 100644 --- a/ops/h-drive-nearline/README.md +++ b/ops/h-drive-nearline/README.md @@ -35,7 +35,20 @@ Abschluss zu löschen. Der Windows Scheduled Task `KalliLab H Drive Nearline Pull` laeuft seit 2026-05-28 taeglich 05:30. Das Script kopiert bewusst **nicht** mit `/MIR` und loescht nichts auf H:/; alte Artefakte werden nur nach manueller Sichtpruefung -entfernt. Aufruf zum Testen: +entfernt. + +> **Wichtig — Task-LogonType:** Der Task muss mit "Ausfuehren, auch wenn der +> Benutzer nicht angemeldet ist" **und gespeichertem Passwort** laufen +> (LogonType `Password`). Mit `S4U` (ohne gespeichertes Passwort) hat der Lauf +> keine Netzwerk-Anmeldeinformationen und erreicht den authentifizierten +> SMB-Share `\\192.168.178.58\backups` nicht -> jeder geplante Lauf bricht +> still mit Exitcode 1 ab, ohne Report. Genau das passierte 2026-06-19 bis +> 2026-06-21 (Spiegel still veraltet), bis am 2026-06-21 manuell nachgezogen +> wurde. Manuelle Laeufe in einer interaktiven Sitzung funktionieren, weil die +> Sitzung die SMB-Creds hat. Das ist auch der Grund fuer den externen +> Dead-Man's-Switch unten. + +Aufruf zum Testen: ```powershell powershell.exe -NoProfile -ExecutionPolicy Bypass -File G:\Gitea_Clone\homelab-infra\ops\h-drive-nearline\pull-critical-backups.ps1 -WhatIf diff --git a/ops/h-drive-nearline/pull-critical-backups.ps1 b/ops/h-drive-nearline/pull-critical-backups.ps1 index 7255186..2f8af68 100644 --- a/ops/h-drive-nearline/pull-critical-backups.ps1 +++ b/ops/h-drive-nearline/pull-critical-backups.ps1 @@ -216,6 +216,10 @@ try { Write-Host "Report: $reportPath" Send-HealthcheckPing + # Explizit erfolgreich beenden: sonst leakt der letzte robocopy-Exitcode + # (1 = "Dateien kopiert") als Prozess-Exit und der Scheduled Task meldet + # 0x1, obwohl der Lauf sauber war. + exit 0 } catch { Send-HealthcheckPing "/fail" throw