add script and config files
All checks were successful
Docker Build Smart Logic / Build amd64 & arm64 (push) Successful in 1s
All checks were successful
Docker Build Smart Logic / Build amd64 & arm64 (push) Successful in 1s
This commit is contained in:
12
msmtprc
Normal file
12
msmtprc
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
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,54 +1,88 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Datei für den Status
|
# Pfade definieren
|
||||||
STATE_FILE="watch_state.json"
|
CONFIG_DIR="/config"
|
||||||
# Liste der zu prüfenden Quellen (Typ|Name|Zusatz)
|
CONFIG_FILE="$CONFIG_DIR/watchdog.conf"
|
||||||
# Formate:
|
STATE_FILE="$CONFIG_DIR/watch_state.json"
|
||||||
# DOCKER|user/repo|tag
|
|
||||||
# GITHUB|user/repo|branch
|
|
||||||
TARGETS=(
|
|
||||||
"DOCKER|library/ubuntu|latest"
|
|
||||||
"DOCKER|grafana/grafana|9.5.0"
|
|
||||||
"GITHUB|docker/cli|master"
|
|
||||||
"GITHUB|torvalds/linux|master"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Falls jq nicht installiert ist
|
# 1. Prüfen, ob das Config-Verzeichnis existiert
|
||||||
if ! command -v jq &> /dev/null; then echo "Bitte 'jq' installieren!"; exit 1; fi
|
if [ ! -d "$CONFIG_DIR" ]; then
|
||||||
|
echo "Fehler: Verzeichnis $CONFIG_DIR nicht gefunden!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Initialisiere State-Datei falls nicht vorhanden
|
# 2. Config laden
|
||||||
if [ ! -f "$STATE_FILE" ]; then echo "{}" > "$STATE_FILE"; fi
|
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 <<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
|
||||||
|
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
|
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}"
|
||||||
OLD_VAL=$(jq -r ".${KEY} // empty" "$STATE_FILE")
|
|
||||||
|
# Alten Wert aus der JSON im /config/ Ordner lesen
|
||||||
|
OLD_VAL=$(jq -r ".[\"$KEY\"] // empty" "$STATE_FILE")
|
||||||
NEW_VAL=""
|
NEW_VAL=""
|
||||||
|
|
||||||
if [ "$TYPE" == "DOCKER" ]; then
|
if [ "$TYPE" == "DOCKER" ]; then
|
||||||
# Holt das letzte Update-Datum vom Docker Hub
|
|
||||||
NEW_VAL=$(curl -s "https://hub.docker.com/v2/repositories/${REPO}/tags/${EXTRA}" | jq -r '.last_updated // empty')
|
NEW_VAL=$(curl -s "https://hub.docker.com/v2/repositories/${REPO}/tags/${EXTRA}" | jq -r '.last_updated // empty')
|
||||||
elif [ "$TYPE" == "GITHUB" ]; then
|
elif [ "$TYPE" == "GITHUB" ]; then
|
||||||
# Holt den neuesten Commit-SHA vom GitHub Branch
|
|
||||||
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
|
if [ -z "$NEW_VAL" ] || [ "$NEW_VAL" == "null" ]; then
|
||||||
echo "Fehler: Konnte Daten für $REPO ($EXTRA) nicht abrufen."
|
echo "⚠️ Konnte Daten für $REPO ($EXTRA) nicht abrufen."
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Vergleich
|
||||||
if [ -n "$OLD_VAL" ] && [ "$OLD_VAL" != "$NEW_VAL" ]; then
|
if [ -n "$OLD_VAL" ] && [ "$OLD_VAL" != "$NEW_VAL" ]; then
|
||||||
echo "🔔 UPDATE GEFUNDEN: $REPO ($EXTRA)"
|
MSG="Update für $REPO ($EXTRA)! Alt: $OLD_VAL | Neu: $NEW_VAL"
|
||||||
echo " Alt: $OLD_VAL"
|
echo "🔔 $MSG"
|
||||||
echo " Neu: $NEW_VAL"
|
UPDATES_FOUND="${UPDATES_FOUND}${MSG}\n"
|
||||||
# HIER: Befehl für E-Mail oder Push-Dienst einfügen
|
|
||||||
else
|
else
|
||||||
echo "✅ $REPO ($EXTRA) ist aktuell."
|
echo "✅ $REPO ($EXTRA) ist aktuell."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Status aktualisieren
|
# 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
|
||||||
|
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
|
||||||
6
watch_state.json
Normal file
6
watch_state.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
16
watchdog.conf
Normal file
16
watchdog.conf
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# E-Mail Einstellungen
|
||||||
|
EMAIL_TO="empfaenger@beispiel.de"
|
||||||
|
EMAIL_FROM="watchdog@dein-server.de"
|
||||||
|
|
||||||
|
# Quellen (Format: TYPE|REPO|EXTRA)
|
||||||
|
TARGETS=(
|
||||||
|
"DOCKER|library/ubuntu|latest"
|
||||||
|
"DOCKER|grafana/grafana|9.5.0"
|
||||||
|
"GITHUB|docker/cli|master"
|
||||||
|
)
|
||||||
|
|
||||||
|
# SMTP Einstellungen für msmtp
|
||||||
|
SMTP_HOST="smtp.dein-anbieter.de"
|
||||||
|
SMTP_PORT="587"
|
||||||
|
SMTP_USER="dein-benutzername"
|
||||||
|
SMTP_PASS="dein-passwort"
|
||||||
Reference in New Issue
Block a user