Compilation Cygwin de MapServer et Installation HOWTO

Pericles S. Nacionales
University of Minnesota
Conservation Biology Program
pnaciona@gis.umn.edu
Traduction
F.A. Van Den Bussche
Club des Utilisateurs de Linux et des logiciels libres de Toulouse et des environs (CULTE)
mapserver@favdb.net
Relecture
Nathalie Vielmas
Club des Utilisateurs de Linux et des logiciels libres de Toulouse et des environs (CULTE)
nath@favdb.net

Abstract

Ce HOWTO donne un ensemble de procédures pour compiler et installer MapServer sur une plateforme Win32 en utilisant l'environnement Cygwin.

Dernière mise à jour: 16 November 2001

Sommaire

  1. Introduction
  2. Obtenir les paquetages nécessaires
  3. Exemple de configuration MapServer
  4. Compilation
  5. Installation
  6. Problèmes habituels
  7. Remerciements
  8. Commentaires des utilisateurs

Introduction

Si vous êtes famillier de Cygwin et que vous connaissez déjà MapServer, vous pouvez passer directement au chapitre suivant, dans la partie "Exemple de configuration MapServer". Si vous venez juste de débuter avec Cygwin et MapServer, vous devriez commencer ici. Si vous n'avez jamais entendu parlé de MapServer, vous n'êtes pas au bon endroit; allez ici d'abord. Pour tous les autres, commençons.

MapServer de l'université du Minnesota est un logiciel libre dont les sources sont disponibles pour construire des applications oueb de cartographie. Il est utilisé par un nombre croissant au sein de la communauté SIG (GIS) et par ceux qui utilisent l'internet comme un moyen de présenter des informations geospaciales. MapServer peut être configuré et compilé pour plusieurs systèmes d'exploitation, ce document est consacré à la compilation et à l'installation de MapServer sur l'environnement Cygwin qui fonctionne sur les systèmes d'exploitation Win32.

Puisque Cygwin est un environnement UNIX-like et que les outils GNU y sont disponibles, la connaissance de l'environnement shell UNIX sera très utile. Si vous n'êtes pas famillier du shell bash, je vous suggère d'envisager les autres possibilités pour compiler MapServer sur Windows—l'une de ces alternatives est Microsoft Visual C/C++ (MSVC). Il y a un document HOW-TO pour compiler MapServer avec MSVC. Pour ceux qui ne connaissent pas trop le shell UNIX mais qui souhaitent quand même utiliser Cygwin pour compiler MapServer, je tenterai de fournir des étapes simples à suivre pour la compilation. Mis à part la connaissance de l'environnement shel d'UNIX, ceux qui veulent compiler MapServer sous Cygwin devrait aussi connaître l'environnement de "construction"--en particulier les autoconf et make GNU.

Pour l'installation et le développement d'applications, les connaisances de base de la configuration du serveur oueb et de l'environnement CGI sera nécessaire. Le binaire MapServer compilé sous Cygwin est connu pour fonctionner sur un serveur Apache et c'est ce serveur que j'utiliserai dans ce document.

Note: Cygwin et les ouils GNU qu'il conteint sont en constante évolution. J'utilisais Cygwin avec la version DLL 1.3.3 lors de la rédaction originale de ce HOWTO. Aussi j'espère que vous ne rencontrerez pas de problèmes de compatibilité avec des versions différentes de Cygwin, je ne pas vous le garantir. Je vous recommande de vous mettre au niveau de la dernière version si vous utilisez une ancienne version de DLL (antérieure à 1.3.x).

Revenir au sommaire

 

Obtenir les paquetages logiciels nécessaires

Le code source de MapServer peut être téléchargé sous forme de paquetage sur http://mapserver.gis.umn.edu/dload.html. Téléchargez la dernière version de MapServer (NdT 3.6) ou la dernière version de développement constituée quotidiennement.

Des paquetages complémentaires sont nécessaires pour le traitement des entrées et sorties de données supportées par MapServer. Plusieurs paquetages  (bibliothèques) sont indispensables au bon fonctionnement de MapServer, et certains autres peuvent fournir des possibilités supplémentaires mais ne sont pas indispensables. Certains paquetages sont intégrés à Cygwin et n'ont pas besoin d'être compilés. Pour ceux qui ne sont pas inclus dans Cygwin, téléchargez et compiles les avant la compilation de MapServer. Voici certaines des bibliothèques nécessaires ou facultatives pour la compilation de MapServer:

Si vous voulez utiliser l'une de ces bibliothèques cliquez sur le lien indiqué. Lisez la documentation de ces logiciels avant de les télécharger. Quand vous téléchargez le logiciel, placez le dans un répertoire. C'est ce répertoire que vous utiliserez pour compiler MapServer et les bibliothèques.

Truc: Créez un sous répertoire "projects" dans le répertoire /usr/src . Dans Cygwin, utilisez la commande: "mkdir /usr/src/projects". Si vous utilisez l'explorateur Windows, créez le dossier "projects" sous C:\Cygwin\usr\src, ou à l'endroit où vous avez installé Cygwin. Vous pouvez ensuite mettre tous les codes sources téléchargés dans ce répertoire.

Retour au sommaire

 

Exemple de configuration du logiciel MapServer

Cygwin intègre les bibliothèques GD, LibPNG, Zlib, LibTIFF, et LibJPEG. Pour compiler MapServer avec la sortie PNG et les fichiers de formes (Shapefile) et les entrées TIFF/JPEG, vous êtes prêt. Si vous voulez la sortie GIF et que vous n'êtes pas concerné par la licence LZW, je vous suggère de télécharger une bibliothèque modifiée sur http://www.rime.com.au/gd/.

A partir de maintenant je prendrai un exemple que les utilisateurs peuvent suivre et appliquer. Le programme CGI MapServer que je compilerai disposera de l'entrée "ESRI shapefiles", aussi bien que des images TIF et JPEG. Aucune bibliothèque particulière n'est nécessaire puisque MapServer dispose de la fonction intégrée Shapelib et que les bibliothèques TIFF et JPEG sont incluses dans Cygwin. J'incluerai aussi Proj.4 pour disposer de la projection "à la volée" pour mes données. Comme j'ai Proj.4, je peux fabriquer mon MapServer comme serveur compatible OGC-WMS. Comme je veux de bonne polices de caractères, j'aurais aussi à compiler MapServer avec Freetype 1.3 (parce que j'ai quelques problèmes avec Freetype2 :). Puisque Cygwin dispose déjà de GD 1.8.4, j'ai la possibilité de choisir d'utiliser des images PNG ou JPEG pour mes sorties. De toute façon, beaucoup de personnes aimeraient utiliser les images GIF aussi je telechargerai la bibilothèque GD "patchée" GD avec le support automake (parce qu'il n'y a rien de plus simple que automake) sur http://www.rime.com.au/gd. Soyez prudent sur les contraintes de licence.

Donc, téléchargez la "patched gd library with GIF and Automake support" sur http://www.rime.com.au/gd dans /usr/src/projects. Ensuite décompressez le paquetage en utilisant Cygwin. Voci la commande pour faire çà: "tar -xzvf gd-1.8.4amgif.tar.gz" Vous pourriez terminer cette commande avec le sous répertoire appelé gd-1.8.4 sous /usr/src/projects. Vous devez supprimer le fichier après sa décompression ("rm gd-1.8.4amgif.tar.gz").

Téléchargez le source Freetype 1.3 sur http://prdownloads.sourceforge.net/freetype/freetype-1.3.1.tar.gz et décompressez comme suit: tar -xzvf freetype-1.3.1.tar.gz. Vous devez supprimer le fichier après sa décompression.

Téléchargez le source Proj.4 depuis ftp://ftp.remotesensing.org/pub/proj/proj-4.4.4.tar.gz et décompressez comme suit: tar -xzvf proj-4.4.4.tar.gz. Après décompression, téléchargez proj-nad27-1.1.tar.gz depuis ftp://ftp.remotesensing.org/pub/proj vers /usr/src/projects/proj-4.4.4/nad (C:\Cygwin\usr\src\proj-4.4.4\nad). Changez de répertoire pour aller sous proj-4.4.4/nad et décompressez ce que vous venez de télécharger. Supprimez le fichier source après sa décompression.

Téléchargez le source de MapServer sur http://mapserver.gis.umn.edu/dist/nightly.tar.gz et décompressez comme suit: tar -xzvf nightly.tar.gz. Ceci créera un répertoire applé mapserver. Vous devriez avoir maintenant la structure de répertoire suivante:

/usr/src/projects/
                  freetype/
                  gd-1.8.4/
                  proj-4.4.4/
                  mapserver/

Une dernière chose... Téléchargez Regex-0.12 depuis ftp://ftp.gnu.org/pub/gnu/regex/. Cygwin intègre regex, cette version ne fonctionne pas avec MapServer pour quelque mystérieuse raison. J'ai résolu le problème en utilisant cet ancienne version de regex. Décompressez le fichier dans le répertoire mapserver (depuis /usr/src/projects/mapserver) comme suit: "tar -xzvf regex-012.tar.gz". Votre nouveau sous répertoire regex devrait être "/usr/src/projects/mapserver/regex-0.12". Vous êtes maintenant prêt à compiler MapServer et les bibliothèques nécessaires.

Retour au sommaire

 

Compilation

Bibliothèques

Before you can actually compile MapServer, you need to compile all the supporting libraries. This example calls for the patched gd-1.8.4, freetype, and proj.4 libraries. The steps in compiling and installing these libraries are similar to each other but there is order in what should be compiled first. By this I mean that some libraries "depend" on other libraries, much like MapServer depends on these libraries. In the case of GD, you can compile it as is. However, since I need freetype support in MapServer, I need to compile this support into gd. So I will first compile and install freetype before compiling GD. Proj.4 doesn't have any dependencies so we can compile it anytime. Well, I'll compile it first then.

Proj.4
Pour compiler Proj.4, placez vous dans le répertoire /usr/src/projects. Tappez "./configure". Ceci demandera à votre système de générer un Makefile pour vous--l'une des bonnes choses de l'environnement UNIX. Lorsque configure a fini de générer le Makefile, tappez simplement "make". Quand Proj.4 est compilé, tappez "make install". Ceci installera la bibliothèque Proj.4, en-tête et fichiers de donnéesdans le répertoire "/usr/local". Si vous le souhaitez, vous pouvez lancer la commande "make clean" pour supprimer les fichiers créés durant le processus de compilation. Vous en avez terminé avec Proj.4.

Freetype
Puisque GD "depend" de Freetype pour les polices TrueType, vous avez besoin de la compiler en premier. Pour celà, placez vous dans le répertoire Freetype en tappant "cd ../freetype" (puisque vous êtes dans le répertoire Proj.4. Sinon, tappez "cd /usr/src/projects/freetype"). Tappez "./configure" et attendez en la fin. Maintenant tappez "cd lib" pour aller dans le répertoire lib. Tappez "cp arch/unix/Makefile arch/win32/"--ceci copiera votre Makefile dans le sous répertoire arch/win32. Editez le "arch/win32/Makefile" avec votre éditeur de texte favorit. Cherchez les lignes:

VPATH = /cygdrive/d/projects/gnu/mapserver/freetype/lib/arch/unix/../.. 
srcdir = /cygdrive/d/projects/gnu/mapserver/freetype/lib/arch/unix/../.. 

et changez les en:

VPATH = /cygdrive/d/projects/gnu/mapserver/freetype/lib/arch/win32/../.. 
srcdir = /cygdrive/d/projects/gnu/mapserver/freetype/lib/arch/win32/../.. 

N'oubliez pas d'enregistrer vos modifications. Maintenant retournez dans la console Cygwin, tappez "make -f arch/win32/Makefile" et attendez que la compilation se termine. Quand la compilation est finie tappez "make -f arch/win32/Makefile install" pour installer la bibliothèque library et les fichiers d'en-tête. Si vous le souhaitez, tappez "make clean" pour débarrasser des fichiers intermédiaires créés lors de la procédure de compilation. Vous en avez terminé avec Freetype.

GD
Vous aurez à compiler GD pour deux raisons--le support GIF et Freetype. Si vous n'avez pas besoin du GIF puisque vous pensez utiliser les graphiques PNG pour les sorties MapServer, vous n'aurez pas à la compiler. Mais, en ne compilant pas GD vous n'aurez pas non plus l'usage des polices Truetype--le GD inclus dans Cygwin n'a pas été compilé avec Freetype. Donc, si vous voulez utiliser les polices TrueType mais que vous n'avez pas besoin du GIF, vous pouvez utiliser le GD "officiel" disponible sur http://www.boutell.com/gd/.

Pour compiler, placez vous dans le répertoire GD ("cd ../gd-1.8.4") et tappez "./configure --help |more" pour voir les options disponibles pour le script de configuration. Utilisez l'option "--enable-gnu-ld" de manière à inclure le support Freetype. Aussi, cette fois tappez "./configure --enable-gnu-ld --enable-freetype". Malheureusement, configure ne trouve pas les fichiers d'en-tête Freetype aussi vous devez introduire quelques modifications dans le Makefile. Editez le Makefile avec votre éditeur de texte favorit. Cherchez les lignes:

DEFS = -DPACKAGE=\"gd\" -DVERSION=\"1.8.4\" -DHAVE_LIBM=1 -DHAVE_LIBZ=1 -DHAVE_LIBPNG=1 -DSTDC_HEADERS=1 -DHAVE_MALLOC_H=1 -DHAVE_UNISTD_H=1 -DHAVE_ZLIB_H=1 -DHAVE_PNG_H=1 -I. -I$(srcdir) 
CPPFLAGS = -I${prefix}/include -INONE 
LDFLAGS = -L${exec_prefix}/lib -LNONE 

et remplacez les par:

DEFS = -DPACKAGE=\"gd\" -DVERSION=\"1.8.4\" -DHAVE_LIBTTF -DHAVE_LIBM=1 -DHAVE_LIBZ=1 -DHAVE_LIBPNG=1 -DSTDC_HEADERS=1 -DHAVE_MALLOC_H=1 -DHAVE_UNISTD_H=1 -DHAVE_ZLIB_H=1 -DHAVE_PNG_H=1 -I. -I$(srcdir) 
CPPFLAGS = -I${prefix}/include/freetype -I${prefix}/include -I. 
LDFLAGS = -L${exec_prefix}/lib -L.

N'oubliez pas d'enregistrer les modifications. Maintenant retournez dans la console, tappez "make" et attendez en la fin. Testez si le support Freetype fonctionne correctement en tappant "./gdtestttf". Vous devrez obtenir le message suivant:

HEY! THIS IS FOR THE FREETYPE 1.x LIBRARY. 
For better results, look at 'gdtestft' and the 
new gdImageStringFT function, which uses 
the new FreeType 2.x library. 
libgd was not built with TrueType font support

Ceci est un message parfait--ignorez la dernière ligne. Cà fonctionne. N'installez pas cette bibliothèque pour ne pas entrer en conflit avec la bibliothèque GD existant (Sauf si vous voulez vraiment la remplacer... Ne me demandez pas comment.)

Autres bibliothèques.
Si vous voulez compiler d'autres bibliothèques, comme gdal/ogr ou libwww, le process sera similaire, typiquement décompressé chaque source, exécutez ./configure, et make. Assurez vous de vérifier les fichiers README exécutez ./configure avec --help pour exéminer les options disponibles. Souvent vous à valider ou à invalider certaines options. Mais au point où vous en êtes, vous avez l'expérience.

Bien ensuite... Voyons MapServer.

MapServer

A ce point vous seriez tenté d'essayer juste "./configure; make". Mais encore une fois, vous devriez réaliser que ce n'est pas aussi simple. Donc, je vais détailler celà lentement. En premier, allez dans le répertoire mapserver et tappez "./configure --help" pour examiner et réfléchir sur les otpions à donner au script de configuration. Maintenant, si vous avez simplement fait "./configure" nous n'aurons pas la nouvelle bibliothèque GD puisque nous ne l'avons pas installée. Vous devez impérativement utiliser l'option "--with-gd=[DIR]". De même, le script de configuration peut ne pas trouver Proj.4 aussi vous devez utiliser l'option "--with-proj=[DIR]". C'est tout ce dont nous avons besoin pour cet exemple, mais si vous voulez ajouter d'autres bibliothèques vous devriez utiliser les options   supplémentaires--GDAL, par exemple, a besoin de "--with-gdal=[gdal-config directory]". Vous n'aurez probablement besoin des bibliothèques TIFF et JPEG lorsque vous utilisez GDAL.

Mais revenons à notre exemple. Tappez "./configure --with-gd=../gd-1.8.4 --with-proj=/usr/local" pour générer notre Makefile. Après la génération du Makefile, vérifiez le en l'ouvrant dans votre éditeur de texte favorit. Assurez vous que la ligne "GD_LIB" a bien -lttf et non -lfreetype (nous utilisons Freetype 1.3, vous vous en souvenez?). De même, vérifiez la igne "GD" pour vous assurer qu'il y a bien -DUSE_GD_TTF et non -DUSE_GD_FT. Enfin, vérifiez la ligne "TIFF_LIB" pour -lttf et non -lfreetype.

Maintenant vous avez besoin d'incorporer la fonction regex dans le Makefile. Je suppose que nous pourrions l'ajouter dans le Makefile.in avant de lancer le script de configuration--vous pouvez le faire si vous le souhaitez. Donc, localisez les lignes:

REGEX_OBJ= @PHP_REGEX_OBJ@
REGEX_INC= @PHP_REGEX_INC@

et remplacez les par:

REGEX_OBJ=regex-0.12/regex.o
REGEX_INC=-I./regex-0.12
MAKE_REGEX=regex
MAKE_REGEX_CLEAN=regex_clean

Maitenant, ajoutez les lignes suivantes quelque part à la fin du Makefile, de préférence après l'élément "egis::":

regex:
       cd regex-0.12; make; cd ..

Enfin, ajoutez ces trois lignes après l'élément "egis_clean:":

regex_clean:
      cd regex-0.12; $(MAKE) clean; cd ..

Enregistrez vos modifications. Vous êtes maintenant prêt à compiler. Allons y, "make" votre CGI MapServer.

Quand le processus de compilation est terminé, il devrait avoir créé plusieurs exécutables (avec l'extension .exe). Mapserv.exe est le programme CGI dont nous avons besoin pour contsruire les applications MapServer. Les autres exécutables sont des outils pour la création de fichiers de formes (shapefile) indexés, trier des bases de données, et générer les sorties de cartes et légendes. Testez mapserv.exe en tappant "./mapserv -v". Vous devriez obtenir un message du type:

$ ./mapserv -v 
MapServer version 3.5 (beta) OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP SUPPO    
RTS=PROJ SUPPORTS=TTF SUPPORTS=WMS_SERVER INPUT=TIFF INPUT=EPPL7 INPUT=JPEG INPU 
T=SHAPEFILE 

et si vous tappez seulement "./mapserv", vous devriez avoir quelque chose comme:

This script can only be used to decode form results and 
should be initiated as a CGI process via a httpd server. 

Félicitations! Vous avez compilez avec succès MapServer sous Cygwin. Maintenant vous êtes prêt à l'installer et à l'utiliser.

Retour au sommaire

 

Installation

Comme précisé précédemment, le programme CGI Mapserver compilé ave Cygwin est seulement connu pour être utilisé avec Apache. Apache lui-même est actuellement disponible pour Windows sous deux formes--compilation native ou Cygwin. Si vous n'avez pas déjà installé l'un ou l'autre, c'est maintenant le moment de faire votre choix. Les binaires du serveur Apache peuvent s'obtenir sur http://httpd.apache.org/dist/httpd/binaries/. Si vous voulez la version Cygwinallez dans sous répertoire "cygwin", sinon allez dans "win32". Extrayez le paquetage Cygwin dans votre sous répertoire /usr/src/projects. A partir de là, vous pouvez lire les instructions d'installation. Le paquetage binaire Win32 est donné avec ses propres instructions d'installation; lisez les avant de procéder à l'installation de MapServer.

Si vous utilisez le serveur Apache sous Cygwin, l'installation pourra être plus complexe--mettez simplement mapserv.exe dans le répertoire cgi-bin et vous serez prêt à continuer. Vous devriez maintenant poursuivre par l'installation de la démonstration MapServer, ou en créant vos nouvelles applications.

Si vous préférez utiliser le Apache "normal" pour Windows, vous devez gardez ceci à l'esprit: installez Apache dans un répertoire sans espace dans son nom. MapServer ne fonctionnera pas si vous installez Apache par défaut--"c:\program files\apache group\apache". Au lieu de çà, vous devrez l'installer dans c:\apache ou c:\apps\apache (ou simplement sous c:\, où l'installation créera un sous répertoire "apache"). Vous devez aussi inclure le sous répertoire bin de Cygwin (C:\Cygwin\bin) dans vos chemeins systèmes. Ceci se fait en faisant un clique droit sur "Poste de travail" puis sur le menu "Propriétés". Dans les propriétés du système sélectionnez l'onglet "Avancé" et cliquez sur le bouton "variables d'environnement". Le reste devrait être évident pour vous. Rappelez vous que vous devez avoir les droits administrateur pour changer le paramétrage système. Lorsque c'est fait, copiez simplement le mapserv.exe dans le répertoire cgi-bin.

Quant aux programmes utilitaires MapServer, je les mettrais dans /usr/local/bin. Vous pouvez les installer dans Cygwin en tappant "make install" après la compilation de MapServer.

Retour au sommaire

 

Problèmes habituels

Je suis en train de collecter quelques uns des problèmes les plus connus lors de la compilation et l'utilisation du MapServeur Cygwin. Si vous en rencontrez un faites le moi savoir... encore plus si vous avez trouvé la solution. :)

LD_LIB_PATH (problémes avec l'installation de bibliothèques sous /usr/local)

Problèmes en relation avec Apache

Retour au sommaire

 

Remerciements

Norman Vine et David Fawcett qui ont repondu à mes question sur Apache. Stephen Woodbridge qui m'a donné plusieurs suggestions sur ce document. Jamie Smedsmo qui a publié ce bien pauvre HOWTO. Merci à eux. Plusieurs personnes m'ont prodigué leurs encouragements pour la réalisation de ce document--merci aussi à eux! J'espère que ce travail aidera ceux qui veulent essayer le meilleur des logiciels libres et open-source.

Retour au sommaire

 

Commentaires des utilisateurs: