add Dockerfile and config folder & files
All checks were successful
Docker Build Smart Logic / Build amd64 & arm64 (push) Successful in 16s
All checks were successful
Docker Build Smart Logic / Build amd64 & arm64 (push) Successful in 16s
This commit is contained in:
18
Dockerfile
18
Dockerfile
@@ -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"]
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
# E-Mail Einstellungen
|
# E-Mail Einstellungen
|
||||||
EMAIL_TO="empfaenger@beispiel.de"
|
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)
|
# Quellen (Format: TYPE|REPO|EXTRA)
|
||||||
TARGETS=(
|
TARGETS=(
|
||||||
@@ -2,8 +2,8 @@ services:
|
|||||||
multi-watch:
|
multi-watch:
|
||||||
image: git.pi-farm.de/pi-farm/multi-watch:1.0
|
image: git.pi-farm.de/pi-farm/multi-watch:1.0
|
||||||
container_name: multi-watch
|
container_name: multi-watch
|
||||||
environment:
|
volumes:
|
||||||
- PUID=1000
|
- $(pwd)/config:/config
|
||||||
- PGID=1000
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- TZ=Europe/Berlin
|
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
|
|||||||
12
msmtprc
12
msmtprc
@@ -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
|
|
||||||
@@ -1,33 +1,28 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Pfade definieren
|
|
||||||
CONFIG_DIR="/config"
|
CONFIG_DIR="/config"
|
||||||
CONFIG_FILE="$CONFIG_DIR/watchdog.conf"
|
CONFIG_FILE="$CONFIG_DIR/watchdog.conf"
|
||||||
STATE_FILE="$CONFIG_DIR/watch_state.json"
|
STATE_FILE="$CONFIG_DIR/watch_state.json"
|
||||||
|
|
||||||
# 1. Prüfen, ob das Config-Verzeichnis existiert
|
while true; do
|
||||||
if [ ! -d "$CONFIG_DIR" ]; then
|
# 1. Config bei jedem Durchlauf neu laden (erlaubt Änderungen ohne Neustart)
|
||||||
echo "Fehler: Verzeichnis $CONFIG_DIR nicht gefunden!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 2. Config laden
|
|
||||||
if [ -f "$CONFIG_FILE" ]; then
|
if [ -f "$CONFIG_FILE" ]; then
|
||||||
source "$CONFIG_FILE"
|
source "$CONFIG_FILE"
|
||||||
else
|
else
|
||||||
echo "Fehler: $CONFIG_FILE nicht gefunden!"
|
echo "Fehler: $CONFIG_FILE nicht gefunden! Warte 60s..."
|
||||||
exit 1
|
sleep 60
|
||||||
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 3. msmtp Konfiguration dynamisch schreiben
|
# Standard-Intervall falls nicht definiert (1 Stunde)
|
||||||
# (Nutzt die Variablen aus der watchdog.conf)
|
INTERVAL=${CHECK_INTERVAL:-3600}
|
||||||
|
|
||||||
|
# msmtp Konfig schreiben
|
||||||
cat <<EOF > /etc/msmtprc
|
cat <<EOF > /etc/msmtprc
|
||||||
defaults
|
defaults
|
||||||
auth on
|
auth on
|
||||||
tls on
|
tls on
|
||||||
tls_trust_file /etc/ssl/certs/ca-certificates.crt
|
tls_trust_file /etc/ssl/certs/ca-certificates.crt
|
||||||
logfile /var/log/msmtp.log
|
|
||||||
|
|
||||||
account default
|
account default
|
||||||
host $SMTP_HOST
|
host $SMTP_HOST
|
||||||
port $SMTP_PORT
|
port $SMTP_PORT
|
||||||
@@ -37,21 +32,14 @@ password $SMTP_PASS
|
|||||||
EOF
|
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"
|
IFS="|" read -r TYPE REPO EXTRA <<< "$entry"
|
||||||
|
|
||||||
# Key-Generierung (Punkte und Slashes durch Unterstrich ersetzen)
|
|
||||||
KEY="${TYPE}_${REPO//[\/\.]/_}_${EXTRA}"
|
KEY="${TYPE}_${REPO//[\/\.]/_}_${EXTRA}"
|
||||||
|
|
||||||
# Alten Wert aus der JSON im /config/ Ordner lesen
|
|
||||||
OLD_VAL=$(jq -r ".[\"$KEY\"] // empty" "$STATE_FILE")
|
OLD_VAL=$(jq -r ".[\"$KEY\"] // empty" "$STATE_FILE")
|
||||||
NEW_VAL=""
|
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')
|
NEW_VAL=$(curl -s "https://api.github.com/repos/${REPO}/branches/${EXTRA}" | jq -r '.commit.sha // empty')
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Validierung der API-Antwort
|
if [ -z "$NEW_VAL" ] || [ "$NEW_VAL" == "null" ]; then continue; fi
|
||||||
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
|
if [ -n "$OLD_VAL" ] && [ "$OLD_VAL" != "$NEW_VAL" ]; then
|
||||||
MSG="Update für $REPO ($EXTRA)! Alt: $OLD_VAL | Neu: $NEW_VAL"
|
MSG="Update für $REPO ($EXTRA)! Alt: $OLD_VAL | Neu: $NEW_VAL"
|
||||||
echo "🔔 $MSG"
|
echo "🔔 $MSG"
|
||||||
UPDATES_FOUND="${UPDATES_FOUND}${MSG}\n"
|
UPDATES_FOUND="${UPDATES_FOUND}${MSG}\n"
|
||||||
else
|
|
||||||
echo "✅ $REPO ($EXTRA) ist aktuell."
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Neuen Wert in die JSON im /config/ Ordner schreiben
|
|
||||||
TEMP_JSON=$(jq ".[\"$KEY\"] = \"$NEW_VAL\"" "$STATE_FILE")
|
TEMP_JSON=$(jq ".[\"$KEY\"] = \"$NEW_VAL\"" "$STATE_FILE")
|
||||||
echo "$TEMP_JSON" > "$STATE_FILE"
|
echo "$TEMP_JSON" > "$STATE_FILE"
|
||||||
done
|
done
|
||||||
|
|
||||||
# 5. Mail versenden, falls Updates gefunden wurden
|
# Mail senden
|
||||||
if [ -n "$UPDATES_FOUND" ]; then
|
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 -e "Subject: Watchdog Alert\nFrom: $EMAIL_FROM\nTo: $EMAIL_TO\n\n$UPDATES_FOUND" | msmtp "$EMAIL_TO"
|
||||||
echo "Info: Benachrichtigung an $EMAIL_TO versendet."
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "Check beendet. Nächster Scan in $INTERVAL Sekunden."
|
||||||
|
sleep "$INTERVAL"
|
||||||
|
done
|
||||||
@@ -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"
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user