Installation von mod_geoip für Lighttpd auf Debian Etch

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man mod_geoip mit lighttpd auf einem Debian Etch System aufsetzt. mod_geoip schlägt die IP Adresse des Clients und des Benutzers nach. Dies erlaubt es Dir, Benutzer umzuleiten oder zu blocken, ausgehend von ihrem Land. Du kannst diese Technologie auch für OpenX (früher bekannt als OpenAds oder phpAdsNew) ad Server verwenden um geo targeting zu erlauben. Ich werde zwei verschiedene Möglichkeiten aufzeigen, wie man mod_geoip baut - die erste Variante ist, ein neues lighttpd .deb Paket (inklusive mod_geoip) zu bauen - diese Variante würde ich empfehlen. Das funktioniert nur, wenn Du das Standard lighttpd Paket von Debian Etch installiert hast. Wenn Du lighttpd selbst kompiliert hast, würde die zweite Variante auf Dich zutreffen: Sie zeigt, wie Du mod_geoip.so für Deine lighttpd Version baust.

Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

Vorbemerkung

Ich gehe davon aus, dass Du ein funktionstüchtiges Debian Etch System mit funktionierendem lighttpd und PHP hast, wie z.B. in dieser Anleitung gezeigt wird: Installing Lighttpd With PHP5 And MySQL Support On Debian Etch.

1 Die erste Variante - ein neues lighttpd .deb Paket bauen

Wenn Du das Standard Debian Etch lighttpd Paket installiert hast, solltest Du diese Variante wählen um ein neues lighttpd.deb Paket inklusive mod_geoip zu bauen und zu installieren.

Installiere zuerst alle Voraussetzungen:

apt-get install build-essential dpkg-dev fakeroot debhelper cdbs libssl-dev zlib1g-dev libbz2-dev libattr1-dev libpcre3-dev libmysqlclient15-dev libldap2-dev libfcgi-dev libgdbm-dev libmemcache-dev liblua5.1-0-dev dpatch patchutils pkg-config uuid-dev libsqlite3-dev libxml2-dev automake libtool libgeoip1 libgeoip-dev

Installiere dann das lighttpd Quell-Paket:

cd /usr/src
apt-get source lighttpd

Sieh Dir das derzeitige Verzeichnis an:

ls -l


server1:/usr/src# ls -l
total 828
drwxr-xr-x 8 root root 4096 2008-05-11 19:24 lighttpd-1.4.13
-rw-r--r-- 1 root src 37420 2008-04-15 10:30 lighttpd_1.4.13-4etch8.diff.gz
-rw-r--r-- 1 root src 1098 2008-04-15 10:30 lighttpd_1.4.13-4etch8.dsc
-rw-r--r-- 1 root src 793309 2007-06-01 20:15 lighttpd_1.4.13.orig.tar.gz
server1:/usr/src#

Wie Du siehst haben wir nun die Quellen von lighttpd 1.4.13 (aus denen das Standard lighttpd Paket für Debian Etch gebaut wurde).

Lass uns weiter machen:

cd lighttpd-1.4.13/src/
wget -O mod_geoip.c http://trac.lighttpd.net/trac/attachment/wiki/Docs/ModGeoip/mod_geoip.5.c?format=raw

http://trac.lighttpd.net/trac/attachment/wiki/Docs/ModGeoip/mod_geoip.5.c?format=raw ist für lighttpd 1.4.x. Für lighttpd 1.5.x, musst Du stattdessen http://trac.lighttpd.net/trac/attachment/wiki/Docs/ModGeoip/mod_geoip.4.c?format=raw runter laden.

Öffne nun Makefile.am und füge nach der lib_LTLIBRARIES Zeile (sollte die lib_LTLIBRARIES += mod_accesslog.la Zeile sein) folgende Zeile ein:

vi Makefile.am


[...]
lib_LTLIBRARIES += mod_geoip.la mod_geoip_la_SOURCES = mod_geoip.c mod_geoip_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined mod_geoip_la_LIBADD = $(common_libadd) -lGeoIP [...]
Es sollte wie folgt aussehen:
[...]
lib_LTLIBRARIES += mod_accesslog.la mod_accesslog_la_SOURCES = mod_accesslog.c mod_accesslog_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined mod_accesslog_la_LIBADD = $(common_libadd) lib_LTLIBRARIES += mod_geoip.la mod_geoip_la_SOURCES = mod_geoip.c mod_geoip_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined mod_geoip_la_LIBADD = $(common_libadd) -lGeoIP hdr = server.h buffer.h network.h log.h keyvalue.h response.h request.h fastcgi.h chunk.h settings.h http_chunk.h http_auth_digest.h md5.h http_auth.h stream.h fdevent.h connections.h base.h stat_cache.h plugin.h mod_auth.h etag.h joblist.h array.h crc32.h network_backends.h configfile.h bitset.h mod_ssi.h mod_ssi_expr.h inet_ntop_cache.h configparser.h mod_ssi_exprparser.h sys-mmap.h sys-socket.h mod_cml.h mod_cml_funcs.h splaytree.h proc_open.h status_counter.h mod_magnet_cache.h [...]
Gehe nun zum ../debian Ordner:

cd ../debian/

Öffne lighttpd.install und füge die Zeile debian/tmp/usr/lib/lighttpd/mod_geoip.so hinzu:

vi lighttpd.install


[...]
debian/tmp/usr/lib/lighttpd/mod_flv_streaming.so debian/tmp/usr/lib/lighttpd/mod_geoip.so debian/tmp/usr/lib/lighttpd/mod_indexfile.so [...]
Das war's. Nun können wir das neue lighttpd .deb Paket bauen:

cd ../
aclocal && automake -a && autoconf

dpkg-buildpackage

(Am Ende des Prozesses siehst Du höchstwahrscheinlich folgende Warnungen, die Du getrost ignorieren kannst:

dpkg-genchanges
dpkg-genchanges: not including original source code in upload
dpkg-buildpackage: binary and diff upload (original source NOT included)
(WARNING: Failed to sign .dsc and .changes file)
server1:/usr/src/lighttpd-1.4.13#

)

Gehe nun zum  /usr/src Verzeichnis und überprüfe dessen Inhalt:

cd /usr/src/
ls -l

server1:/usr/src# ls -l
total 1748
drwxr-xr-x 8 root root 4096 2008-05-11 19:27 lighttpd-1.4.13
-rw-r--r-- 1 root src 222401 2008-05-11 19:26 lighttpd_1.4.13-4etch8.diff.gz
-rw-r--r-- 1 root src 862 2008-05-11 19:26 lighttpd_1.4.13-4etch8.dsc
-rw-r--r-- 1 root src 1944 2008-05-11 19:30 lighttpd_1.4.13-4etch8_i386.changes
-rw-r--r-- 1 root src 290640 2008-05-11 19:30 lighttpd_1.4.13-4etch8_i386.deb
-rw-r--r-- 1 root src 793309 2007-06-01 20:15 lighttpd_1.4.13.orig.tar.gz
-rw-r--r-- 1 root src 100106 2008-05-11 19:29 lighttpd-doc_1.4.13-4etch8_all.deb
-rw-r--r-- 1 root src 63650 2008-05-11 19:30 lighttpd-mod-cml_1.4.13-4etch8_i386.deb
-rw-r--r-- 1 root src 63462 2008-05-11 19:30 lighttpd-mod-magnet_1.4.13-4etch8_i386.deb
-rw-r--r-- 1 root src 59042 2008-05-11 19:30 lighttpd-mod-mysql-vhost_1.4.13-4etch8_i386.deb
-rw-r--r-- 1 root src 60712 2008-05-11 19:30 lighttpd-mod-trigger-b4-dl_1.4.13-4etch8_i386.deb
-rw-r--r-- 1 root src 70758 2008-05-11 19:30 lighttpd-mod-webdav_1.4.13-4etch8_i386.deb
server1:/usr/src#

Wie Du siehst haben wir nun neue lighttpd .deb Pakete in diesem Verzeichnis. Installiere das neue lighttpd mit mod_geoip wie folgt:

dpkg -i lighttpd_1.4.13-4etch8_i386.deb

Nun müssen wir lighttpd so konfigurieren, dass es mod_geoip verwendet. Zunächst laden wir die GeoIP Country Datenbank runter:

mkdir /usr/local/data
cd /usr/local/data
wget http://www.maxmind.com/download/geoip/database/GeoIP.dat.gz
gunzip GeoIP.dat.gz

Öffne dann /etc/lighttpd/lighttpd.conf und füge "mod_geoip", dem server.modules Bereich hinzu; füge außerdem den geoip.db-filename und die geoip.memory-cache Direktiven unter dem server.modules Bereich hinzu:

vi /etc/lighttpd/lighttpd.conf


[...]
server.modules = ( "mod_access", "mod_alias", "mod_accesslog", "mod_geoip", "mod_fastcgi", # "mod_rewrite", # "mod_redirect", # "mod_status", # "mod_evhost", # "mod_compress", # "mod_usertrack", # "mod_rrdtool", # "mod_webdav", # "mod_expire", # "mod_flv_streaming", # "mod_evasive" ) geoip.db-filename = "/usr/local/data/GeoIP.dat" geoip.memory-cache = "enable" [...]
Starte lighttpd neu:

/etc/init.d/lighttpd restart

Um herauszufinden, ob mod_geoip richtig funktioniert, können wir eine kleine PHP Datei in einem unserer Web Spaces erstellen (z.B. /var/www) (natürlich muss PHP in Deiner lighttpd Installation aktiviert sein):

vi /var/www/geoiptest.php


<?php
print_r($_SERVER); ?>
Rufe diese Datei in einem Browser auf. Sie sollte das SERVER Array inklusive der Werte für GEOIP_COUNTRY_CODE, GEOIP_COUNTRY_CODE3 und GEOIP_COUNTRY_NAME (vergewissere Dich, dass Du die Datei von einer öffentlichen IP Adresse und nicht von einer lokalen aus aufrufst) anzeigen.

Array
(
[FCGI_ROLE] => RESPONDER
[SERVER_SOFTWARE] => lighttpd/1.4.13
[SERVER_NAME] => server1.example.com
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PORT] => 80
[SERVER_ADDR] => 192.168.0.101
[REMOTE_PORT] => 60043
[REMOTE_ADDR] => 1.2.3.4
[SCRIPT_NAME] => /info.php
[PATH_INFO] =>
[SCRIPT_FILENAME] => /var/www/info.php
[DOCUMENT_ROOT] => /var/www/
[REQUEST_URI] => /info.php
[QUERY_STRING] =>
[REQUEST_METHOD] => GET
[REDIRECT_STATUS] => 200
[SERVER_PROTOCOL] => HTTP/1.1
[HTTP_HOST] => server1.example.com
[HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
[HTTP_ACCEPT] => text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
[HTTP_ACCEPT_LANGUAGE] => en-us,en;q=0.5
[HTTP_ACCEPT_ENCODING] => gzip,deflate
[HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
[HTTP_KEEP_ALIVE] => 300
[HTTP_CONNECTION] => keep-alive
[GEOIP_COUNTRY_CODE] => DE
[GEOIP_COUNTRY_CODE3] => DEU
[GEOIP_COUNTRY_NAME] => Germany
[ORIG_PATH_INFO] =>
[ORIG_SCRIPT_NAME] => /info.php
[ORIG_SCRIPT_FILENAME] => /var/www/info.php
[PATH_TRANSLATED] =>
[PATH] => /sbin:/bin:/usr/sbin:/usr/bin
[SHELL] => /bin/bash
[USER] => root
[PHP_FCGI_CHILDREN] => 4
[PHP_FCGI_MAX_REQUESTS] => 10000
[PHP_SELF] => /info.php
[argv] => Array
(
)

[argc] => 0
)

Wenn Du lighttpd + mod_geoip für Deinen OpenX ad Server verwenden möchtest, pass auf, dass MaxMind mod_apache GeoIP unter Settings > Main Settings > Geotargeting Settings auswählst. Das funktioniert auch bei lighttod + mod_geoip.


0 Kommentar(e)

Zum Posten von Kommentaren bitte