add Dockerfile and config folder & files
All checks were successful
Docker Build Smart Logic / Build amd64 & arm64 (push) Successful in 16s

This commit is contained in:
2026-02-06 21:19:41 +01:00
parent 27f9b81e66
commit 2be56303c3
7 changed files with 74 additions and 88 deletions

View File

@@ -0,0 +1,18 @@
FROM alpine:latest
# Abhängigkeiten installieren
RUN apk add --no-cache bash curl jq msmtp ca-certificates tzdata
# Struktur anlegen
RUN mkdir /app /config
WORKDIR /app
# Skript kopieren
COPY multi-watch.sh /app/multi-watch.sh
RUN chmod +x /app/multi-watch.sh
# VOLUME markiert den Mount-Punkt für die Persistenz
VOLUME ["/config"]
# Startbefehl
ENTRYPOINT ["/bin/bash", "/app/multi-watch.sh"]

View File

@@ -1,6 +1,9 @@
# E-Mail Einstellungen
EMAIL_TO="empfaenger@beispiel.de"
EMAIL_FROM="watchdog@dein-server.de"
EMAIL_FROM="multi-watch@dein-server.de"
# Intervall
CHECK_INTERVAL=21600 # Alle 6 Stunden (in Sekunden)
# Quellen (Format: TYPE|REPO|EXTRA)
TARGETS=(

View File

@@ -2,8 +2,8 @@ services:
multi-watch:
image: git.pi-farm.de/pi-farm/multi-watch:1.0
container_name: multi-watch
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Berlin
volumes:
- $(pwd)/config:/config
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped

12
msmtprc
View File

@@ -1,12 +0,0 @@
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /var/log/msmtp.log
account default
host smtp.dein-anbieter.de
port 587
from deine-email@beispiel.de
user dein-benutzername
password dein-passwort

View File

@@ -1,33 +1,28 @@
#!/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
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!"
exit 1
fi
else
echo "Fehler: $CONFIG_FILE nicht gefunden! Warte 60s..."
sleep 60
continue
fi
# 3. msmtp Konfiguration dynamisch schreiben
# (Nutzt die Variablen aus der watchdog.conf)
cat <<EOF > /etc/msmtprc
# Standard-Intervall falls nicht definiert (1 Stunde)
INTERVAL=${CHECK_INTERVAL:-3600}
# msmtp Konfig schreiben
cat <<EOF > /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
@@ -35,23 +30,16 @@ from $EMAIL_FROM
user $SMTP_USER
password $SMTP_PASS
EOF
chmod 600 /etc/msmtprc
chmod 600 /etc/msmtprc
# 4. State-Datei initialisieren falls nötig
if [ ! -f "$STATE_FILE" ] || [ ! -s "$STATE_FILE" ]; then
echo "{}" > "$STATE_FILE"
fi
if [ ! -f "$STATE_FILE" ] || [ ! -s "$STATE_FILE" ]; then echo "{}" > "$STATE_FILE"; fi
UPDATES_FOUND=""
UPDATES_FOUND=""
echo "--- Starte Check: $(date) ---"
# --- Logik-Schleife ---
for entry in "${TARGETS[@]}"; do
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=""
@@ -61,28 +49,23 @@ for entry in "${TARGETS[@]}"; do
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
if [ -z "$NEW_VAL" ] || [ "$NEW_VAL" == "null" ]; then 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
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
# Mail senden
if [ -n "$UPDATES_FOUND" ]; then
echo -e "Subject: Watchdog Alert\nFrom: $EMAIL_FROM\nTo: $EMAIL_TO\n\n$UPDATES_FOUND" | msmtp "$EMAIL_TO"
fi
echo "Check beendet. Nächster Scan in $INTERVAL Sekunden."
sleep "$INTERVAL"
done

View File

@@ -1,6 +0,0 @@
{
"DOCKER_library_ubuntu_latest": "2026-01-19T00:04:34.988138Z",
"DOCKER_grafana_grafana_9.5.0": "2023-04-26T06:56:09.639877Z",
"GITHUB_docker_cli_master": "727bc3ea5b2cccf0d1ef77d7049848851e973477",
"GITHUB_torvalds_linux_master": "b7ff7151e653aa296ab6c5495b2c1ab7c21eb250"
}