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.

Hinweis für Windows-Benutzer : Sollten Sie MapServer unter aktuellen Windows-Versionen wie 2003 unter IIS 6.0 laufen lassen wollen\footnote{Von IIS ist allerdings aus Sicherheitsgründen dringend abzuraten.}, beachten Sie bitte, dass die Software über ein neues Sicherheitsmodell verfügt und in der Standardeinstellung keine dynamisch generierten Inhalte ausliefert. Genaueres erfahren Sie auf der Microsoft-Website.

Vorkompiliert
Für Windows erhalten Sie von der oben genannten Website die beiden folgenden .zip -Archive:


 * /win32bin/ms40_gif_pg.zip Ein fertiges Binary, dass .gif -Bilder produziert, gegen die GDAL gelinkt ist, auf PostGIS zugreifen kann und sowohl als WMS-konformer Client als auch Server dienen kann. Desweiteren kann dieses Binary PDF und Flash erzeugen, umprojizieren und mit TrueType-Schriften umgehen.
 * /win32bin/ms40_png_pg.zip Genau das gleiche, allerdings mit PNG statt GIF.

Beide Archive sind rund 10 Megabytes groß.

Des weiteren gibt es noch zwei Pakete, die mit den beiden genannten identisch sind, allerdings die PostGIS-Unterstützung durch Unterstützung für Oracle Spatial-Datenbanken ersetzen. Die Oracle-Bibliotheken werden nicht mitgeliefert und müssen demnach bereits auf dem Zielsystem vorhanden sein.

Unter Umständen finden sich im Internet für diverse Systeme Binaries mit einkompilierten Spezialitäten. Mit ein wenig Suche sollten Sie beispielsweise auch im Archiv der Mailingliste entsprechende Verweise auftun können.

Für RPM-basierte Linux-Distributionen auf Intel-Systeme gibt es ein Paket, das von der Firma intevation geschnürt wird. Sie finden es unter~ftp:intevation:rpm.

Quelltexte
Legen Sie als ersten ein Sie dann in /opt/install. Dort legen Sie die Vezeichnisse zip und unzip an.

bison (ftp.gnu.org/gnu/bison) (C/C++ kompiler) gcc bzip2 gcc++ g++

Laden Sie dann den Quelltext von freetyoe (freetype.org sowie von zlin (zlib.net) herunter. Zum Zeitpunkt der Erstellung des Buches lagen von <freetype die Version 2.3.6 und von zlib 1.2.3 vor. Zudem benötigen Sie die linpng (libpng.org) (aktuell Version 1.2.34), libgd (libgd.org) (2.0.35), libreadline (ftp.gnu.org/gnu/readline/readline-5.2.tar.gz) (5.2), flex (flex.sourceforge.net) (Version 2.5.35), geos (trac.osgeo.org/geos/) (3.0.3), proj (trac.osgeo.org/proj) (4.6.1), gdal (gdal.org) (1.6.0), libcurl (curl.haxx.se/libcurl) (version 7.19.2), libjpeg (ijg.org) (6.0), libxml (ftp.xmlsoft.org/libxml2/),.

Natürlich benötigen Sie auch einen WebServer. Nutzen Sie am Besten den Apache (Apache 2: 2.2.11) Den Quellcode bekommen Sie von httpd.apache.org/download.cgi

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)

Sicherlich woollen Sie eine Datenbank anbinden, sehr häufig wird die äußerst belibete Verbindung postgresql/postgis eingesetzt. Den Download finde Sie auf postgresql.org (8.3.5), postgis (postgis.refractions.net/download) (1.3.5)

Dann gehts los. Zuerst den Bison

bison-2.4.tar.bz2 /opt/install/unzip

tar xvfj curlxxxxx.tar.bz2

In der Regel enthalten die einzelnen Pakete eine INSTALL-Datei, welche Sie lesen sollten (zumind. überfliegen). BEi Bison ein ./configure, make, make install

......und Bison ist installiert. readline (./configure,make, make install) DAnn 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) tar xvjf flex.bz2 (./configure,make,make install) curl (./configure/make/make install) freetype (./configure,make,make install) gd (./configure/make/nake isnatll) geos (./configure/make/make install) xml (./configure/make/make install) gdal (./configure/make/make install) proj (./configure/make/make install)

Dann den Apache

./configure --enable-so --enable-mime-gaic --enable-cgi

./configure --without-readline (sofern es Schwierigkeiten gibt die libreadline zu finden:

GNU Readline library

The GNU Readline library greatly increases the usability of psql, the standard PostgreSQL command-line console client. It adds all of the standard functionality of the GNU Readline library to the psql command line, such as being able to easily modify, edit, and retrieve command-history information with the arrow keys and the ability to search the command history (also known as a reverse-i-search). If the Readline library is already installed on your system, the configuration process should automatically compile readline support with psql.

Dann php To compile PHP as Apache shared module we have to provide path to apache apxs utility

Das Quelltextpaket ist für alle Plattformen und Systeme identisch. Sie finden es auf der MapServer Website; die aktuelle Version in dem Moment, in dem diese Zeilen niedergelegt werden, ist:

Bibliotheken für zusätzliche Funktionalität, wie die GD, libproj und so weiter, müssen separat von anderen Orten heruntergeladen werden. Sehen Sie sich weiter im Abschnitt über das Kompilieren der Quelltexte um. Der Autor hat auf seiner eigenen Website~http:website:derfrosch eine Liste mit Links zu einem Großteil der Bibliotheken, gegen die MapServer gelinkt werden kann.

Ä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.

=Die MapMedia MapServer Suite=

So einfach es auch ist, MapServer zu installieren, so kann es doch zuweilen recht zeitraubend sein, alle Beispielapplikationen zu installieren und anzupassen, Dokumentation zusammenzusuchen usw.

Um ein wenig Zeit zu sparen, gibt es von MapMedia, allerdings bisher nur für Windows, die MapServer Suite. Dabei handelt es sich im wesentlichen um ein Installationsprogramm, dass Ihnen den MapServer auf Ihrem System an den Start bringt, inklusive diverser Beispielapplikationen, MapLab und so weiter.

Mehr Informationen über die MapServer Suite finden Sie auf der Website von MapMedia~http:website:mapmedia.

=Kompilieren der Quelltexte=(3)

Wir konzentrieren uns an dieser Stelle auf das Kompilieren der Software auf einem Linux-System. Anmerkungen zu anderen Plattformen, insbesondere Windows, werden an geeigneter Stelle eingeschoben. Generell fährt man unter Windows jedoch mit vorkompilierten Binaries besser. Detailliertere Dokumentation finden Sie beispielsweise im MapServer-Wiki; dort sind dann auch Details für andere Betriebssysteme vorhanden, beispielsweise MacOS~X.

Das Kompilieren der Quelltexte ist ein aufwendiger Vorgang, der einige Vorkenntnisse erfordert. Sie sollten 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

Einige der folgenden Pakete sind bereits Bestandteil der gängigsten Distributionen. Werfen Sie einen Blick in die Liste der installierten Pakete in Ihrem System, um herauszufinden, welche Pakete bereits vorhanden sind und daher nicht mehr installiert werden müssen.

Beachten Sie bitte, dass Sie für die Installation der ganzen bildverarbeitenden Pakete und so weiter keine X-Installation benötigen. Das Lesen und Schreiben von Bildern hat nichts mit ihrer Darstellung auf dem Bildschirm zu tun, und auf einem Webserver benötigt man sowieso keine grafische Oberfläche.

Zwingend notwendig sind für eine Kompilierung des MapServer die folgenden Pakete:


 * Die Bibliothek GD in der Version 2, die das Rendern der Bilder übernimmt~http:website:gd. Beachten Sie bitte die Anmerkungen in Abschnitt~4, wenn Sie ein für Ihre fertigen Karten GIF als Ausgabeformat wünschen. GD kann im Moment JPEG und PNG produzieren\footnote{Und noch einige wenige andere, die aber für eine Darstellung im Webbrowser nicht von Interesse sind.}.   MapServer 4.0 benötigt zwingend mindestens Version 2.0.12 der GD.

Mit diesen simplen Voraussetzungen können Sie bereits einen MapServer kompilieren, der Shapefiles lesen und Karten in diversen Formaten wie PNG, JPEG erzeugen kann, vorausgesetzt, die entsprechenden Grafikbibliotheken sind installiert.

Die folgenden Pakete sind zu empfehlen, falls man über diese simple Funktionialität hinaus etwas komplexere Anwendungen möchte:


 * Die Projektionsbibliothek proj.4~http:website:libproj, mit der Daten umprojiziert werden können. 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.
 * Die Bibliothek libtiff~http:website:tiff, um das gängigste Karten-Rasterformat (mit Worldfiles) einlesen zu können. Bitte beachten Sie, dass Sie für das Format GeotTIFF eine weitere Bibliothek (libgeotiff) benötigen.
 * FreeType~http:website:freetype, für die Unterstützung von TrueType-Schriften. MapServer kann 'von Haus aus' nur mit einigen Bitmap-Schriften umgehen, die schlecht skalieren. Vor MapServer Version 4.0 war es zwingend notwendig, eine 1er-Version dieser Bibliothek zu verwenden. Dies war im wesentlichen der älteren GD-Version geschuldet, die in MapServer zum Einsatz kam. Die aktuelle Version 2 von GD muß eingesetzt werden, zusammen mit FreeType in der Version 2.
 * libcurl~http:website:libcurl, eine Bibliothek für den Dateitransfer über Protokolle wie HTTP, FTP und so weiter. Wird benötigt, um den MapServer als OGC-konformen Client fungieren zu lassen. Diese Bibliothek ersetzt mit Version 4.0 die bisher verwendete WWW-Bibliothek libwww~http:website:libwww. Sie benötigen mindestens Version 7.10.1.

Weitere, optionale Pakete für verschiedene Funktionen, die recht häufig zum Einsatz kommen:


 * libgeotiff~http:website:geotiff zum Einlesen von GeoTiff-Bildern. Dieses Dateiformat unterscheidet sich von georeferenzierten Tiff-Bildern, die mit seperaten Worldfiles funktionierten.
 * GDAL~http:website:gdal, eine Bibliothek, die Zugriff auf diverse georeferenzierte Rasterformate ermöglicht. Bestandteil von GDAL ist die OGR (Simple Features Library), die Zugriff auf diverse Vektorformate ermöglicht.
 * PostGIS~http:website:postgis, eine Erweiterung für die Datenbank PostgreSQL; ähnlich ESRI ArcSDE oder den Oracle Spatial Extensions. Für die Installation von PostGIS benötigen Sie Zugriff auf den Quelltextbaum, aus dem PostgreSQL kompiliert worden ist -- für die PostGIS-Unterstützung im MapServer ist das nicht mehr nötig.

Und dann sind da noch die folgenden Bibliotheken, die aus verschiedenen Gründen zum Einsatz kommen können. Sie werden nicht (eventuell: noch nicht) so häufig angewendet.


 * ming~http:website:ming, eine Bibliothek zum Erzeugen von Flash-Output.
 * pdflib~http:website:pdflib, eine Bibliothek zum Erzeugen von PDF-Output. Bitte beachten Sie insbesondere die Lizenz dieser Software!
 * 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.

PNG ist das vorgegebene Bildformat in den aktuellen Versionen von GD. Ältere Versionen (1.6 und früher) produzierten noch GIF-Bilder. Wegen der Patente, die auf diesem Format liegen, entschied sich der Autor jedoch zu einem bestimmten Zeitpunkt, das Format fallen zu lassen und stattdessen PNG zu erzeugen, welches ein offen liegendes Format ist und keine Lizenzgebühren bei der vollständigen Implementierung benötigt. Aus Benutzersicht ist diese Entscheidung dahingehend nicht relevant, als jeder aktuelle Webbrowser dieses Format darstellen kann\footnote{Außer vielleicht lynx, links und andere kommandozeilenbasierte Browser. Diese können aber offensichtlich mit Karten generell nichts anfangen, egal in welchem Format sie vorliegen.}.

Vor Version 4.0 des MapServers war GD 1.8.4 die aktuelle Version. Diese Fassung der GD krankte an diversen Schwächen: insbesondere die Kompilierung und Installation war haarig, es wurde generell nur eine statische Fassung der Bibliothek erstellt und es gab nur Probleme mit der Zusammenarbeit aktueller Versionen der TrueType-Bibliothek FreeType. Außerdem war nicht in der Lage, Bilder mit mehr als 256 Farben zu produzieren.

Mit der Version 2 wurde das jedoch alles anders, und so können wir uns nun an Bildern in TrueColor und funktionierender Beschriftung erfreuen. Beim Schreiben dieser Zeilen ist die Version 2.0.15 die aktuellste; MapServer verlangt mindestens nach Version 2.0.12 der Bibliothek.

Beachten Sie bitte, dass es auch mit dieser Version der GD nicht möglich ist, GIF-Bilder zu produzieren.

Nach dem Entpacken des Archivs von~http:website:gd finden Sie im Verzeichnis ein configure -Skript (auch das eine Neuerung), das Sie etwa wie folgt aufrufen:

Die Pfadangaben müssen natürlich angepaßt werden, je nachdem, wo die entsprechenden Pakete bei Ihnen installiert sind.

Obwohl MapServer später selber nach einer FreeType-Installation sucht, muß auch GD gegen FreeType gelinkt werden, falls Sie TrueType-Beschrifungen wünschen. Achten Sie unbedingt darauf, dass Sie den MapServer gegen die gleiche Version von FreeType linken, wie die GD.

Proj.4-Unterstüzung
(5)\index{Proj.4}

Die Installation der Projektionsbibliothek proj.4 geht flott vonstatten. Dem Entpacken des Quellcodes folgt ein simples:

Das war alles. Aktuelle Version ist Version 4.4.7.

EPPL7-Unterstützung
Die Environmental Planning Programming Language stammt aus einem älteren GIS der Universität von Minnesota. Um dieses Format lesen zu können, ist keine gesonderte Bibliothek notwendig; insbesondere ist die Unterstützung für dieses Format implizit im MapServer vorhanden, falls sie nicht explizit bei der Konfiguration der MapServer-Quellen abgeschaltet wird.

Funktionalität als WMS-Server
Die Fähigkeit, als WMS-Server zu fungieren, wird automatisch aktiviert, wenn dem Konfigurationsskript des MapServer die Unterstützung der Projektionsbibliothek proj.4 abgefordert wird (siehe weiter unten). Weitere Schritte sind nicht nötig. Sollten Sie WMS-Funktionalität nicht wünschen, müssen Sie diese später bei der Kompilierung des MapServers explizit ausschalten.

Funktionalität als WMS-Client
(6)

Auch die Installation von curl geht erfreulich schnell und einfach vonstatten. Nach dem Entpacken des Archivs genügt

um die Bibliotheken zu installieren. Aktuelle Version is 7.10.7.

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.

Unterstützung für PostGIS
(7)\index{PostGIS}

PostGIS ist eine Erweiterung der freien Datenbank PostgreSQL für räumliche Vektordaten. Um PostGIS kompilieren zu können, müssen Sie Zugriff auf den Quelltextbaum haben, aus dem PostgreSQL kompiliert worden ist. Das reine Entpacken der PostgreSQL-Quellen reicht nicht! Aus offensichtlichen Gründen soll hier keine Zeit damit verbracht werden, auf die Kompilierung von PostgreSQL einzugehen.

Wechseln Sie in das Verzeichnis contrib der PostgreSQL-Quellen und entpacken Sie dort das PostGIS-Archiv:

Wechseln Sie in das neu entstandene Verzeichnis und editieren Sie eventuell das Makfile:


 * Setzen Sie die Variable USE_PG72 auf 1, falls Sie PostgreSQL 7.2 anstatt 7.3 verwenden.
 * Setzen Sie die Variable USE_PROJ auf 1, falls Sie Unterstützung für proj.4 in PostGIS haben wollen.

Bevor PostGIS nun speziell für die gewünschte Datenbank in Betrieb genommen werden kann, muß die Prozeduralsprache PL/pgSQL für diese Datenbank aktiviert werden\footnote{Eine Prozeduralsprache (procedural language) stellt Schleifenkonstrukte und andere Kontrollstrukturen zur Verfügung, wo SQL nur Einzelbefehle kennt.}. Das geschieht am besten über das mit PostgreSQL mitgelieferte Skript:

Nun ist diese Datenbank für PostGIS vorbereitet, und die entsprechenden Funktionen und so weiter können in die Datenbank eingelesen werden:

Die Datei postgis.sql finden Sie natürlich im PostGIS-Quellverzeichnis.

\subsubsection*{Projektionen}

Wenn Sie möchten, können Sie in Ihrer Datenbank mit PostGIS-Unterstützung eine Tabelle mit EPSG-Codes anlegen, wie sie auch von proj.4 benutzt werden:

Auch diese Datei befindet sich im PostGIS-Quellverzeichnis.

\subsubsection*{Upgrade}

Natürlich wird auch PostGIS weiterentwickelt. Irgendwann werden Sie dann eine alte Version gegen eine aktuelle austauschen wollen; das kann eventuell etwas schwierig werden. Die Webseite empfiehlt beim Versionswechsel musterhaft folgendes Vorgehen:

Im Klartext: Speichern der Datenbank in einer Datei und dann Löschen der Datenbank; dann die Datenbank neu anlegen, PL/pgSQL-Unterstützung aktivieren, das neue postgis.sql einlesen und die gespeicherten Inhalte der Datenbank dann wieder einfügen.

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:

In diesem Verzeichnis können Sie sich alle möglichen Optionen für die Konfiguration ausgeben lassen:

Für eine Basiskonfiguration benötigen Sie lediglich:

Die Verzeichnisangaben sind dabei die Installationsverzeichnisse der Bibliotheken, die Sie je nach Konfiguration Ihres Systems anpassen müssen.

Wenn Sie den MapServer entweder als WMS-Client oder als Server verwenden möchten, benötigen Sie die beiden folgenden Angaben:

Sie können natürlich beide Dinge gleichzeitig in den MapServer einkompilieren. Funktionalität als WMS-Server wird übrigens stillschweigend vorausgesetzt, sobald Sie die Projektionsbibliothek einbinden.

Die Unterstützung für GDAL beziehungsweise PostGIS aktivieren Sie folgendermaßen:

Für PostGIS ist der benötigte Parameter der komplette Pfadname zum PostgreSQL-Konfigurationsprogramm =pg_config=. Die Option für GDAL fragt lediglich nach dem Pfad zum Konfigurationsprogramm =gdal-config=, ohne den Programmnamen selber angeben zu müseen.

Wenn Sie zusätzlich noch PHP MapScript kompilieren möchten, benötigen Sie Zugriff auf den Quelltext der von Ihnen verwendeten PHP-Version. Dann kommen noch diverse Optionen dazu:

Hinweise zu den Einschränkungen, was die Konfiguration von PHP betrifft, finden Sie in einem Abschnitt weiter unten.

Das Kompilieren wird schließlich angestoßen mit:

Sie können nun den Bildschirmausgaben eine Weile zusehen.

Wenn der Vorgang reibunglos durchgelaufen ist, finden Sie im Quelltextverzeichnis das fertige Binary. Sie können es mit dem Parameter =-v= ausführen, um zu sehen, ob alle geforderten Eingenschaften einkompiliert worden sind:

Die Parameter sprechen in diesem Beispiel für sich.

Kopieren Sie nun das fertige Binary in das CGI-Verzeichnis Ihres Webservers und Sie sind fertig. Was Sie mit den Zusatzprogrammen machen, die sich ebenfalls im Quelltextverzeichnis befinden, ist im wesentlichen Ihre Sache -- sinnvoll ist es natürlich, sie in ein Verzeichnis zu kopieren, dass sich in der Liste Ihrer =PATH= -Variablen befindet, damit Sie sie von jeder Stelle im Dateisystem aus ausführen können.

=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.