Home > Technology > Keeping GeoIP database updated

Keeping GeoIP database updated

Here’s a simple script to install on a server to keep the GeoIP db updated.

Source code for file (e.g.) get_latest_GeoIP.sh

#!/bin/bash
# getting the latest GeoLiteCity database from maxmind
host=$(hostname -s)
stamp=`date +"%m%Y"` # getting current month & year for GeoLiteCity filename
if [ -f "/usr/share/GeoIP/GeoLiteCity_"$stamp".dat" ]; then
  last=`date -r /usr/share/GeoIP/GeoLiteCity_"$stamp".dat +"%m%Y"`
else
  last=0000
fi
if [ ! -f "/usr/share/GeoIP/GeoLiteCity_"$stamp".dat" ] || [ "$stamp" != "$last" ]; then # if current file doesn't exist or current file wasn't modified in the current month
  wget -O "/usr/share/GeoIP/GeoLiteCity.dat.gz" http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
  if [ ! -s "/usr/share/GeoIP/GeoLiteCity.dat.gz" ]; then
    rm /usr/share/GeoIP/GeoLiteCity.dat.gz
    exit 1
  else
    rm /usr/share/GeoIP/GeoLiteCity.dat
    gunzip /usr/share/GeoIP/GeoLiteCity.dat.gz
    if [ -f "/usr/share/GeoIP/GeoLiteCity_"$stamp".dat" ]; then
      rm /usr/share/GeoIP/GeoLiteCity_"$stamp".dat
    fi
      mv /usr/share/GeoIP/GeoLiteCity.dat "/usr/share/GeoIP/GeoLiteCity_"$stamp".dat"
      ln -s "/usr/share/GeoIP/GeoLiteCity_"$stamp".dat" /usr/share/GeoIP/GeoLiteCity.dat
      echo "Report: GeoIP Database "$stamp" has been updated on "$host". - Enjoy!"
  fi
fi
exit

… now just install a cronjob, that checks withn the first days of the month, whether there is a fresh GeoIP db to fetch.

22 3 1-10 * * ~/get_latest_GeoIP.sh > /dev/null 2>&1

Categories: Technology Tags: , , ,
  1. No comments yet.
  1. No trackbacks yet.