UMN MapServer kompilieren und installieren unter Suse 8.0
Inhaltsverzeichnis
Vorwort
UMN MapServer on SuSE Linux 8.0 Compilation and Installation HOWTO
von
Alexander Pucher
Institut für Geographie und Regionalforschung
der Universität Wien
Kartografie und Geoinformation
Abstract:
Diese Dokumentation beschreibt die notwendigen Arbeitsschritte, um den UMN Mapserver auf SuSE Linux 8.0 erfolgreich zu installieren. Alle notendigen Programme, Zusatzbibliotheken etc. werden ebenfalls besprochen und eingespielt.
Quelle: http://mapserver.gis.umn.edu/data2/wilma/mapserver-users/0208/msg00285.html
Einleitung
Diese Dokumentation beschreibt die notwendigen Arbeitsschritte, um den UMN Mapserver auf SuSE Linux 8.0 erfolgreich zu installieren. Alle notendigen Programme, Zusatzbibliotheken etc. werden ebenfalls besprochen und eingespielt.
Teile dieser Dokumentation basieren auf den Dokumenten der UMN MapServer Homepage http://mapserver.gis.umn.edu, insbesondere "Setting up MapServer/MapScript version 3.6 on Red hat 7.2" von Daniel Morissette und "MapServer UNIX Compilation and Installation HOWTO" von Jean-Francois Doyon.
Bezeichnungen
Befehle, die am Prompt eingegeben werden müssen, sind durch ein '$'-Zeichen gekennzeichnet, z. b.:$ ls -l. Ausgaben, die vom System stammen, werden unter doppelte Hochkommata gestellt, z.B.: "
Compilation completed". Kommentare werden mit # gekennzeichnet. z.B.:
# Dies ist ein Kommentar
Verwendete Komponenten
Durchgeführt wurde die Installation konkret mit folgenden Komponenten:
- SuSE Linux v.8.0 (Kernel 2.4.18-4GB): The most common Linux distribution in the german-speaking world.
- Apache v.1.3.23: The Apache HTTP Server Project is an effort to develop and maintain an open-source HTTP server for various modern desktop and server operating systems, such as UNIX and Windows NT (download)
- PHP v.4.2.1: PHP is a widely-used general-purpose scripting language that is especially suited for Web development and can be embedded into HTML (download)
- UMN Mapserver v.3.6.2: MapServer is an OpenSource development environment for building spatially enabled Internet applications. ([[download|http://www2.dmsolutions.ca/webtools/dl/mapserver-3.6.2.tar.gz)
- GMAP ms36: The GMap application is an example of use of the MapServer's PHP/MapScript extension. (download)
- PostgreSQL v.7.2.1: PostgreSQL is a sophisticated Object-Relational DBMS, supporting almost all SQL constructs, including subselects, transactions, and user-defined types and functions. It is the most advanced open-source database available anywhere ([1])
- PostGIS v.0.7: PostGIS adds support for geographic objects to the PostgreSQLobject-relational database (download)
- OGR The OGR Simple Features Library is a C++ open source library (and commandline tools) providing read (and sometimes write) access to a variety of vector file formats including ESRI Shapefiles, and Mapinfo mid/mif and TAB formats.
- W3C-LibWWW v.5.4.0: Libwww is a highly modular, general-purpose client side Web API written in C (download)
- LibGeoTIFF v.1.1.4: GeoTIFF represents an effort by over 160 different remote sensing, GIS, cartographic, and surveying related companies and organizations to establish a TIFF based interchange format for georeferenced raster imagery. ([4])
Alle angeführten Komponenten werden in ein Verzeichnis kopiert. Im Rahmen dieser Beschreibung wird dieses als '/download' bezeichnet. Die Programme werden jeweils entpackt, und in den entsprechenden Unterverzeichnissen konfiguriert und kompiliert.
Zusätzlich zu den oben angeführten Komponenten haben sich folgende als äusserst hilfreich erwiesen:
- checkinstall v.1.5.2: checkinstall will create a Slackware, RPM or Debian compatible package and install it using your distribution's standard package administration utilities (download)
- MapLab v.2.0r2: MapLab is a suite of effective and intuitive web-based tools to create and manage MapServer web mapping applications and map files (download)
Voraussetzungen:
Die erfolgreiche Installation setzt einige grundlegende Kenntnisse des Bertiebssystems voraus:
- Arbeiten in der zeilenorientierten Shell-Umgebung
- Aufbau des Filesystems und Vergabe von Berechtigungen
- Komplilieren von Quellcode, insbesondere mittes 'autoconf' und 'make'
- Grundlegende Web Server Konfiguration, Umgang mit CGI
Folgende Systemvoraussetzungen müssen erfüllt sein:
- Alle Arbeitsschritte müssen als ROOT ausgeführt werden!!
- SuSE Linux 8.0 muss installiert sein (Basisinstallation)
- Apache Webserver muss installiert sein
- Die Basisinstallation von SuSE Linux beinhaltet Apache 1.3.23, dieses kann direkt verwendet werden
Um zu überprüfen, ob Apache installiert ist bzw. läuft, muss die Eingabe
$ ps aux | grep httpd
einen Eintrag zeigen, der so oder ähnlich aussieht:
"root 587 0.0 0.8 8436 4216 ? S 08:09 0:00 /usr/sbin/httpd -f /etc/httpd/httpd.conf"
$ httpd -lmuss (u. a.) den Eintrag "
mod_so.c" zeigen
Um die vorliegende Installation erfolgreich durchzuführen, müssen folgende Programme installiert sein bzw. werden:
- flex
- bison
- regexx
- libtiff
- libjpeg
- libpng
- libz
- freetype2
Diese können direkt der SuSE Linux 8.0 Installations-CD's entnommen werden.
Installation
Jetzt wird es ernst...
GD
-) GD unterstützt ab Version 1.6 keinen GIF Output mehr. Grund hierfür ist die verwendete LZW Komprimierung, die von UNISYS urheberrechtlich geschützt ist. UNISYS begann in letzter Zeit, diese Rechte einzuklagen. Eine gepatchte Version, die dennoch die Erstellung von GIF's ermöglicht, ist aber erhältlich. Dieses HOWTO kann sowohl mit der "Originalversion" von GD als auch mit der Patch-Version verwendet werden. Es ist allerdings bei beiden Versionen ratsam, die bei der SuSE Installation eingespielte Version mittels YAST2 zu entfernen.
$ cd /download $ tar xvfz gd-1.8.4.tar.gz (oder $ tar xvfz gd-1.8.4gif.tar.gz bei der Patch-Version) $ cd gd-1.8.4
Makefile bearbeiten:
$ vi Makefile
Einträge wie folgt angeben:
CFLAGS=-O -DHAVE_LIBXPM -DHAVE_LIBPNG -DHAVE_LIBJPEG -DHAVE_LIBFREETYPE LIBS=-lgd -lpng -lz -ljpeg -lfreetype -lm INCLUDEDIRS=-I. -I/usr/include/freetype2 -I/usr/include/X11 -I/usr/X11R6/include/X11 -I/usr/local/include # Befehl in einer Zeile angeben!
Diese Einstellungen sind unabhängig von der verwendeten GD-Version.
$ make $ make install $ /sbin/ldconfig
PROJ4
$ cd /download $ tar xvfz proj-4.4.5.tar.gz $ cd proj-4.4.5 $ ./configure $ make $ make install $ /sbin/ldconfig
GDAL
$ cd /download $ tar xvfz gdal-1.1.7.tar.gz $ cd gdal-1.1.7 $ ./configure $ make $ make install $ /sbin/ldconfig
W3C-LibWWW
$ cd /download $ tar xvfz gw3c-libwww-5.4.0.tar.gz $ cd gw3c-libwww-5.4.0 $ ./configure $ make $ make install $ /sbin/ldconfig
LibGeoTIFF
$ cd /download $ tar xvfz libgeotiff-1.1.4.tar.gz $ cd libgeotiff-1.1.4 $ ./configure $ make $ make install $ /sbin/ldconfig
PostgreSQL
$ cd /download $ tar xvfz postgresql-7.2.1.tar.gz $ cd postgresql-7.2.1 $ ./configure
falls keine Fehlermeldung erscheint:
$ gmake #ACHTUNG: Nicht 'make' verwenden!!
falls keine Fehlermeldung erscheint:
$ gmake install #ACHTUNG: Nicht 'make install' verwenden!!
falls noch nicht vorhanden, User postgres einrichten
$ useradd postgres
Datenbank initialisieren:
$ mkdir /usr/local/pgsql/data $ chown postgres /usr/local/pgsql/data
Die folgenden Befehle (zw. =====) müssen als User postgres ausgeführt werden: daher:
$ su postgres
$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
Datenbank Server starten:
$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data > postgresql_logfile 2>&1 &Sollen TCP/IP Verbindungen erlaubt werden sollen (u.a. auch für phpPGAdmin notwendig), muss o.a. Befehl mit '
-iD' angegeben werden.
Datenbank anlegen:
$ /usr/local/pgsql/bin/createdb dbname # dbname == gewünschter DB Name
Datenbank kann nun angesprochen werden:
$ /usr/local/pgsql/bin/psql dbname # dbname == gewünschter DB Name
User root anlegen: (als user postgres in Datenbank dbname einloggt)
> create user root with password 'password' createdb creatuser;'
Um Server automatisch bei jedem Boot-Vorgang zu starten, folgende Zeilen in
/etc/init.d/boot.localeinfügen:
$ vi /etc/init.d/boot.local echo "-------------------------------" echo "--START POSTGRESQL-" echo "-------------------------------" su - postgres -c "postmaster -D /usr/local/pgsql/data &"
Postgres-Pfad in Environment eintragen:
$ vi /etc/profilein Variable PATH '
:/usr/local/pgsql/bin' hinzufügen
PostgreSQL Bibliotheken in Dynamic Linker eintragen:
$ vi /etc/ld.so.confZeile '
/usr/local/pgsql/lib' eintragen
$/sbin/ldconfig
PostGIS
PostGIS muss im contrib/ Verzeichnis von PostgreSQL kompiliert werden:
$ cd /download $ tar xvfz postgis-0.7.1 $ cp -r /download/postgis-0.7.1 /download/postgresql-7.2.1/contrib/ $ cd /download/postgresql-7.2.1/contrib/postgis-0.7.1
Einstellungen in Makefile überprüfen:
$ vi Makefile
muss folgende Einträge enthalten:
USE_PG=1 USE_PROJ=1 $ make $ make install
PostGIS v.0.7.1 verlangt PostgreSQL Erweiterung PL/pgSQL. Dises kann mit folgenden Zeilen geladen werden:
CREATE FUNCTION plpgsql_call_handler () RETURNS OPAQUE AS '/usr/local/pgsql/lib/plpgsql.so' LANGUAGE 'C'; CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql' HANDLER plpgsql_call_handler LANCOMPILER 'PL/pgSQL'; # Befehl in einer Zeile angeben!diese als file
pl.sqlabspeichern und in PostgreSQL laden:
$ psql -d 'dbname' -f pl.sql
'make install' hat File "postgis.sql" erzeugt, dieses in PostgreSQl laden:
$ psql -d 'dbname' -f postgis.sql
PHP4
PHP wird als CGI Executable kompiliert, nicht als Apache DSO!!! Dies ist ohnehin die Standardeinstellung, und erfordert somit keine besonderen Konfigurations-Optionen.
$ cd /download $ tar xvfz php-4.2.1.tar.gz $ cd php-4.2.1
Nun muss entschieden werden, für welche Programme PHP "gerüstet" sein soll, d.h. soll es möglich sein, MySQL, PostgreSQL anzusprechen, JPEGs, TIFFs zu erstellen etc. Die hier durchgeführte Konfiguration sollte für die meisten Situationen genügen. Alle möglichen Optionen sind mit
$ ./configure --help | more
abrufbar.
Es hat sich bewährt, für das Erstellen der Makefiles ein kleines Skript zu erzeugen:
$ vi doit-php4
mit folgendem Inhalt:
rm config.cache # löscht eventuell vorhandene, alte Konfigurationsdatei make clean # Räumt eine vorhergehenden, nicht erfolgreichen # Kompilierungsversuch wieder auf ./configure --prefix=/usr --bindir=/usr/bin --libdir=/usr/lib --with-exec-dir=%{libdir}/php/bin --with-pgsql --with-mysql --with-tiff-dir=/usr --with-jpeg-dir=/usr --with-png-dir=/usr --with-zlib=yes --enable-track-vars --enable-magic-quotes --enable-safe-mode --enable-sockets --enable-dbase --with-config-file-path=/etc/httpd --with-regex=system --enable-shared --with-gd=/usr/local --with-freetype-dir=/usr/include/freetype2 --enable-native-gd-ttf # Befehl in einer Zeile angeben!
PHP4 wird ohne '--with-ttf' (d.h. ohne Freetype1) konfiguriert, um Freetype2 Unterstützung zu erzwingen.
$ chmod 755 doit-php4
Skript starten:
$ ./doit-php4
falls keine Fehlermeldung erscheint:
$ make
falls keine Fehlermeldung erscheint:
$ strip php $ make install $ cp php /usr/local/httpd/cgi-bin/php $ cp php.ini-dist /etc/httpd/php.ini
-) PHP4 konfigurieren:
$ cd /etc/httpd $ vi php.ini
Zeilen entsprechend anpassen:
... log_errors = On ... extensions_dir = /usr/local/lib/php/extensions/
-) Das Verzeichnis /usr/local/lib/php/extensions/ muss ggf. erstellt werden!!
$ cd /usr/local/lib $ mkdir php $ mkdir php/extensions
-) Apache konfigurieren:
$ cd /etc/httpd $ vi httpd.conf
Der Standardblock für PHP4 wird komplett auskommentiert:
# # PHP 4.x: # #<IfModule mod_php4.c> #AddType application/x-httpd-php .php #AddType application/x-httpd-php .php4 #AddType application/x-httpd-php-source .phps #</IfModule>
Folgende Zeilen werden eingefügt:
AddType application/x-httpd-php4 .php4 .php3 .php .phtml Action application/x-httpd-php4 /cgi-bin/php
Apache neu starten:
$ rcapache restart
-) PHP Installation testen
$ cd /usr/local/httpd/htdocs
folgende Datei in VI schreiben und als 'inst.php' abspeichern:
$ vi inst.php <? phpinfo() ?>
Im Browser 'http://rechnername/inst.php' anzeigen lassen.
Falls alles funktioniert hat, erscheint eine Aufstellung der installierten PHP Konfiguration.
UMN Mapserver
$ cd /download $ tar xvfz mapserver-3.6.2.tar.gz $ cd mapserver-3.6.2
Es hat sich bewährt, für das Erstellen der Makefiles ein kleines Skript zu erzeugen:
$ vi doit-mapserver
mit folgendem Inhalt:
rm config.cache make clean ./configure --with-proj --with-ogr --with-gdal --with-postgis --with-wmsclient --with-tiff --with-jpeg --with-php=/download/php-4.2.1 --with-freetype=/usr/local/include/freetype2 # Befehl in einer Zeile angeben! $ chmod 755 doit-mapserver
-) Skript starten:
$ ./doit-mapserver
Falls kein Fehler auftritt:
-) Kompilieren:
$ make
Es wurde ein Executable 'mapserv' erstellt, zusätzlich das PHPMapscript Binary. Diese müssen an die richtigen Stellen kopiert werden:
$ cp /download/mapserver/mapserv /usr/local/httpd/cgi-bin/ $ cp /download/mapserver/mapscript/php3/php_mapscript.so /usr/local/lib/php/extensions/php_mapscript_36.so
Für ältere Mapserver-Applikationen Link anlegen:
$ cd /usr/local/lib/php/extensions $ ln -s php_mapscript_36.so php_mapscript.so
-) Mapserver Installation testen
'Test 1'
$ cd /usr/local/httpd/htdocs
folgende Datei in VI schreiben und als 'mapserver.php' abspeichern:
<HTML> <?php dl("php_mapscript.so"); phpinfo(); ?> </HTML>
Apache neu starten:
$ rcapache restart
Im Browser 'http://rechnername/mapserver.php' anzeigen lassen.
Falls alles funktioniert hat, erscheint eine Aufstellung der installierten PHP Konfiguration, inkl. Eintrag für Mapscript.
Test 2:
Im Browser 'http://rechnername/cgi-bin/mapserv' anzeigen lassen. Es sollte
"No query information to decode. QUERY_STRING is set, but empty"
erscheinen, d.h. Mapserver ist ansprechbar, aber natürlich findet er noch keine Daten. Dennoch, Mapserver inkl. PHPMapscript sind korrekt installiert!!
Test 3:
$ /usr/local/httpd/cgi-bin/mapserv -v
sollte folgenden Output geben:
MapServer version 3.6.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP SUPPORTS=PROJ SUPPORTS=TTF SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT INPUT=TIFF INPUT=EPPL7 INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE
GMAP
$ tar xvfz gmap-ms36.tar.gz $ mkdir /usr/local/httpd/htdocs/mapserver $ cp -r gmap/ /usr/local/httpd/htdocs/mapserver/
Temporäres Verzeichnis einrichten: # hier legt der Mapserver die GIFs ab
$ mkdir /tmp/ms_tmp $ chmod -R 777 /tmp/ms_tmp
Apache Konfigurationsdatei editieren:
$ cd /etc/httpd/ $ vi httpd.conf
In der Section "Aliases" folgende Zeilen hinzufügen:
Alias /gmap/ "/usr/local/httpd/htdocs/mapserver/gmap/htdocs/" Alias /ms_tmp/ "/tmp/ms_tmp/" # Mit doppelten Hochkommata!!
Apache neu starten:
$ rcapache restart
Font Pfade anpassen:
$ cd /usr/local/httpd/htdocs/mapserver/gmap/etc $ vi fonts.txt
Pfade sind relativ angegeben, müssen aber absolut sein!
fritqat /usr/local/httpd/htdocs/mapserver/gmap/etc/fritqat.ttf fritqat-bold /usr/local/httpd/htdocs/mapserver/gmap/etc/fritqtb0.ttf fritqat-italic /usr/local/httpd/htdocs/mapserver/gmap/etc/fritqti0.ttf fritqat-bold-italic /usr/local/httpd/htdocs/mapserver/gmap/etc/fritqtb2.ttf
-) GMAP Installation testen
Im Browser 'http://rechnername/mapserver/gmap/htdocs/gmap75.phtml' anzeigen lassen.
Das sollte es gewesen sein!!