#!/usr/bin/env bash # Fetches the month's DB-IP Lite city and ASN databases (CC BY 4.0, https://db-ip.com) into the directory PrivaPub reads # them from (Statistics:GeoDirectory). The app swaps to new files on its own; a failed download leaves the old ones. set -euo pipefail dir="${GEO_DIR:-/var/lib/privapub/geo}" tmp=$(mktemp -d); trap 'rm -rf "$tmp"' EXIT this=$(date -u +%Y-%m) last=$(date -u -d "$(date -u +%Y-%m-15) -1 month" +%Y-%m) for kind in city asn; do got="" for month in "$this" "$last"; do if curl -fsS --max-time 900 -o "$tmp/$kind.gz" "https://download.db-ip.com/free/dbip-$kind-lite-$month.mmdb.gz"; then got=$month; break fi done [ -n "$got" ] || { echo "no $kind database for $this or $last" >&2; exit 1; } gunzip -t "$tmp/$kind.gz" gunzip -c "$tmp/$kind.gz" > "$tmp/dbip-$kind-lite.mmdb" [ "$(stat -c %s "$tmp/dbip-$kind-lite.mmdb")" -gt 1000000 ] || { echo "the $kind database is too small" >&2; exit 1; } install -m 640 "$tmp/dbip-$kind-lite.mmdb" "$dir/.dbip-$kind-lite.mmdb.new" mv -f "$dir/.dbip-$kind-lite.mmdb.new" "$dir/dbip-$kind-lite.mmdb" echo "$kind: DB-IP Lite $got" done