42 lines
939 B
Bash
Executable File
42 lines
939 B
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
DB_PATH="${1:-data/GeoLite2-City.mmdb}"
|
|
PRIMARY_URL="https://git.io/GeoLite2-City.mmdb"
|
|
FALLBACK_URL="https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-City.mmdb"
|
|
DB_DIR="$(dirname "$DB_PATH")"
|
|
TMP_FILE="${DB_PATH}.tmp"
|
|
|
|
mkdir -p "$DB_DIR"
|
|
chmod 755 "$DB_DIR"
|
|
|
|
if [ -s "$DB_PATH" ]; then
|
|
chmod 644 "$DB_PATH"
|
|
echo "GeoIP database already exists: $DB_PATH"
|
|
exit 0
|
|
fi
|
|
|
|
download() {
|
|
url="$1"
|
|
if command -v curl >/dev/null 2>&1; then
|
|
curl -fL --retry 3 --connect-timeout 15 --output "$TMP_FILE" "$url"
|
|
elif command -v wget >/dev/null 2>&1; then
|
|
wget -O "$TMP_FILE" "$url"
|
|
else
|
|
echo "Missing downloader: install curl or wget" >&2
|
|
return 127
|
|
fi
|
|
}
|
|
|
|
rm -f "$TMP_FILE"
|
|
if ! download "$PRIMARY_URL"; then
|
|
rm -f "$TMP_FILE"
|
|
download "$FALLBACK_URL"
|
|
fi
|
|
|
|
test -s "$TMP_FILE"
|
|
mv "$TMP_FILE" "$DB_PATH"
|
|
chmod 644 "$DB_PATH"
|
|
|
|
echo "GeoIP database downloaded: $DB_PATH"
|