49 lines
2.0 KiB
Bash
Executable File
49 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
# Lädt die aktuelle DB-IP-Lite-Länderdatei (monatlich) nach $ANALYTICS_DATA_DIR/geo.csv und startet
|
|
# den Dienst nur neu, wenn sich die Datei geändert hat. Läuft auf dem Host (z. B. per Cron, 1x pro Woche).
|
|
# Die alte geo.csv wird nie gelöscht, bevor die neue geprüft und umbenannt ist.
|
|
set -eu
|
|
|
|
DIR="${ANALYTICS_DATA_DIR:-/srv/webklar-analytics}"
|
|
CONTAINER="${ANALYTICS_CONTAINER:-webklar-analytics}"
|
|
NEU="$DIR/geo.csv.new"
|
|
ZIEL="$DIR/geo.csv"
|
|
|
|
fehler() { echo "Fehler (geo-update): $*" >&2; rm -f "$NEU" "$NEU.gz"; exit 1; }
|
|
|
|
command -v curl >/dev/null 2>&1 || fehler "curl fehlt."
|
|
command -v gunzip >/dev/null 2>&1 || fehler "gunzip fehlt."
|
|
[ -d "$DIR" ] || fehler "Datenverzeichnis $DIR existiert nicht."
|
|
|
|
JETZT="$(date -u +%Y-%m)"
|
|
JAHR="${JETZT%-*}"
|
|
MONAT="${JETZT#*-}"
|
|
m="$(printf '%s' "$MONAT" | sed 's/^0//')"
|
|
if [ "$m" -eq 1 ]; then VORMONAT="$((JAHR - 1))-12"; else VORMONAT="$JAHR-$(printf '%02d' "$((m - 1))")"; fi
|
|
|
|
geladen=""
|
|
for monat in "$JETZT" "$VORMONAT"; do
|
|
url="https://download.db-ip.com/free/dbip-country-lite-$monat.csv.gz"
|
|
if curl -fsSL --retry 2 --max-time 300 -o "$NEU.gz" "$url" 2>/dev/null && gunzip -c "$NEU.gz" > "$NEU" 2>/dev/null; then
|
|
geladen="$monat"
|
|
break
|
|
fi
|
|
done
|
|
rm -f "$NEU.gz"
|
|
[ -n "$geladen" ] || fehler "Download von DB-IP fehlgeschlagen (weder $JETZT noch $VORMONAT). Bestehende geo.csv bleibt unverändert."
|
|
|
|
zeilen="$(wc -l < "$NEU" | tr -d ' ')"
|
|
[ "$zeilen" -gt 100000 ] || fehler "Neue Datei hat nur $zeilen Zeilen (erwartet > 100000). Bestehende geo.csv bleibt unverändert."
|
|
grep -Eq ',"?DE"?\r?$' "$NEU" || fehler "Neue Datei enthält kein 'DE'. Bestehende geo.csv bleibt unverändert."
|
|
|
|
if [ -f "$ZIEL" ] && cmp -s "$NEU" "$ZIEL"; then
|
|
rm -f "$NEU"
|
|
echo "geo.csv ($geladen) unverändert, kein Neustart nötig."
|
|
exit 0
|
|
fi
|
|
|
|
mv -f "$NEU" "$ZIEL"
|
|
echo "geo.csv aktualisiert ($geladen, $zeilen Zeilen)."
|
|
docker restart "$CONTAINER" >/dev/null || fehler "Neustart von $CONTAINER fehlgeschlagen (geo.csv ist aber aktualisiert)."
|
|
echo "$CONTAINER neu gestartet."
|