Compiler sous Unix

Author:Howard Butler
Contact:hobu.inc at gmail.com
Author:Thomas Bonfort
Contact:thomas.bonfort at gmail.com
Author:Jeff McKenna
Contact:jmckenna at gatewaygeomatics.com
Last Updated:2016-06-13

Introduction

Mapserver de l’Université du Minnesota est un moteur de rendu cartographique pour le web, open-source et librement disponible. Par sa nature open-source, il peut être compilé sur sur une large variété de plateformes et de systèmes d’exploitation. Nous allons nous concentrer sur comment obtenir, compiler et installer MapServer sur des plateformes de type UNIX.

Note

Les options détaillées de configuration sont maintenu dans le fichier INSTALL.CMAKE packagé à la racine du répertoire source.

Vous devriez peut-être vérifier la page de wiki ``MapServerCompilation`_ pour des informations supplémentaires.

Obtenir le logiciel nécessaire

Vous pouvez obtenir le code source de MapServer aussi bien le paquet de démo depuis la section Téléchargement.

Vous pouvez aussi obtenir la dernière version du code source de MapServer depuis le GitHub.

Bibliothèques externes requises

  • libpng: libpng should be on your system by default. Versions back to 1.2.7 should work.

  • freetype : la version 2.x ou supérieure est requise.

  • libjpeg: libjpeg allows MapServer to render images in JPEG format. A sufficient version should be installed by default on your system (probably version 6b from 1998).

    Avertissement

    Direct JPEG support was deprecated in MapServer 5.8+, and you should now depend on GDAL for raster read support in MapServer. JPEG support is however still required for producing (i.e. writing) images.

  • zlib: Zlib should be on your system by default. Though not used directly by mapserver, it’s a mandatory dependency of libpng.

Bibliothèques externes optionnelles

  • GEOS : GEOS permet à MapServer de faire des prédicats spatiaux et des opérations algébriques (A l’intérieur, touches, etc & union, différence, intersection).

    Nouveau dans la version 4.10.

  • libxml : libxml est requis pour utiliser le support SOS OGC dans MapServer

    Nouveau dans la version 4.10.

  • Oracle Spatial OCI : Les bibliothèques clientes pour votre plateforme sont disponibles au téléchargement depuis le site de Oracle. Idéalement, votre bibliothèque cliente correspond à la version de la base de données que vous interrogez, mais ce n’est pas une exigence contraignante.

  • libpq : libpq est requis pour gérer l’usage des géométries PostGIS dans la base de données PostgreSQL. Idéalement, votre bibliothèque cliente correspond à la version de la base de données que vous interrogez.

  • giflib: libgif / libgif is is used for reading GIF files used as PIXMAP symbols.

  • FastCGI : FastCGI est un protocole populaire pour interfacer MapServer avec plusieurs serveurs web. Vous devrez installer le paquet de développement. Plus de détails sur la manière d’utiliser cette fonctionnalité dans MapServer se trouve ici FastCGI. Sous Ubuntu, ce pourrait être :

    $ apt-get -y install libfcgi-dev
    
  • Cairo (SVG, PDF) support: This library is required to produce PDF and SVG outputs. If you’re on an ubuntu system, it can be installed with “apt-get install -y libcairo2-dev”

  • KML support: This renderer is has no external dependency.

  • HarfBuff: Support complex script shaping (to simplify: the tool that will insert ligatures between characters). Harfbuzz algorithms will be applied on text strings that have been determined to not be latin (i.e. the slowdown induced by harfbuzz is limited to those languages that actually require shaping). Requires FriBidi.

    Nouveau dans la version 7.0.

  • MySQL: Support joining with MySQL (the WITH_MYSQL option).

Fonctionnalités optionnelles

  • Cairo SVG parser support: The WITH_SVGCAIRO option is part of a proposal to improve SVG support. Using this feature requires installing the libsvg-cairo library available here: http://cairographics.org/snapshots/ . You will need to compile and install cairo, libsvg, and libsvg-cairo.
  • SVG support can be enabled either through the unmaintained libsvg / libsvg-cairo combo, or through librsvg (the WITH_RSVG option) at the cost of more dependencies. Use librsvg if your distro provides a package for it, or fall back to libsvgcairo if the cost of compiling the librsvg dependencies is too important.

Support de Anti-Grain Geometry (AGG)

Depuis la version 5.0 MapServer gère le moteur de rendu AGG. MapServer 5.6 et supérieur l’inclut directement dans ses sources et vous n’avez plus rien à faire de spécifique pour le gérer.

Support OGC

MapServer fourni la gestion de plusieurs spécifications OGC . Pour un aperçu, lisez Support des spécifications OGC dans MapServer.

Support WMS

Serveur WMS

La gestion du WMS server est automatiquement activée.

Vous pouvez vérifier ceci par vous-même en cherchant ce genre de votre sortie “configure”:

--   * WMS SERVER: ENABLED

Si, pour une raison quelconque vous ne voulez pas du support WMS, vous pouvez forcez sa désactivation en utilisant “-DWITH_WMS=OFF”.

Plus d’informations pour utiliser cette fonctionnalité est disponible dans Serveur WMS.

Client WMS

Le fonctionnement en cascade est aussi supporté. Il permet à Mapserver de récupérer de manière transparente des couches distantes via le WMS, en jouant basiquement le rôle d’un client, et en les combinant avec d’autres couches pour générer la carte finale.

Afin d’activer cette fonctionnalité, vous aurez besoin de passer l’option WITH_CLIENT_WMS au script configure. MapServer essayera automatiquement de chercher libcurl, qui est aussi requis.

Pour vérifier que cette fonctionnalité est activée, vérifiez que la sortie de configure contient:

--   * WMS CLIENT: ENABLED

Note

Notez que cette fonctionnalité est désactivée par défaut, vous devez l’activez volontairement.

Plus d’informations pour utiliser cette fonctionnalité est disponible sur Client WMS.

Support WFS

Serveur WFS

Le support pour le WFS server est activé par défaut. Le support de OGR et PROJ.4 est requis.

Pour vérifier que cette fonctionnalité est activée, vérifiez que la sortie de configure contient:

--   * WFS SERVER: ENABLED

Si, pour une raison quelconque vous ne voulez pas du support WFS, vous pouvez forcez sa désactivation en utilisant “-DWITH_WFS=OFF”.

Plus d’informations pour utiliser cette fonctionnalité est disponible sur Serveur WFS.

Client WFS

MapServer peut aussi fonctionner comme un client WFS. Cela veut dire effectivement que MapServer lit des données depuis la sortie d’un serveur WFS distant et génère depuis celle-ci une carte, comme il le ferait en lisant la donnée depuis un fichier shapefile.

Afin d’activer cette fonctionnalité, vous aurez besoin de vous assurer d’avoir le support de OGR (avec Xerces activé) et de PROJ.4 et de passer l’option WITH_CLIENT_WFS à votre script configure. MapServer essayera automatiquement de chercher libcurl, qui est aussi requis.

Pour vérifier que cette fonctionnalité est activée, vérifiez que la sortie de configure contient:

--   * WFS CLIENT: ENABLED

Note

Notez que cette fonctionnalité est désactivée par défaut, vous devez l’activez volontairement.

Plus d’informations pour utiliser cette fonctionnalité est disponible sur Client WFS

Serveur WCS

Le support pour le WCS server est activé par défaut. WCS doit être compilé avec certaines bibliothèques. Plus d’information sur ce service est disponible dans Serveur WCS.

Pour vérifier que cette fonctionnalité est activée, vérifiez que la sortie de configure contient:

--   * WCS SERVER: ENABLED

Si, pour une raison quelconque vous ne voulez pas du support WCS, vous pouvez forcez sa désactivation en utilisant “-DWITH_WCS=OFF”.

Serveur SOS

Le support de SOS est activé en utilisant l’option WITH_SOS. Plus d’information sur ce service est disponible dans Serveur SOS.

Pour vérifier que cette fonctionnalité est activée, vérifiez que la sortie de configure contient:

--   * SOS SERVER: ENABLED

Note

Notez que cette fonctionnalité est désactivée par défaut, vous devez l’activez volontairement.

Entrepôts de données spatiales

MapServer peut utiliser une large variété de données en entrée. Une des solutions qui grandit en popularité est d’utiliser des bases de données avec une cartouche spatiale pour stocker la donnée, et de les utiliser directement pour dessiner les cartes pour le web.

Ici, vous trouverez comment activer Mapserver pour qu’il se connecte sur l’un de ces produits. Merci de vous référer à la référence MapFile pour plus de détails comment les utiliser. Cette section détaille seulement comment compiler Mapserver pour leur utilisation.

PostGIS

`PostGIS`__ ajoute le support des objets géographiques dans la base de données realtionnelle `PostgreSQL`__ . En fait,PostGIS “rend spatial” le serveur PostgreSQL, lui permettant d’être utilisé comme un base données spatial “backend” pour les systèmes d’information géographique (SIG), à la manière de SDE de ESRI’ou de l’extension spatiale de Oracle. PostGIS est inclus dans de nombreuses distributions, mais vous pouvez aussi faire tourner votre propre version si c’est nécessaire.

MapServer peut utiliser PostGIS comme source de données. Le support de PostGIS est activé par défaut.

Pour vérifier que cette fonctionnalité est activée, vérifiez que la sortie de configure contient:

--   * POSTGIS: /usr/local/pgsql/lib/libpq.so

Si, pour une raison quelconque vous ne voulez pas du support PostGIS, vous pouvez forcez sa désactivation en utilisant “-DWITH_POSTGIS=OFF”. Pour aider cmake à trouver votre installation de PostGIS, vous pouvez utiliser l’option CMAKE_PREFIX_PATH (par exemple “-DCMAKE_PREFIX_PATH=/usr/local/pgsql”).

Oracle Spatial

La cartouche spatiale de Oracle est aussi gérée par MapServer. Pour vous connecter dessus, vous devez compiler MapServer avec les bibliothèques Oracle en définissant l’option WITH_ORACLESPATIAL. Vous aurez probablement besoin que la variable d’environnement ORACLE_HOME soit définie pour avoir une configuration des choses correcte.

Pour vérifier que cette fonctionnalité est activée, vérifiez que la sortie de configure contient:

--   * Oracle Spatial: <path to oracle spatial shared library>

Compiler

En premier, préparez le terrain en vous assurant que toutes les bibliothèques requises et/ou recommandées sont installées avant de tenter de compiler MapServer. Cela vous rendra la vie beaucoup moins compliquée ;). Voici l’ordre que j’utilise habituellement:

  1. Compilez GDAL/OGR. Décrire comment compiler GDAL/OGR est au delà du cadre de ce document. Si vous avez des besoins pour de nombreux formats, assurez-vous d’installer ces bibliothèques en premier. Je trouve souvent que compiler GDAL/OGR prend autant de tant que MapServer lui-même!

  2. Compile PROJ.4. PROJ.4 is a straight-forward configure/make/make install library.

  3. Compiler libcurl. libcurl est une bibliothèque qui s’installe simplement avec les étapes configure/make/make install. Cette bibliothèque est seulement utilisée avec d’autres fonctionnalités, donc “–with-curl-config” ne fera rien sauf si quelque chose comme “–with-wmsclient” ou “–with-wfsclient” sont aussi sélectionnés.

    Note

    Si vous voulez configurer MapServer pour utiliser SSL lors de l’accès au serveur WMS/WFS libcurl doit être configuré / compilé avec l’option “–with-ssl”. Les détails sur la manière de réaliser cela sont indiqués sur Comment configurer MapServer comme client pour accéder à un service via https.

  4. Compile/install optional libraries. These might include PostGIS, Oracle Spatial, AGG, Ming, PDFlib, or MyGIS. Mix and match as you need them.

  5. Décompressez le tarball MapServer et allez dans le répertoire mapserver:

    $ tar -zxvf mapserver-X.Y.Z.tar.gz
    
  6. Créez le répertoire build et configurez votre environnement.

    Créez le répertoire de compilation:

    $ cd mapserver-X.Y.Z
    $ mkdir build
    $ cd build
    

    Configurez votre environnement avec “cmake” (c’est un exemple):

    $ cmake -DCMAKE_INSTALL_PREFIX=/opt \
            -DCMAKE_PREFIX_PATH=/usr/local/pgsql/91:/usr/local:/opt \
            -DWITH_CLIENT_WFS=ON \
            -DWITH_CLIENT_WMS=ON \
            -DWITH_CURL=ON \
            -DWITH_SOS=ON \
            -DWITH_PHP=ON \
            -DWITH_PERL=ON \
            -DWITH_RUBY=ON \
            -DWITH_JAVA=ON \
            -DWITH_CSHARP=ON \
            -DWITH_PYTHON=ON \
            -DWITH_SVGCAIRO=ON \
            -DWITH_ORACLESPATIAL=ON \
            -DWITH_MSSQL2008=ON \
            ../ >../configure.out.txt
    

    The following options are enabled by default (version 7.0: WITH_PROJ, WITH_WMS, WITH_FRIBIDI, WITH_HARFBUFF, WITH_ICONV, WITH_CAIRO, WITH_FCGI, WITH_GEOS, WITH_POSTGIS, WITH_GDAL, WITH_OGR, WITH_WFS, WITH_WCS, WITH_LIBXML2, WITH_GIF.

    Si vous voulez aussi générer une version statique de la librairie, les options BUILD_STATIC et LINK_STATIC_LIBMAPSERVER peut être utilisées,

    Il y a de nombreuses autres options disponibles. Pour une liste à jour des options disponibles pour cmake, veuillez vous référer au fichier CMakeLists.txt.

    Cela peut être une bonne idée de mettre les commandes de configuration dans un fichier et de le rendre exécutable (+x). Cela permet d’éviter de les saisir à nouveau et aussi de pouvoir retrouver comment MapServer a été configuré.

  7. Maintenant que vous avez configuré vos options de compilation et sélectionné les librairies que vous voulez que MapServer puisse utiliser, vous êtes prêt à compiler le code source.

    C’est actuellement plutôt simple, exécutez seulement “make”:

    $ make
    
  8. Install the MapServer libraries:

    # make install
    

    Pour s’assurer que tout a bien fonctionné, regardez le fichier appelé mapserv

    $ ls -al mapserv
    -rwxr-xr-x  1 user user 13745 mars  11 17:45 mapserv
    

    Un test simple pour l’essayer et le lancer

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

    Le message ci-dessus est tout à fait normal, et signifie exactement ce qu’il dit. Si vous avez un autre message, quelque chose ne s’est pas du tout bien passé.

Installation

Binaire Mapserver

Le programme MapServer lui-même consiste en un seul fichier, le binaire exécutable “mapserv”. C’est un exécutable CGI, destiné à être appelé et lancé par votre serveur web.

Dans cette section, nous assumerons que vous faites tourner Apache sous son répertoire par défaut dans /usr/local/apache2. Vous aurez peut-être besoin de privilèges pour éditer votre httpd.conf (le fichier principal de configuration de apache), ou quelqu’un (comme votre webmaster) pour vous aider avec les détails de configuration.

Si vous n’avez pas Apache installé et que vous le voulez ainsi que php, fastcgi, etc cela sera fait avec quelques choses comme cela :

$ apt-get install -y apache2 apache2-mpm-worker libapache2-mod-fastcgi
$ a2enmod actions fastcgi alias
$ apt-get install libapache2-mod-php5 php5-common php5-cli php5-fpm php5

Le but principal est d’obtenir le binaire “mapserv” installé dans dans un répertoire accessible publiquement qui soit configuré pour lancer des scripts et des programmes CGI.

  1. Localiser votre répertoire cgi-bin. Avec une configuration par défaut, le répertoire CGI est “/usr/local/apache2/cgi-bin” (Les utilisateurs RedHat utiliseront “/home/httpd/cgi-bin”, ceux de Debian : “/usr/lib/cgi-bin”). Si vous utilisez Apache, il devrait y avoir une directive ScriptAlias dans votre http.conf, ou dans le site par défaut quelque chose comme cela :

    $ cat /etc/apache2/sites-available/default | grep 'cgi-bin'
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    
  2. Localisez le chemin d’installation de votre exécutable fraîchement installé. Cela est affiché quand vous lancez “make install”, quelque chose comme cela :

    -- Installing: /usr/local/bin/mapserv
    -- Set runtime path of "/usr/local/bin/mapserv" to
          "/usr/local/lib:/usr/local/pgsql/91/lib"
    
  3. Vous voudrez mettre en place un lien symbolique vers l’exécutable de votre répertoire cgi-bin:

    # ln -s /usr/local/bin/mapserv /usr/lib/cgi-bin/mapserv
    

    Avertissement

    Assurez vous de vous lier avec un fichier mapserv installé (après avoir lancé ‘make install’) et PAS avec l’endroit où il a été compilé.

Tester votre nouvelle installation

Placer le fichier mapserv dans ce répertoire le rend accessible par l’URL suivante : “http://yourhostname.com/cgi-bin/mapserv”. Quand vous accédez à cette URL via votre client web, vous devriez attendre la sortie suivante si tout a bien fonctionné: “No query information to decode. QUERY_STRING is set, but empty.”. Si vous avez ce message, vous avez fini avec l’installation de MapServer.

Problèmes communs

Permissions de fichier

Le problème le plus courant que vous êtes susceptible de rencontrer est que quand vous tentez d’installer le binaire est le problème des droits:

  • Vous n’avez pas les droits d’écriture sur le répertoire CGI de votre serveur web. Demandez à votre webmaster d’installer le fichier pour vous.

  • Le serveur web vous renvoie une erreur “403 Permission denied”. Assurez-vous que l’utilisateur qui fait fonctionner le serveur web (habituellement “nobody”) a les droits d’exécution sur le binaire exécutable. Rendre le fichier exécutable par tous est très bien et sûr:

    $ chmod o+x mapserv
    

Erreurs Apache

Vous recevrez peut-être quelques différents types d’erreurs également si votre configuration de serveur web n’est pas bonne:

  • “500 Internal server error” : c’est un message d’erreur très générique. Tous ce qu’il vous dit c’est que le serveur web n’a pas réussi à lancer le programme. Vous devriez consulter les logs d’erreurs du serveur web pour essayer d’en savoir plus, et peut être solliciter l’aide de votre webmaster/administrateur système. La documentation Apache a aussi des indications sur la configuration “cgi-bin” à l’adresse http://httpd.apache.org/docs/2.2/howto/cgi.html

    ::

    Vérifier les logs de votre serveur $ tail /var/log/apache2/error.log

Où allez après que vous ayez réussi à le compiler

Le document Une introduction à MapServer fournit une excellente couverture pour bien débuter avec MapServer.