Installing Geo IP PurePerl

Posted in Linux/Unix/BSD -

I process logs on my webservers using AWStats, and use the GeoIP plugin to translate IP addresses into country codes. This article looks at how to install the Geo I PurePerl plugin, which is used by AWStats, and also how to download and install the Geo IP database files which are required by this plugin. The server I installed this onto was a CentOS 5 server, but the instructions here should work equally well on other Linux distributions.

Update March 17th 2009: I've updated the files in the command line examples below to the current versions as at the time of this update. Update note ends.

You should be able to install the Geo IP PurePerl package using cpan like so, but it never seemed to work for me:

$ cpan
cpan# install Geo::IP::PurePerl

So instead I needed to do it manually. Download and install Geo-IP-PurePerl, making sure you get the most recent version, using the following instructions. Below this initial set of instructions are a breakdown of the outputs of each command, and also how to install the GeoIP database if it is not already loaded.

$ wget
$ tar -zxf Geo-IP-PurePerl-1.23.tar.gz
$ cd Geo-IP-PurePerl-1.23
$ perl Makefile.PL
$ make
$ make test
$ sudo make install

The output of perl Makefile.PL should look something like this:

$ perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for Geo::IP::PurePerl

The output of make should look something like this:

$ make
cp lib/Geo/IP/ blib/lib/Geo/IP/
cp geoip-lookup blib/script/geoip-lookup
/usr/bin/perl "-MExtUtils::MY" -e "MY->fixin(shift)" blib/script/geoip-lookup
Manifying blib/man1/geoip-lookup.1
Manifying blib/man3/Geo::IP::PurePerl.3pm

If you don't actually have the GeoIP database installed, make test will fail, and the resulting output will look something like this. Note the errors in bold.

$ make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
        all skipped: No GeoIP.dat found
        all skipped: No GeoIP.dat found
All tests successful, 2 tests skipped.
Files=3, Tests=1,  1 wallclock secs ( 0.03 cusr +  0.25 csys =  0.28 CPU)

If this happens then you need to download and install the GeoIP database like so, either logged in as root or using sudo for each command (you may or may not need the GeoLiteCity database):

$ mkdir /usr/local/share/GeoIP
$ cd /usr/local/share/GeoIP
$ wget
$ wget
$ gunzip *

Now when you return to your Geo-IP-PurePerl-1.23 and run make test it should succeed, and the resulting output will look something like this:

PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
All tests successful.
Files=3, Tests=31,  1 wallclock secs ( 0.09 cusr +  0.03 csys =  0.12 CPU)

Running sudo make install will output something like this:

$ sudo make install
Installing /usr/lib/perl5/site_perl/5.8.8/Geo/IP/
Installing /usr/share/man/man1/geoip-lookup.1
Installing /usr/share/man/man3/Geo::IP::PurePerl.3pm
Installing /usr/bin/geoip-lookup
Writing /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/Geo/IP/PurePerl/.packlist
Appending installation info to /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/perllocal.pod

The Geo IP PurePerl package will now be installed.