From 4e266374645313b61a7758c2ac359e683d18c37f Mon Sep 17 00:00:00 2001 From: Till JS Date: Mon, 25 May 2026 15:04:37 +0200 Subject: [PATCH] feat(infra): colima-VM-Liveness-Guard in ensure-containers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Schließt das letzte SPOF-Loch: stirbt die colima-VM im laufenden Betrieb (Crash/OOM), brachte bisher nichts sie zurück — startup.sh läuft nur beim Boot, ensure-containers nahm an, docker sei oben (exit 1 bei totem docker). Neu: vor dem docker-info-Check prüft das Script `colima status` und startet die VM bei Bedarf. Sicherungen: - Wartungs-Lock `/tmp/mana-colima-maintenance` (touch = Guard pausiert) — damit bewusste colima-Stopps (egress-/ssh-mux-Debug) nicht überschrieben werden. - Backoff: nach 3 Fehlstarts in Folge KEIN Auto-Start mehr + urgent-Notification (z.B. stale in_use_by-Symlink → manueller Eingriff). - send_notification bei Auto-Restart + bei Backoff-Stopp. - set-e-sicher (if/else statt nacktem &&). Deployed auf mana-server (Backup .bak-pre-colima-guard-20260525), bash -n grün, einmal real ausgeführt (colima running → Guard no-op). Co-Authored-By: Claude Opus 4.7 (1M context) --- scripts/mac-mini/ensure-containers-running.sh | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/scripts/mac-mini/ensure-containers-running.sh b/scripts/mac-mini/ensure-containers-running.sh index 8d8d70360..235e6a12f 100755 --- a/scripts/mac-mini/ensure-containers-running.sh +++ b/scripts/mac-mini/ensure-containers-running.sh @@ -67,6 +67,45 @@ send_notification() { fi } +# --- colima-VM-Liveness-Guard --------------------------------------------- +# Wenn die colima-VM im laufenden Betrieb stirbt (Crash/OOM), bringt sonst +# nichts sie zurueck — startup.sh laeuft nur beim Boot. Dieser Guard heilt +# einen Mid-Run-Crash. Schutz vor ungewollten Starts in bewussten Wartungs-/ +# Debug-Stopps (colima restart/stop gegen die egress-/ssh-mux-Bugs): das +# Lock-File pausiert den Guard. Backoff verhindert Endlos-Haemmern, wenn +# colima nicht hochkommt (z.B. stale in_use_by-Symlink auf der ManaData-Disk). +COLIMA_MAINT_LOCK="/tmp/mana-colima-maintenance" # `touch` = Guard pausiert +COLIMA_FAIL_TRACKER="/tmp/mana-colima-start-fails" +COLIMA_MAX_FAILS=3 + +if ! colima status >/dev/null 2>&1; then + if [ -f "$COLIMA_MAINT_LOCK" ]; then + log "colima-Guard: VM down, aber Wartungs-Lock aktiv ($COLIMA_MAINT_LOCK) — kein Auto-Start" + exit 0 + fi + FAILS=$(cat "$COLIMA_FAIL_TRACKER" 2>/dev/null || echo 0) + case "$FAILS" in '' | *[!0-9]*) FAILS=0 ;; esac + if [ "$FAILS" -ge "$COLIMA_MAX_FAILS" ]; then + log "colima-Guard: VM down + bereits $FAILS Fehlstarts — KEIN weiterer Auto-Start, manueller Eingriff noetig (z.B. in_use_by-Symlink loeschen, dann '$COLIMA_FAIL_TRACKER' entfernen)" + send_notification "colima-VM down + $FAILS Fehlstarts auf mana-server — manueller Eingriff noetig" "urgent" + exit 1 + fi + log "colima-Guard: VM ist DOWN — starte colima (Versuch $((FAILS + 1))/$COLIMA_MAX_FAILS)" + if colima start >/dev/null 2>&1; then + log "colima-Guard: colima start erfolgreich — VM wieder oben" + send_notification "colima-VM war down, automatisch neu gestartet (mana-server)" "high" + rm -f "$COLIMA_FAIL_TRACKER" + else + echo $((FAILS + 1)) > "$COLIMA_FAIL_TRACKER" + log "colima-Guard: colima start FEHLGESCHLAGEN (Fehlstart $((FAILS + 1))/$COLIMA_MAX_FAILS)" + exit 1 + fi +else + # VM laeuft normal — Fehlerzaehler zuruecksetzen + rm -f "$COLIMA_FAIL_TRACKER" 2>/dev/null || true +fi +# --- Ende colima-Guard ---------------------------------------------------- + # Check if docker is running if ! docker info >/dev/null 2>&1; then log "ERROR: Docker is not running"