Installation von MapServer, Apache und PostgreSQL/PostGIS auf Debian 4.0

Ok, Sie haben also Debian Etch (4.0) auf Ihrem Rechner laufen und möchten dort
nun eine eigene Umgebung für den MapServer aufbauen.
Wie immer führen natürlich viele Wege nach Rom.
Mittels folgendem sollte es auch gehen:
Führen Sie als root folgende Befehle auf der Kommandozeile aus:
 apt-get update (aktualisiert die Übersicht der verfügbaren Pakete)
 apt-get upgrade (alle auf dem System installierten Pakete werden auf die
 aktuellste Version gebracht)
Anschließend müssen versch edene Basisbibliotheken/Programme installiert
werden.
Geben Sie ein:
 apt-get install zip unzip bzip2 zlib1g-dev libreadline-dev build-essential
Achten Sie darauf, dass unter /etc/apt/sources.list auch gültige Angaben zu
Debianquellen stehen, z.B. :
 deb http://ftp.de.debian.org/debian/ etch main
 deb-src http://ftp.de.debian.org/debian/ etch main
 deb http://security.debian.org/ etch/updates main contrib
 deb-src http://security.debian.org/ etch/updates main contrib
== Installation von Apache ==
 apt-get install apache2
Apache2 besteht nicht mehr nur aus einer zentralen Konfigurationsdatei (httpd.conf) sondern aus mehreren.
Die Konfigurationsdateien liegen in /etc/apache2.
Editieren Sie einmal die Datei 000-default, welche im Verzeichnis /etc/apache2/sites-enabled liegt.
Kommentieren Sie den Ausdruck RedirectMatch ^/$ /apache2-default/ aus, also wie folgt:
 # RedirectMatch ^/$ /apache2-default/
Löschen Sie außerdem folgendes Verzeichnis:
 rm -R /var/www/apache2-default/
Einen Neustart des Aapche erreichen Sie mittels
 
 /etc/init.d/apache2 restart
Geben Sie nun in Ihrem Browser 
 http://localhost
ein. Der Apache greift auf das Verzeichnis
 /var/www 
zu und stellt den -in diesem Falle nicht vorhandenen- Inhalt dar.
Verzeichnisse:
/etc/apache2/sites-available – Verzeichnis für vHosts-Dateien
/etc/apache2/sites-enabled – Verzeichnis für vHosts-Dateien, die aktiviert sind
/var/www – default Veröffentlichungsverzeichnis des Apache
/usr/lib/cgi-bin – default cgi-bin des Apache
/etc/php5/apache2/php.ini – PHP.INI-Datei von PHP5 im Apache2
== Installation von PostgreSQL/PostGIS ==
Zunächst brauchen Sie eine ganze Menge weitere Dateien.
Geben Sie ein:
 apt-get install proj libgeos-dev libcurl3-dev libfreetype6-dev libgdal-dev libjpeg-dev libpng-dev libgd2-xpm-dev 
 libxml2-dev flex bison
Installieren Sie PostgreSQL wie folgt:
 apt-get install postgresql-8.1 postgresql-client-8.1 postgresql-contrib-8.1 postgresql-server-dev-8.1
Anschließend legen Sie ein Verzeichnis zum Bauen an:
 
 mkdir /var/src
In dieses laden Sie mittels folgendem Befehl PostgreSQL-Sourcecode ein, diesen benötigen wir zum Bauen von PostGIS.
 wget http://ftp.de.postgresql.org/mirror/postgresql/source/v8.1.11/postgresql-8.1.11.tar.gz
Entpacken Sie dieses mittels 
 tar xzf postgresql-8.1.11.tar.gz
Wechseln Sie in das contrib-Verzeichnis des entpackten PostgreSQL-Quellcodes:
 cd /var/src/postgresql-8.1.11/contrib
 wget http://postgis.refractions.net/download/postgis-1.3.2.tar.gz
 tar xzf postgis-1.3.2.tar.gz
 mv postgis-1.3.2 postgis
 cd postgis
 make
 make install
Vielleicht möchten Sie jetzt ausprobieren, ob Sie auch wirklich Datenbanken
 
anlegen können....
Folgende Schritte sind notwendig:
 adduser postgres (ein Standarduser mit dem Namen „postgres“ wird angelegt,
 Sie müssen hierfür auch ein Passwort festlegen)
 Dann loggen Sie sich als postgres ein
 su postgres
Mittels
 createdb test
können Sie schon mal testweise eine Datenbank anlegen.
Mittels
 /etc/init.d/postgresql-8.1 stop (oder start, oder restart)
können Sie den Datenbankserver stoppen bzw. starten.
Anschließend sollte template1 PostGIS-Unterstützung bekommen. template1 ist die Vorlage für alle Datenbanken.
Datenbanken erben also von diesem template und haben dann ebenfalls PostGIS-Funktionen.
 createlang plpgsql template1
 psql -d template1 -f /var/src/postgresql-8.1.11/contrib/postgis/lwpostgis.sql
 (PostGIS-Funktionen in die Datenbank bringen)
 psql -d template1 -f /var/src/postgresql-8.1.11/contrib/postgis/spatial_ref_sys.sql
 (Koordinatensysteme in Datenbank bringen)
Damit PostgreSQL mit tcp/ip Unterstützung gestartet wird sollte folgendes getan werden:
 vim /etc/postgresql/8.1/main/postgresql.conf
 ....und dann folgenden Parameter ändern:
 #listen_addresses = 'localhost' ändern in listen_addresses = 'localhost'
Für den Anfang ändern Sie mal die Datei /etc/postgresql-8.1/main/pg_hba.conf unten wie folgt:
(Achtung, ist dann aber offen wie ein Scheunentor)
 # Database administrative login by UNIX sockets
 local all postgres trust
 # TYPE DATABASE USER CIDR-ADDRESS METHOD
 # "local" is for Unix domain socket connections only
 #local all all ident sameuser
 # IPv4 local connections:
 host all all 127.0.0.1/32 trust
 # IPv6 local connections:
 #host all all ::1/128 md5
.....und starten Sie PostgreSQL neu.
==Installation von PHP==
Führen Sie aus:
 apt-get install libapache2-mod-php5 php5 php5-common php5-gd php5-pgsql php5-dev
In der php.ini (/etc/php5/apache2/php.ini) müssen Sie ein paar kleine Veränderungen durchführen.
Die extensions für php liegen im Verezichnis mit dem merkwürdigen Namen /usr/lib/php5/20060613+lfs
Tragen Sie folgendes in die php.ini ein
 extension=gd.so
 extension=pgsql.so
Anschließend ein Neustart des Apaches und PHP läuft auch mit PostgreSQL-Unterstützung.
Legen Sie zum Testen mal ein PHP-Skript mit folgendem Inhalt an:
 <? phpinfo(); ?>
und speichern Sie dieses unter /var/www.index.php.
Wenn Sie dann http://localhost/index.php aufrufen können Sie die PHP-Umgebung sehen.
== Einrichtung des UMN MapServers ==
Seit Version 5.0 wird zum Rendering der Bilder nicht nur die GD-Bibliothek sondern auch die AGG-Bibliothek benutzt.
Im Verzeichnis /var/src folgendes eingeben:
 wget http://www.antigrain.com/agg-2.5.tar.gz
 tar xzf agg-2.5.tar.gz
 cd agg-2.5
 make
Anschließend dann die MapServer-Quellen holen und den Mapserver:
 wget http://download.osgeo.org/mapserver/mapserver-5.0.0.tar.gz
 tar xzf mapserver-5.0.0.tar.gz
 cd mapserver-5.0.0
Dann in den Quellen des MapServer die Datei mapsymbol.h verändern:
 #define MS_SYMBOL_ALLOCSIZE 200 (Anzahl der Symbole hochgesetzt)
...sowie die Datei mapserver.h
 #define MS_LAYER_ALLOCSIZE 200
 #define MS_CLASS_ALLOCSIZE 20
 #define MS_STYLE_ALLOCSIZE 4
 ...
 #define MS_MAXIMAGESIZE_DEFAULT 10000
Jetzt den MapServer konfigurieren:
 ./configure --with-ogr --with-gdal --with-wmsclient --with-wmsserver --with-wfsclient --with-wfs --with-tiff --with-jpeg
 --with-png --with-freetype --with-proj --with-geos --with-agg=/var/src/agg-2.5 --with-postgis=/usr/bin/pg_config
 --with-threads --with-php=/usr/include/php5
und kompilieren
 make
Anschließend sollte ein ./mapserv -v folgendes ergeben:
 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=WMS_SERVER 
 SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=THREADS SUPPORTS=GEOS INPUT=TIFF INPUT=EPPL7 INPUT=POSTGIS 
 INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE
Das mapserv-binary kopieren Sie nach /usr/lib/cgi-bin
 cp /var/src/mapserver-5.0.0/mapserv /usr/lib/cgi-bin
Ein http://localhost/cgi-bin/mapserv sollte dann folgende Meldung ergeben:
 No query information to decode. QUERY_STRING is set, but empty.
Prima!!! Der MapServer ist fertig eingerichtet. Um in PHP-Skripten PHP/Mapscript zu nutzen sollte noch die entsprechende Bibliothek verschoben werden:
 cp /var/src/mapserver-5.0.0/mapscript/php3/php_mapscript.so /usr/lib/php5/20060613+lfs/
Anschließend erweitern Sie die Datei /var/www.index.php so dass diese nun folgenden Inhalt hat:
 <?
 dl ("php_mapscript.so");
 phpinfo();
 ?>
Wenn sie dann http://localhost/index.php aufrufen, dann sehen Sie, dass nun auch Mapscript integriert ist.
== MapServer unter https laufen lassen ==
Sie können auch MapServeranwendungen unter verschlüsselten Verbindungen laufen lassen. Dafür benötigt der Apache das Modul SSL.
Zudem benötigen Sie das Tool openssl.
Ob mod_ssl aktiviert ist können Sie mittels
 /usr/sbin/apache2xtl -M
überprüfen. Sollte es nicht aktiviert sein, so führen Sie folgenden Befehl aus:
 a2enmod ssl
....und danach den Apache neu starten.
Dann testen Sie mal ob openssl installiert ist:
 dpkg -l *openssl" | grep ^ii
Sollte es nicht vorhanden sein einfach ein 
 make install openssl
durchführen.
Anschließend erstellen Sie ein Testzertifikat. Wechseln Sie dafür in das Verzeichnis:
 /usr/lib/ssl
Geben Sie dann folgenden Befehl ein:
 openssl req -config openssl.cnf -new -out localhost.csr
Anschließend müssen Sie eine Reihe von Angaben tätigen.
Wichtig ist dabei: Es wird ein privater Schlüssel erstellt (privkey.pem)
welchen Sie in einem späteren Schritt noch einmal benötigen.
Außerdem ist der Eintrag bei Common Name immens wichtig.
Zu lokalen Testzwecken für die Domain nur localhost an, ansonnsten eben Ihre eigentliche Domain (z.B. www.meineseite.de).
Wir haben nun also ein Testzertifikat erstellt. Das benötigt nun einen Schlüssel.
Geben Sie ein:
 openssl rsa -in privkey.pem -out localhost.key
Das sicherste ist es, wenn Sie die Datei .rnd (liegt unter /root/.rnd) nun löschen, da diese potentiellen Angreifern nützlich sein könnte.
Anschließend signieren Sie das Zertifikat mittels Ihres erstellten Schlüssels:
 openssl x509 -in localhost.csr -out localhost.cert -req -signkey localhost.key -days 365
Sie haben nun ein eigenes, selbst signiertes Zertifikat erstellt.
Anschließend muss dem Apache gesagt werden, dass er auch gesicherte Verbindungen ermöglichen soll.
Folgende Schritte sind nötig:
Editieren Sie die Datei /etc/apache2/ports.conf wie folgt:
 Listen 80
 Listen 443
(nicht vergessen, https läuft über Port 443)
Anschließend ändern Sie die Datei /etc/apache2/sites-enabled/000-default
Editieren Sie NameVirtualHost wie folgt:
 NameVirtualHost *:80
Anschließend fügen Sie folgenden Text ein:
 NameVirtualHost *:443
 <VirtualHost *:443>
 SSLEngine On
 SSLCertificateFile ssl/localhost.cert
 SSLCertificateKeyFile ssl/localhost.key
 DocumentRoot /var/www/gesichert
 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
 <Directory "/usr/lib/cgi-bin">
 AllowOverride None
 Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
 Order allow,deny
 Allow from all
 </Directory>
 </Virtualhost>
ändern Sie außerdem in derselben Datei die nachkommende Zeile <VirtualHost *> in:
 <VirtualHost *:80>
Dann, ganz wichtig, erstellen Sie die Verzeichnisse /var/www/gesichert
und /etc/apache2/ssl
 mkdir /var/www/gesichert
 mkdir /etc/apache2/ssl
Anschließend kopieren Sie die Dateien localhost.key und localhost.cert aus dem Ordner /usr/lib/ssl in den Ordner
/etc/apache2/ssl.
Anschließend den Apache neu starten.
Sie können nun einmal eine PHP-Datei (index.php) mit folgendem Inhalt in den Ordner /var/www/gesichert
legen:
 <?
 phpinfo();
 ?>
Rufen Sie dann https://localhost auf, so erscheint ersteinmal eine Meldung über ihr selbst signiertes Zertifikat.
Anschließend wird die PHP-Konfiguration angezeigt. Super!! HTTPS läuft!!
Sie können auch den MapServer über https://localhost/cgi-bin/mapserv ansprechen.
Prima!
Diese Anleitung wurde von Kai Behncke & Simon Appelt erstellt.