23 lines
1.1 KiB
Bash
23 lines
1.1 KiB
Bash
#!/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
|