UMN MapServer kompilieren und installieren unter Suse 8.0

GISWiki - Das freie Portal für Geoinformatik (GIS)
Version vom 8. Februar 2007, 18:17 Uhr von HeinzJ (Diskussion | Beiträge) (-) GMAP Installation testen)

(Unterschied) ← Nächstältere Version | Aktuelle Version ansehen (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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

alexander.pucher@univie.ac.at

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)
  • 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)
  • GD v.1.8.4: A graphics library for fast image creation. (download)
  • PROJ4 v.4.4.5: Cartographic Projections library for on-the-fly conversion ([2])
  • GDAL v.1.1.7: GDAL is a translator library for raster geospatial data formats. ([3])
  • 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 -l 
muss (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.local
einfü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/profile 
in Variable PATH '
:/usr/local/pgsql/bin
' hinzufügen

PostgreSQL Bibliotheken in Dynamic Linker eintragen:

$ vi /etc/ld.so.conf 
Zeile '
/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.sql
abspeichern 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!!