HBUMNMapServer ger Capter Bezug

= Bezug und Installation (Florian Thürkow, Kai Behncke) (1)\index{Bezug}\index{Installation}

Die Installation des MapServers auf einem System kann zuweilen seine Tücken haben, insbesondere dann, wenn Sie die Quelltexte selber kompilieren möchten. Sie ist im folgenden Schritt für Schritt so beschrieben, dass Sie dennoch in kürzester Zeit zu einem laufenden System kommen können.

=Bezug=

Auf der Mapserver Website http://mapserver.org gibt es eine Download-Sektion, die in diverse Rubriken unterteilt ist:


 * Offizieller Release : Dieses Paket enthält den Quellcode für die aktuelle, stabile Version des MapServers. Zur Drucklegung dieses Buches ist das Version 5.2.1.


 * Ältere Releases : Alte Versionen. Unterstützt wird vor allen Dingen immer die aktuelle Version. Fragen auf der Mailingliste zur älteren Version werden gerne mit dem Hinweis beantwortet, man solle doch auch die aktuelle Version upgraden.
 * Interim Builds : Dies sind täglich (automatisch) vorgenommene Kompilierungen aus dem CVS-Verzeichnis; d.h. aus dem Verzeichnis, in dem die Entwickler den aktuellsten Quellcode lagern. Der Umgang mit diesen Paketen soll an dieser Stelle nicht behandelt werden, zumal nicht einmal sichergestellt ist, dass sie überhaupt funktionieren.
 * Windows : Für Windows gibt es spezielle Pakete, mehr dazu weiter unten.

Grundsätzlich gilt für alle Wege der Installation, dass Sie am Ende das fertige MapServer-Binary in das CGI-Verzeichnis Ihres Webservers kopieren. Sie können prüfen, ob das Programm ausgeführt wird, indem Sie (nachdem der Webserver gestartet worden ist) seinen URL aufrufen:

Die Fehlermeldung, die Sie dann erhalten sollten, lautet:

Motzt der Server herum, ist er gesund, wie bereits in Abschnitt~\ref{text:mapfile:cgi} erklärt. Beachten Sie, dass Sie unter Windows nicht gezwungenermaßen die Endung =.exe= an en URL-Aufruf anhängen müssen.

Windows
Für Windows erhalten Sie von der oben genannten Website die beiden folgenden Pakete

ms4w

osgeo4w

Linux
FGS & Co.

Quelltexte
Das herunterladen von Quelltexten und manuelle konfigurieren/kompilieren ist letztlich unter Linuxdistributionen die sauberste aber auch die langwierigste Form der Installation. Ihre Nerven sollten, zumal wenn Sie eine solche Installation erstmalig durchführen, schon ein klein wenig strapazierfähig sein. Aber keine Sorge, im Endeffekt wird der MapServer sicher laufen. Sie sollten aber mit einer Shell Ihrer Wahl umgehen können und mit der Installation von Software mittels =make= und ähnlichen Werkzeugen vertraut sein. Unter Umständen benötigen Sie auch einen Texteditor, um leichte Veränderungen in der einen oder anderen Datei vornehmen zu können

Legen Sie als erstes mehrere Verzeichnisse an um die einzelnen Bibliotheken, den Apache Webserver, PHP, den MapServer herunterzuladen und letztlich zu installieren. mkdir /opt/install mkdir /opt/install/zip

Unter dem Quelltext, auch Quellcode (engl. source code) oder Programmcode, versteht man in der Informatik den für Menschen lesbaren, in einer Programmiersprache geschriebenen Text eines Computerprogramms. In der Regel wird der entsprechende Code auf den jeweiligen Webseiten auch direkt als "Source-Code" angeboten. Die Dateien erkennen Sie oft an der Endung "tar.gz" bzw. "tar.bz2".

Um die Quelltexte zu kompilieren benötigen Sie zudem einige Entpackungsprogramme bzw. Kompiler. Oftmals sind diese schon vorinstalliert, wenn nicht so müssen sie nachintsalliert werden, z.B.

bison (ftp.gnu.org/gnu/bison) (Aktuell war 2.4) (C/C++ kompiler)

gcc (http://gcc.gnu.org) (aktuell war 4.3.3) (Eine Compiler Collection)

bzip2 (http://bzip.org/) (1.0.5) (Komprimierungs-/Dekomprimierungsprogramm)

---

Bibliotheken
Laden Sie dann folgende Quellcodes herunter:

freetype (http://www.freetype.org (Zum Zeitpunkt der Erstellung des Buches lag von freetype die Version 2.3.6 vor)). FreeType stellt eine Bibliothek dar um vektorisierte Schriftarten in Rastergrafiken umzuwandeln. Diese Bibliothek ist unbedingt zu empfehlen.

zlib (http://www.zlib.net) (aktuell war Version 1.2.3). Die Bibliothek zlib dient zum Komprimieren und Dekomprimieren von Daten mit dem sog. Deflate-Algorithmus.

libpng (http://www.libpng.org) (aktuell war Version 1.2.34). Diese Biliothek sollte unbedingt installiert werden. Die libpng-Bibliothek dient zum Bearbeiten/Darstellen von PNG-Bildern.

libgd (http://www.libgd.org (aktuell war 2.0.35). GD dient zur Erstellung/zum Rendering u.a. von PNG-, JPEG- and GIF-Bildern. Diese Bibliothek wird unbedingt vom MapServer benötigt.

Für den Fall, dass Sie internationale Zeichensätze integrieren wollen benötigen Sie noch die libiconv-Bibliothek. Die erhalten Sie von http://www.gnu.org/software/libiconv/.

Sehr zu empfehlen sind auch die folgenden Bibliotheken:

Proj (trac.osgeo.org/proj) (4.6.1), Bibliothek für kartographische Projektionen. Zwingend notwendig, um OGC-konforme Funktionialitäten zu erhalten. Und natürlich, wenn man Daten umprojizieren will. Generell eine Sache, die man haben möchte.

AGG (http://antigrain.com) (2.5) Dient ebenfalls zum Rendern von Grafiken, sorgt letztlich für ein etwas besseres Rendern als die GD-Bibliothek, ist aber auch etwas langsamer.

Gdal (http://gdal.org) (1.6.0), Bibliothek für ca. 40 Rasterformate, zugleich beinhaltet diese Bibliothek auch die OGR-Library mit Unterstützung für nahezu 20 Vektortypen (sollte möglichst installiert werden). Sollten Sie z.B. Arc SDE für Rasterdaten nutzen wollen, so benötigen Sie diese Bibliothek.

libcurl (http://curl.haxx.se/libcurl) (7.19.2)- Diese Bibliothek sorgt für OGC-(WFS/WMS/WCS)-Unterstützung (sehr wichtig!). Eine Bibliothek für den Dateitransfer über Protokolle wie HTTP, FTP und so weiter.

Optional:

FEHLT NOCH:FAST-CGI

libtiff (http://www.libtiff.org) (aktuell: 3.8.2) Für Tiff-Dateien, wird für Geotiff benötigt

ligbeotiff (http://trac.osgeo.org/geotiff (aktuell: 1.2.5) LibGeoTIFF dient zum Lesen und Schreiben von GeoTIFF-Informationen.

Geos (http://trac.osgeo.org/geos/) (3.0.3). Letztlich eine Bibliothek zur geografischen Datenverarbeitung. Diese beinhaltet alle Operatoren der OGC- Spezifikation für SimpleFeatures (z.B. Funktionen wie touch, union, intersect etc.). Benötigt wird mindestens Version 4.10 des MapServers.

libreadline (ftp.gnu.org/gnu/readline/readline-5.2.tar.gz) (5.2), Bietet Funktionen an, um Kommandozeilen zu editieren. Wird von PostgreSQL genutzt für die psql-Eingabekonsole.

libjpeg (http://ijg.org) (6.0), Dient zum Erstellen/Bearbeiten von JPEG-Bildern.

libxml (ftp.xmlsoft.org/libxml2/). Dient zum Parsen von xml. Wird für den OGC SOS-Support benötigt.

pdflib (lite) (http://www.pdflib.com/products/pdflib-family/pdflib-lite): Für die Erstellung von PDF-Output, wird eher selten eingesetzt.

libming (http://www.libming.org): Für Macromedia Flash Output. (wird eher selten eingesetzt)

Flex (http://flex.sourceforge.net) (Version 2.5.35) (PostGIS benötigt diese Bibliothek)

libpg: Diese Bibliothek steht zur Verfügung wenn Sie PostgresSQL/PostGIS installieren. Den Quellcode finde Sie auf http://postgresql.org (8.3.5) bzw. auf http://postgis.refractions.net/download (1.3.5)

Proprietäre Bibliotheken

Arc SDE Client Bibliothek: Diese Bibliothek steht nicht frei zur Verfügung, sie ist Bestandteil von von der ESRI-Geodatenbak ArcSDE.

Oracle Spatial OCI: Aufsatz für die Oracle-Datenbank. Diese Bibliothek bekommen Sie von der Oracle-Seite.

Die heruntergeladenen Dateien sind noch "gepackt", diese müssen Sie "entpacken".

Eine .tar,gz Datei entpacken Sie mit:

tar xvfz freetype-2.3.8.tar.gz

Eine tar.bz2-Datei entpacken Sie mit:

tar xvfl geos-3.0.3.tar.bz2

Installation der Bibliotheken
Wenn Sie die Bibliotheken installieren wollen wechseln Sie bitte in das VErzeichnis der jeweilig entpackten Bibliothek. Dort führen Sie zunächst den Befehl

./configure

aus. Dieser bewirkt zunächst eine Konfiguration der entsprechenden Bibliothek. Nach Abschluss der Konfiguration wird ein sogenanntes Makefile erzeugt. Dieses beinhaltet die notwendigen Informationen um den Quellcode zu kompilieren. Führen Sie danach den Befehl make

und anschließend make install

aus und die Biliotheken sind installiert.

Folgende Schritte sollten Sie dann in den Ordnern der entpackten Bibliotheken ausführen:

readline (./configure,make, make install)

zlib (./configure, make, make test (um zu überprüfen) make install)

libpng (./configure, make, make install)

libjpeg (./configure --enable-shared, make, make test, make install) make install-lib (dieser Befehl damit libjpeg auch ordentlich von der GD-Bibliothek erkannt wird)

flex (./configure, make, make install)

curl (./configure, make, make install)

freetype (./configure, make, make install)

Sofern Sie verschiedene internationale Zeichensätze installieren möchten müssen Sie zunächst libiconv installieren: libiconv (./configure, make, make install)

gd (./configure --with-liconv (diese Option nur dann, wenn Sie internationale Zeichensätze benötigen), make, make install)

Sie können testen ob gd mit der libiconv kompiliert wurde indem Sie ein

gdlib-config --libs

eingeben. Im Output sollte dann ein "-liconv" erscheinen.

tiff (./configure/make/make install)

geotiff (./configure/make/make install)

geos (./configure, make, make install)

xml (./configure, make, make install)

gdal (./configure, make, make install)

proj (./configure, make, make install)

AGG (Bei dieser Bibliothek brauchen Sie nur im Ordner des entpackten Quellcodes den Befehl "make" ausführen.

.....sowie ggf. die weiteren Bibliotheken wie z.B. libming oder pdflib.

Apache Webserver
Als Webserver nutzen Sie am Besten den Apache (2.2.11) Den Quellcode bekommen Sie von httpd.apache.org/download.cgi

Anschließend installieren Sie bitte den Apache Webserver. Zunächst einmal führen Sie bitte im Ordner des entpackten Quellcodes (/opt/install/unzip/httpd-2.2.11) ein

./configure --enable-so --enable-mime-magic --enable-cgi --prefix=/usr/local/apache make make install

aus.

Achten Sie bitte unbedingt darauf, dass entweder der User des Apache (oder aber die Gruppe) Inhaber des Ordners /usr/local/apache (und seiner Unterverzeichnisse) ist. Wie der User/die Gruppe heissen steht in der Datei /usr/local/apache/httpd.conf. z.B.

User daemon Group daemon

Ein ls -l im Ordner /usr/local

zeigt, an, wem aktuell der Ordner /usr/local/apache gehört.

Sollte z.B. der User "root" und auch die Gruppe "root" Inhaber sein, so ändern Sie dieses bitte mit:

chown -R root:daemon (je nachdem wie die Gruppe des Apache heißt) /usr/local/apache

Anschließend starten Sie einmal bitte den Apache mittels

/usr/local/apache/bin/apachectl start

Sollte dann evtl eine Fehlermeldung kommen der Art von:

error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory

so werden Bibliotheken nicht gefunden. Ändern Sie dann die Datei /etc/ld.co.conf und sorgen Sie dafür dass dort z.B. folgendes steht:

/lib/i486-linux-gnu /usr/lib/i486-linux-gnu /usr/lib /usr/local/lib

Anschließend führen Sie auf Kommandozeile den Befehl ldconfig aus.

und geben in Ihrem Browser ein:

http://localhost

Es müßte eine Meldung der Art von "It works" kommen.

PostgreSQL/PostGIS
Als nächstes installieren Sie einmal die PostgreSQL-Datenbank mit PostGIS-Aufsatz. PostgreSQL können Sie von http://www.postgresql.org/download herunterladen (aktuell war 8.3.5). PostGIS erhalten Sie auf http://postgis.refractions.net/ (1.3.5)

./configure --without-readline (sofern es Schwierigkeiten gibt die libreadline zu finden) make make install

Für die PostGIS-Installation entpacken Sie bitte den PostGIS-Ordner und benennen Sie ihn in "postgis". Dieses funktioniert wie folgt:

mv postgis-1.3.5 postgis

Den umbenannten Ordner "postgis" kopieren Sie in den Ordner /opt/install/zip/postgresql-8.3.5/contrib.

cp -R postgis /opt/install/zip/postgresql-8.3.5/contrib/

In dem Ordner führen Sie aus:

./configure –with-pgsql=/usr/local/pgsql/bin/pg_config make make install

Anschließend führen Sie bitte aus:

adduser postgres

(Ein Standarduser mit dem Namen „postgres“ wird angelegt, Sie müssen hierfür auch ein Passwort festlegen)

mkdir /usr/local/pgsql/data chown postgres /usr/local/pgsql/data

(„postgres“ wird Besitzer des Verzeichnisses)

su – postgres

(Einloggen als user postgres)

/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

(Datenbankschema wird initialisiert)

/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data start

(Start der Datenbank)

PHP
Sinnvoll ist es auf jeden Fall den Apache mit PHP zu nutzen, den aktuellen Quellcode bekommen Sie von http://php.net/downloads.php) (5.2.8)

Dann wechseln Sie bitte in den entpackten Ordner des PHP-Quellcodes:

./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-freetype-dir=/usr/lib --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --enable-shared --with-zlib -- enable-mbstring --with-gd --with-pgsql –prefix=/usr/local/php5

Anschließend ein

make

sowie ein

make install

Dann:

mkdir /usr/local/php5/extensions

(damit legen Sie ein Verzeichnis für PHP-Erweiterungen an, PHP/Mapscript wird hier später installiert)

cp /opt/install/unzip/php-5.2.8/php.ini-dist /usr/local/php5/lib/php.ini

Dann geben Sie in der php.ini ein:

extension_dir=/usr/local/php5/extensions

Um zu testen ob PHP funktioniert erstellen Sie eine Datei mit dem Inhalt

<? phpinfo; ?>

nennen Sie diese "test.php" und legen Sie diese in den Ordner /usr/local/apache/htdocs

Anschließend editieren Sie bitte die Konfigurationsdatei des Apache-Webserver /usr/local/apache/conf/httpd.conf. Geben Sie dort ein:

LoadModule php5_module modules/libphp5.so (sofern dieses bei der Installation von php nicht automatisch eingetragen wurde)

AddType application/x-httpd-php .php .phtml

Anschließend rufen Sie auf: http://localhost/test.php Wenn alles funktioniert erhalten Sie eine Ausgabe mit der aktuellen PHP-Version.

UMN MapServer
In den entpackten Quellen des UMN MapServers (http://www.mapserver.org) editieren Sie bitte die Datei mapsymbol.h Standardmäßig ist die Anzahl der integrierbaren Symbole relativ niedrig. Ändern Sie dieses z.B. wie folgt:


 * 1) define MS_SYMBOL_ALLOCSIZE 200

Zudem ändern Sie einmal die Datei mapserver.h

...
 * 1) define MS_LAYER_ALLOCSIZE 200
 * 2) define MS_CLASS_ALLOCSIZE 20
 * 3) define MS_STYLE_ALLOCSIZE 4
 * 1) define MS_MAXIMAGESIZE_DEFAULT 10000

Damit es keine Probleme mit dem dynamischen Linken der Bibliotheken gibt ändern Sie, sofern noch nicht getan, bitte noch die Datei

/etc/ld.so.conf

oder eine ähnliche Datei in /etc/ld.so.conf.d/ (je nach Distribution) Fügen Sie dort die Zeilen /usr/lib /usr/local/lib /usr/local/pgsql/lib

ein. Anschließend geben Sie den Befehl

ldconfig

ein.

Dann wechseln Sie in den Ordner des entpackten MapServers und geben z.B. ein:

./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-libiconv --with-agg=/opt/install/zip/agg-2.5 --with-postgis=/usr/local/pgsql/bin/pg_config --with-threads --with-php=/usr/local/php5

...und geben Sie dann ein make

ein. Wenn alles kompiliert wird geben Sie ein

./mapserv -v

und Sie erhalten Informationen über die Version.

MapServer version 5.2.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=WBMP OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=ICONV 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

Kopieren Sie das binary "mapserv" in den Ordner /usr/local/apache/cgi-bin und führen Sie aus.

http://localhost/cgi-bin/mapserv

Wenn dann die Meldung

No query information to decode. QUERY_STRING is set, but empty.

kommt ist alles wunderbar. Der MapServer ist einsatzbereit.

Änderungen
Eine Liste der aktuellsten Änderungen am MapServer-Quellcode finden Sie auf der Website von DM Solutions~http:website:dmsolutions unter /mapserver/dl/mapserver_ChangeLog.txt. Dabei handelt es sich um eine Auflistung aller Kommentare, die von den Entwicklern bei der Änderung von Dateien im CVS hinzugefügt werden.

CVS
\index{CVS}

Das CVS (Concurrent Versions System) ist ein System, mit dem Entwickler, die über ein Netzwerk verteilt sind, gemeinsam am gleichen Codebestand arbeiten können. So Sie auch keinen schreibenden Zugriff auf den MapServer-Code haben, so können Sie ihn sich dennoch lesend herunterladen und somit sozusagen immer 'on the bleeding edge' der MapServer-Entwicklung sein.

Seien Sie aber gewarnt: Da es sich um Code handelt, an dem aktiv herumentwickelt wird, kann er Macken haben. Es ist nicht einmal gesagt, dass er überhaupt kompiliert. Es kann zeitraubend sein, dann an dieser Stelle auf die Fehlersuche gehen zu müssen.

Geben Sie auf der Kommandozeile Ihrer Wahl ein:

Die Anfrage nach einem Paßwort beim Login können Sie mit einem simplen Druck auf die Return-Taste befriedigen.

Das Kommando =export= belegt die Umgebungsvariable (hier =CVSROOT= ), wenn Sie die Shell =bash=  verwenden. Sollten Sie eine andere Shell benutzen, konsultieren Sie die Dokumentation dieser Shell, um mehr über das Setzen von Umgebungsvariablen herauszufinden.

=Installation von Binaries=

Die Installation von Binaries soll vor dem Kompilieren von Quelltexten genannt werden, da sie sich im allgemeinen wesentlich einfacher geriert. In den meisten Fällen sollte sich diese Art von Installation in wenigen Schritten abhandeln lassen.

Binaries für Windows
(2)

Auf der Mapserver Website~http:website:mapserver gibt es die oben genannten Windows-Binaries herunterzuladen.

Wenn Sie das erste Archiv entpacken, finden Sie darin eine Menge ausfürbahrer Dateien, darunter auch das eigentliche MapServer-Binary =mapserver.exe=. Kopieren Sie diese Datei in das CGI-Verzeichnis Ihres Webservers. Was Sie mit den restlichen Programmen tun, die im wesentlichen auf der Kommandozeile von Nutzen sind, bleibt Ihnen überlassen. Einige von ihnen sind in Kapitel~\ref{text:tools} beschrieben.

Das zweite Archiv beinhaltet eine Menge DLLs, die Sie allesamt in das Systemverzeichnis zu kopieren sind; in einer Standardinstallation von Windows 2000 ist das beispielsweise =c:$$\backslash$$windows$$\backslash$$system32=.

Danach ist der MapServer einsazbereit.

Binaries für Linux
Vorkompilierte Binaries für Linux zu finden ist in den meisten Fällen nicht ganz einfach. Das hat verschiedene Gründe.

An erster Stelle steht die Vielfalt der Architekturen, auf denen Linux eingesetzt werden kann. Wenn Sie den MapServer auf einem 32-Bit Intel-System kompiliert haben, funktioniert es eben nur auf 32-Bit Intel-Systemen, aber schon nicht mehr unter dem Linux, das auf einer Sparc Station läuft.

Die vielen unterschiedlichen Versionen von Kernel und C-Systembibliotheken können dazu führen, dass Binaries nicht überall laufen. Und wenn sich dynamisch gelinkte Bibliotheken an anderen als den vorgesehenen Stellen befinden, ist wieder alles aus. Das führt dazu, dass viele Softwarehersteller, wenn sie Software für Linux anbieten, nur eine bestimmte Version eines bestimmten Herstellers unterstützen. Das ist natürlich ein hochgradig unbefriedigender Zustand.

\subsubsection*{RPM-basierte Linux-Systeme}\index{RPM}

Für RPM-basierte Intel-Systeme (beispielsweise von SuSE, Red Hat oder Mandrake) vom Prozessortyp Pentium oder neuer bietet die Firma intevation unter ftp:intevation:rpm Pakete zum Download an.

In dem Paket, das vollständig in einen eigenen Verzeichnisbaum unter =/opt/mapserver= installiert wird, befinden sich: das ROSA-Applet, das ein Java-Applet ist, das auf einen MapServer zurückgreift und einige Zusatzfunktionen wie das Zoomen auf eine aufziehbare Box bietet; das offizielle Itasca-Demo; diverse Sprachanbindungen und einiges an Dokumentation. Dazu kommt natürlich ein einsatzbereites MapServer-Binary zusammen mit einem kleinen Webserver namens =mini_httpd=.

Die Installation geht so schnell vonstatten, wie man es von RPM-Systemen kennt:

Über eventuelle Bibliotheksabhängigkeiten -- die dann grundsätzlich vom gleichen Ort herunterladbar sind -- informiert Sie die beiliegende Dokumentation. Zum Zeitpunkt der Drucklegung gab es noch kein aktualisiertes Paket für MapServer 4.0 auf dem FTP-Server; das kann sich inzwischen geändert haben.

\subsubsection*{Debian GNU/Linux}\index{Debian}

Für Debian gibt es über den Befehl apt-get install mapserver-bin cgi-mapserver die Möglichkeit den Mapserver auf einfachste Art und Weise zu installieren, doch aufgepasst: Die Debian-stable-Version hinkt in der Aktualität immer etwas nach. Zum Zeitpunkt der Bucherstellung war Version 5.2.1 aktuell, das auf diese Art und Weise installiete Debian-Paket jedoch lag noch bei Version 4.10.2.

=Kompilieren der Quelltexte=(3)


 * Xerces~http:website:xerces, eine XML-Bibliothek, die benötigt wird, um den MapServer als WFS-Client fungieren zu lassen.

Und wenn das noch nicht reicht, dann können Sie sich noch mit den eventuellen Abhängigkeiten der Bibliothek GDAL auseinandersetzen, mit der Sie Zugriff auf diverse, mehr oder weniger 'esoterische' Datenformate erlangen können. Werfen Sie einen Blick in Anhang~\ref{anhang:formate}, um herauszufinden, welche Formate eventuell für Sie interessant werden könnten.

GD
(4)\index{GD}

Diese Grafikbibliothek ist für das Rendern der Bilder verantwortlich. MapServer erstellt eine Darstellung der fertigen Karte im Speicher. GD ist dann dafür verantwortlich, diese Darstellung in das gewünschte Bildformat zu überführen.

Funktionalität als WFS-Server
Für WFS-Funktionalität in MapServer ist Unterstützung für GML in der Bibliothek GDAL vonnöten. Wie Sie diese Kombination aktivieren, erfahren Sie im nächsten Abschnitt über die Voraussetzungen für einen WFS-Client. Die GDAL-Version muß mindestens 1.1.8 sein.

Außerdem ist die Projektionsbibliothek proj.4 in mindestens der Version 4.4.3 vonnöten.

Funktionalität als WFS-Client
Ein WFS-Client muß etwas mehr können als ein WFS-Server. Unter anderem muß er in der Lage sein, GML zu verarbeiten. GML ist die auf XML-basierende Sprache, in der sich WFS-konforme Systeme 'unterhalten'. Mehr zu GML und natürlich den restlichen WFS-Features sowie zur korrekten Konfiguration im Mapfile finden Sie in Abschnitt~\ref{text:ogc:wfs}.

Die GML-Unterstützung in MapServer wird mit der Bibliothek GDAL realisiert. GDAL verläßt sich bei GML jedoch auf noch eine weitere Bibliothek mit dem Namen Xerces, eine XML-Bibliothek, die Teil des Apache-Projekts ist.

Beim Kompiliervorgang verhält sich diese Bibliothek nicht ganz so, wie man es von einem Mechanismus wie =autoconf= gewohnt ist. Die Schritte sind wie folgt:

Zuerst muß eine Umgebungsvariable gesetzt werden, die das Verzeichnis des Quellbaums zum Inhalt hat. Am einfachsten ist es, das Archiv auszupacken, in das Verzeichnis zu wechseln und dann

Wechseln Sie danach in das Unterverzeichnis =src= und führen das Skript =runConfigure=  aus:

Der Parameter =-p= gibt dabei die Art des Systems an, die beiden nächsten Optionen bennenen die zu verwendenden Compiler. Mit =-P= schließlich wird das Verzeichnis für die Installation benannt.

Danach funktionieren =make= und =make install=  wie gewohnt. Der nächste Schritt hiernach ist, GDAL so einzurichten, dass Xerces für GML benutzt wird. Die Schritte dafür finden Sie in Abschnitt~8 erklärt.

GDAL und OGR
(8)

GDAL und OGR sind Bibliotheken, die den Zugriff auf diverse Raster- bzw. Vektordateiformate realisieren. Zu dem Paket gehören auch kleine Utilities, die Sie dazu verwenden können, Informationen über Dateien in den unterstützten Formaten zu gewinnen und teilweise sogar ineinander zu konvertieren. Für MapServer ist natürlich interessant, die entsprechenden Formate als Datenquelle für einen Layer einlesen und teilweise sogar über ein entsprechend definiertes =OUTPUTFORMAT= auch produzieren zu können. Die neuste Version von GDAL~http:website:gdal ist im Moment 1.1.9.

Das =configure= -Skript von GDAL ist ziemlich gut darin, sich die Informationen über die installierten Bibliotheken zusammenzusuchen. Grundsätzlich genügt das folgende, bekannte Vorgehen:

Von besonderer Wichtigkeit ist in diesem Zusammenhang allerdings das Auffinden der XML-Bibliothek Xerces, die für die Unterstützung für GML im MapServer benötigt wird; siehe auch die Abschnitte über WFS-Server und WFS-Client weiter vorne. Falls GDAL nicht in der Lage ist, installierte Bibliotheken korrekt aufzufinden, kann man mit Optionen auf der Kommandozeile beim Konfigurieren nachhelfen. Nach einer gewissen Zeit schreibt man sich dann meist ein kleines Skript, insbesondere, wenn man -- wie der Autor -- gerne mit verschiedenen Dateiformaten experimentiert. Das kann dann zum Beispiel wie folgt aussehen:

Hier werden praktisch alle Bibliotheken explizit angegeben. Neben der Möglichkeit, installierte Bibliotheken explizit vom Kompilierungsprozess auszunehmen (wie hier geschehen mit der JPEG2000-Bibliothek Jasper) und den vielen verschiedenen Orten, an denen die Bibliotheken zu finden sind, ist in diesem Beispiel insbesondere die Konfiguration mit der TIFF-Bibliothek zu nennen. MapServer ist nur dann in der Lage, Rasterdaten umzuprojizieren, wenn das entsprechende Format lesend von GDAL unterstützt wird. Insbesondere darf dann aber der MapServer selber dann nicht mehr gegen die TIFF-Bibliothek gelinkt werden! Mehr dazu finden Sie weiter unten, wenn es um die Kompilierung des MapServers geht.

Unterstützung für PDF-Output
Für den PDF-Output bedient sich MapServer der Bibliothek PDFLib~http:website:pdflib.

Auch für diese Bibliothek genügt das simple Vorgehen:

Neben der Bibliothek werden auch gleich noch einige Sprachbindungen installiert, sodass Sie die Schnittstellen nicht nur von C-Programmen aus nutzen können, sondern auch gleich von C++, Perl, Python und einigen anderen Sprachen an die Bibliothek herankönnen. Zu den unterstützten Sprachen gehört auch PHP; für diese Skriptsprache wird aber die Schnittstelle während der Kompilierung von PHP erstellt, sodass hier zuerst PDFLib installiert sein muß, und erst später PHP richtig konfiguriert werden muß.

Beachten Sie bitte, dass diese Bibliothek für den kommerziellen Einsatz nicht kostenfrei ist. Details zur Lizensierung der Software finden Sie auf deren Website. Des weiteren hat der Autor bisher noch keine Tests mit der aktuellsten Version 5 der PDFLib vorgenommen, sodass keine Aussage getroffen werden kann, ob sie ebenso reibungslos ihre Arbeit tut, wie die 4er-Versionen.

Unterstützung für Shockwave Flash
(9)\index{Flash}\index{ming}

Für die Erzeugung von Flash-Dateien greift MapServer auf die Bibliothek Ming zurück, die von~http:website:ming bezogen werden kann.

Nach dem Entpacken läuft die Installation leider nicht mit einem =configure= -Skript ab. Vielmehr existiert nur ein Makefile, an dem Sie aber keine großen Änderungen vornehmen müssen. Lediglich der Präfix für die Installation muß gesetzt werden. Wenn Sie die Bibliothek innerhalb von =/usr= installiert haben wollen, müssen Sie gar keine Änderung vornehmen.

Danach reicht:

Die Bibliothek hat übrigens einige Durststrecken hinter sich, was die Veröffentlichung neuer Versionen anbelangt; genau so eine Durststrecke besteht auch im Moment, denn es ist über ein Jahr seit der letzten Änderung vergangen.

Kompilieren des MapServers
(10)

Nachdem alle Vorarbeiten erledigt sind, können Sie sich endlich auf das Kompilieren des MapServers stürzen. Entpacken Sie zuerst das Paket:

=MapScript=

Das Kompilieren von MapScript kann eine Wissenschaft für sich sein. Im folgenden sollen Sie trotzdem den Überblick darüber gewinnen, wie der Vorgang aussieht.

Binaries
Vorkompilierte MapScript-Pakete sind eigentlich so gut wie kaum zu finden. Das liegt wahrscheinlich daran, dass die einzelnen Installationen von Webserver und PHP so unterschiedlich sind, dass sich eine Distribution von Binärpaketen kaum lohnen würde.

Die Firma DM Solutions hatte bis vor einiger Zeit noch vorkompilierte Pakete für PHP MapScript auf ihrer Downloadseite, aber für MapServer 4.0 ist dort bis jetzt noch nichts zu finden.

FIXME

Aus den Quellen
Die Installation von MapScript aus dem Quellcode soll -- schon wie bei der Beschreibung des MapServer-Quellcodes weiter oben -- hier für ein Unix-System gezeigt werden.

FIXME

Beachten Sie bitte auch, dass die PHP-Fassung von MapScript die am besten dokumentierte und am meisten gepflegte Fassung ist.

\subsubsection*{PHP}(11)

Zunächst scheint alles ganz einfach zu sein. Das Kompilieren von PHP MapScript ist einfach ein Schalter bei der Kompilierung des MapServers. Wenn Sie also wie in Abschnitt~10 beschrieben vorgehen, können Sie den Parametern einfach einen weiteren hinzufügen:

Damit geben Sie an, in welchem Verzeichnis die Quellen von PHP liegen.

Eventuell erkennen Sie an dieser Stelle, dass einige Schwierigkeiten auf Sie zukommen. Sollten Sie PHP nicht selber aus den Quellen kompiliert haben, dann haben Sie natürlich auch dieses Verzeichnis nicht. Des weiteren müssen Sie natürlich, wenn Sie PHP aktualisieren, auch MapScript neu bauen. So kann eine Aktualisierung einen ganzen Rattenschwanz weiterer Updates nach sich ziehen, die natürlich beim Selberkompilieren entsprechend aufwendiger sind.

Zwei weitere Einschränkungen müssen Sie außerdem noch kennen. Zum einen funktioniert MapScript im Moment nicht mit einer modularen Version von PHP. PHP muß als CGI-Programm installiert sein. Wie Sie das bewerkstelligen, entnehmen Sie der PHP-Dokumentation.

Desweiteren muß PHP davon abgehalten werden, seine eigenen Routinen für reguläre Ausdrücke zu verwenden. Das geschieht beim Kompilieren von PHP, indem man =./configure= den Parameter =--with-regex=system=  mitgibt. Falls diese Option nicht benutzt wird, beschwert sich MapServer bereits beim eigenen =configure= -Vorgang und bricht ab.

Beachten Sie, dass Sie für die Anbindung an PostGIS-Datenbanken keine Unterstützung für PostgreSQL in PHP benötigen. MapScript wird direkt gegen die PostGIS-Bibliotheken gelinkt.

Wie Sie dann mit PHP MapScript arbeiten, ist in Kapitel~\ref{text:mapscript} erklärt.

\subsubsection*{Die Anderen}

Die MapScript-Module für andere Programmiersprachen werden anders gehandhabt. Sie werden mithilfe des Interface-Generators SWIG~http:website:swig erstellt.

Das Konzept von SWIG sieht folgendermaßen aus: Sie erstellen Code, beispielsweise in C. Dieser Code kann wiederum gegen andere Bibliotheken gelinkt sein, wenn Sie möchten. Im Fall von MapScript beispielsweise liegt der MapServer-Code auf verschiedene Dateien verteilt vor, und darüberhinaus wird die Bibliothek GD hinzugelinkt.

Als nächstes erstellt man eine sogenannte Interfacedatei für SWIG, die die Endung =.i= trägt. Hier definieren Sie, wie die Aufrufe von Funktionen aus der anderen Programmiersprache heraus aussehen soll. So gibt es zum Beispiel in dieser Datei bei der Definition des Layer-Objektes folgende Zeilen:

Die nach außen hin sichtbare Methode =queryByRect= des Layer-Objektes ruft also intern die Funktion =msQueryByRect=  auf.

Im Fall von MapScript wird die Interfacedatei bereits mitgeliefert, sie hat den Namen =mapscript.i=.

\subsubsection*{Perl}

Am Beispiel von Perl soll nun gezeigt werden, wie SWIG sodann im Detail gehandhabt wird. Sie wechseln in das Unterverzeichnis =mapscript/= in Ihrem MapServer-Quellcodeverzeichnis und führen aus:

Dieser Vorgang produziert eventuell einige Warnungen, die jedoch ignoriert werden können.

Sie werden in dem Verzeichnis nun zwei neue Dateien finden: einmal =mapscript_wrap.c=, und dazu eine sprachenabhängige Datei. Im Fall von Perl ist das =mapscript.pm=. Diese beiden Dateien kopieren Sie sich nun in das Unterverzeichnis der Sprache Ihrer Wahl, hier also nach =perl/=.

Nachdem Sie nun selber in dieses Verzeichnis gewechselt sind, können Sie ganz einfach den normalen Vorgang für die Installation eines Moduls in der jeweiligen Sprache anstoßen. Für Perl ist das:

Spätestens für den letzten Schritt müssen Sie Schreibrechte im Perl-Installationsverzeichnis besitzen.