From 6b87cc87048b53e3353e18562b3b87b155c2cf82 Mon Sep 17 00:00:00 2001 From: pi-farm Date: Fri, 6 Feb 2026 21:52:45 +0100 Subject: [PATCH] add debugging log --- multi-watch.sh | 67 ++++++++++++++++++++++---------------------------- 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/multi-watch.sh b/multi-watch.sh index 69d4938..4252b3c 100644 --- a/multi-watch.sh +++ b/multi-watch.sh @@ -5,33 +5,14 @@ CONFIG_FILE="$CONFIG_DIR/watchdog.conf" STATE_FILE="$CONFIG_DIR/watch_state.json" while true; do - # 1. Config bei jedem Durchlauf neu laden (erlaubt Änderungen ohne Neustart) if [ -f "$CONFIG_FILE" ]; then source "$CONFIG_FILE" else - echo "Fehler: $CONFIG_FILE nicht gefunden! Warte 60s..." - sleep 60 - continue + echo "❌ Fehler: $CONFIG_FILE nicht gefunden!" + sleep 60; continue fi - # Standard-Intervall falls nicht definiert (1 Stunde) INTERVAL=${CHECK_INTERVAL:-3600} - - # msmtp Konfig schreiben - cat < /etc/msmtprc -defaults -auth on -tls on -tls_trust_file /etc/ssl/certs/ca-certificates.crt -account default -host $SMTP_HOST -port $SMTP_PORT -from $EMAIL_FROM -user $SMTP_USER -password $SMTP_PASS -EOF - chmod 600 /etc/msmtprc - if [ ! -f "$STATE_FILE" ] || [ ! -s "$STATE_FILE" ]; then echo "{}" > "$STATE_FILE"; fi UPDATES_FOUND="" @@ -43,42 +24,52 @@ EOF OLD_VAL=$(jq -r ".[\"$KEY\"] // empty" "$STATE_FILE") NEW_VAL="" + echo "Prüfe $TYPE: $REPO:$EXTRA..." + if [ "$TYPE" == "DOCKER" ]; then - if [[ "$REPO" == *"."* && "$REPO" == *"/"* ]]; then - # FALL: Eigene Registry (z.B. git.pi-farm.de) - # Wir versuchen hier den Docker-Standard-Weg über die Manifest-Config - # Hinweis: Das funktioniert ohne Auth nur bei öffentlichen Repos! - REGISTRY_HOST=$(echo $REPO | cut -d/ -f1) - IMAGE_NAME=$(echo $REPO | cut -d/ -f2-) - - # Hole das Digest (eindeutiger Hash) des Images - NEW_VAL=$(curl -s -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ - "https://${REGISTRY_HOST}/v2/${IMAGE_NAME}/manifests/${EXTRA}" | jq -r '.config.digest // empty') + # Prüfen ob es Docker Hub (kein Punkt oder docker.io) oder eine eigene Registry ist + if [[ "$REPO" != *"."* ]] || [[ "$REPO" == *"docker.io"* ]]; then + # Docker Hub + CLEAN_REPO=${REPO#docker.io/} # Entferne docker.io/ falls vorhanden + [[ "$CLEAN_REPO" != *"/"* ]] && CLEAN_REPO="library/$CLEAN_REPO" + NEW_VAL=$(curl -s "https://hub.docker.com/v2/repositories/${CLEAN_REPO}/tags/${EXTRA}" | jq -r '.last_updated // empty') else - # FALL: Normaler Docker Hub - NEW_VAL=$(curl -s "https://hub.docker.com/v2/repositories/${REPO}/tags/${EXTRA}" | jq -r '.last_updated // empty') + # Eigene Registry (V2 API) + REG_HOST=$(echo $REPO | cut -d/ -f1) + IMG_NAME=$(echo $REPO | cut -d/ -f2-) + # Wir holen den Docker-Content-Digest Header (funktioniert meist ohne komplexen Token-Voodoo) + NEW_VAL=$(curl -sI -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ + "https://${REG_HOST}/v2/${IMG_NAME}/manifests/${EXTRA}" | grep -i "Docker-Content-Digest" | awk '{print $2}' | tr -d '\r') fi elif [ "$TYPE" == "GITHUB" ]; then NEW_VAL=$(curl -s "https://api.github.com/repos/${REPO}/branches/${EXTRA}" | jq -r '.commit.sha // empty') fi - if [ -z "$NEW_VAL" ] || [ "$NEW_VAL" == "null" ]; then continue; fi + # Debug-Ausgabe falls leer + if [ -z "$NEW_VAL" ] || [ "$NEW_VAL" == "null" ]; then + echo " ⚠️ Konnte keine Daten für $REPO abrufen (API-Antwort leer)." + continue + fi if [ -n "$OLD_VAL" ] && [ "$OLD_VAL" != "$NEW_VAL" ]; then MSG="Update für $REPO ($EXTRA)! Alt: $OLD_VAL | Neu: $NEW_VAL" - echo "🔔 $MSG" + echo " 🔔 $MSG" UPDATES_FOUND="${UPDATES_FOUND}${MSG}\n" + else + echo " ✅ Aktuell." fi + # Speichern TEMP_JSON=$(jq ".[\"$KEY\"] = \"$NEW_VAL\"" "$STATE_FILE") echo "$TEMP_JSON" > "$STATE_FILE" done - # Mail senden + # Mail-Versand (bleibt gleich) if [ -n "$UPDATES_FOUND" ]; then - echo -e "Subject: Watchdog Alert\nFrom: $EMAIL_FROM\nTo: $EMAIL_TO\n\n$UPDATES_FOUND" | msmtp "$EMAIL_TO" + # SMTP Konfig schreiben (msmtp Logik hier einfügen wie zuvor...) + echo -e "Subject: Watchdog Alert\n\n$UPDATES_FOUND" | msmtp "$EMAIL_TO" fi - echo "Check beendet. Nächster Scan in $INTERVAL Sekunden." + echo "Check beendet. Nächster Scan in $INTERVAL s." sleep "$INTERVAL" done \ No newline at end of file