#!/bin/bash # Pfade definieren CONFIG_DIR="/config" CONFIG_FILE="$CONFIG_DIR/watchdog.conf" STATE_FILE="$CONFIG_DIR/watch_state.json" # 1. Prüfen, ob das Config-Verzeichnis existiert if [ ! -d "$CONFIG_DIR" ]; then echo "Fehler: Verzeichnis $CONFIG_DIR nicht gefunden!" exit 1 fi # 2. Config laden if [ -f "$CONFIG_FILE" ]; then source "$CONFIG_FILE" else echo "Fehler: $CONFIG_FILE nicht gefunden!" exit 1 fi # 3. msmtp Konfiguration dynamisch schreiben # (Nutzt die Variablen aus der watchdog.conf) cat < /etc/msmtprc defaults auth on tls on tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile /var/log/msmtp.log account default host $SMTP_HOST port $SMTP_PORT from $EMAIL_FROM user $SMTP_USER password $SMTP_PASS EOF chmod 600 /etc/msmtprc # 4. State-Datei initialisieren falls nötig if [ ! -f "$STATE_FILE" ] || [ ! -s "$STATE_FILE" ]; then echo "{}" > "$STATE_FILE" fi UPDATES_FOUND="" # --- Logik-Schleife --- for entry in "${TARGETS[@]}"; do IFS="|" read -r TYPE REPO EXTRA <<< "$entry" # Key-Generierung (Punkte und Slashes durch Unterstrich ersetzen) KEY="${TYPE}_${REPO//[\/\.]/_}_${EXTRA}" # Alten Wert aus der JSON im /config/ Ordner lesen OLD_VAL=$(jq -r ".[\"$KEY\"] // empty" "$STATE_FILE") NEW_VAL="" if [ "$TYPE" == "DOCKER" ]; then NEW_VAL=$(curl -s "https://hub.docker.com/v2/repositories/${REPO}/tags/${EXTRA}" | jq -r '.last_updated // empty') elif [ "$TYPE" == "GITHUB" ]; then NEW_VAL=$(curl -s "https://api.github.com/repos/${REPO}/branches/${EXTRA}" | jq -r '.commit.sha // empty') fi # Validierung der API-Antwort if [ -z "$NEW_VAL" ] || [ "$NEW_VAL" == "null" ]; then echo "⚠️ Konnte Daten für $REPO ($EXTRA) nicht abrufen." continue fi # Vergleich if [ -n "$OLD_VAL" ] && [ "$OLD_VAL" != "$NEW_VAL" ]; then MSG="Update für $REPO ($EXTRA)! Alt: $OLD_VAL | Neu: $NEW_VAL" echo "🔔 $MSG" UPDATES_FOUND="${UPDATES_FOUND}${MSG}\n" else echo "✅ $REPO ($EXTRA) ist aktuell." fi # Neuen Wert in die JSON im /config/ Ordner schreiben TEMP_JSON=$(jq ".[\"$KEY\"] = \"$NEW_VAL\"" "$STATE_FILE") echo "$TEMP_JSON" > "$STATE_FILE" done # 5. Mail versenden, falls Updates gefunden wurden if [ -n "$UPDATES_FOUND" ]; then echo -e "Subject: Watchdog Alert - Neue Versionen gefunden\nFrom: $EMAIL_FROM\nTo: $EMAIL_TO\n\nFolgende Änderungen wurden erkannt:\n\n$UPDATES_FOUND" | msmtp "$EMAIL_TO" echo "Info: Benachrichtigung an $EMAIL_TO versendet." fi