Chapitre 2. Compilation et Installation

Table des matières

2.1. Création des répertoires des sources et du répertoire de destination (facultatif)
2.2. PostgreSQL
2.2.1. Téléchargement
2.2.2. Compilation et Installation
2.2.3. Ajout des outils/supports contributifs pour PostgreSQL
2.3. Geos et Proj
2.3.1. Téléchargement
2.3.2. Compilations et Installations
2.3.3. Création de la DLL pour PROJ
2.4. PostGIS
2.4.1. Téléchargement
2.4.2. Compilation et Installation
2.5. Finalisation de la distribution, rendre sa distribution portable
2.6. Erreurs de compilations reportées par les utilisateurs
2.6.1. Erreur de compilation pour PostgreSQL 8.2.1 et PostGIS 1.2.0
2.6.2. Erreur de libiconv
2.6.3. Erreur de compilation avec PostGIS pour pgsql2shp.exe
2.6.4. Erreur de PostGIS avec make

Nous allons ici procéder aux diverses compilations et installations. Les diverses étapes doivent avoir lieu dans l'ordre chronologique des sections successives de ce chapitre. Nous commencerons par définir une hiérarchie des répertoires des sources pour pouvoir mieux nous retrouver pour la suite et accueillier les sources que nous aurons téléchargés.

L'installation de nos binaires auront lieu vers le répertoire C:\PostgreSQL\8.2.1.

Nous allons lancer un terminal MinGW. Pour cela, double-cliquez sur C:\msys\1.0\mys.bat

Pour la suite, dans les lignes de commandes à saisir dans MinGW ou dans les répertoires de télécharchement des sources (voir les sous-sections "Téléchargement"), XXX ou $USERNAME désigne le répertoire C:\msys\1.0\home\XXX que Msys vous aura créer. Regardez pour cela le nom du répertoire contenu dans c:\msys\1.0\home . Notons aussi que, dans les lignes de commandes de ce chapitre, la caractère ~ correspondra à ce répertoire. De plus, dans les lignes de commandes, le caractère \ indique que la ligne de commande en cours continue sur la ligne suivante (pour des raisons d'affichage...) Pour la compilation de PostgreSQL et de Geos, veuillez à préparer le café ou de la lecture de magazines :-)

Nous clôturerons ce chapitre par les divers erreurs de compilation reportées par les utilisateurs.

2.1. Création des répertoires des sources et du répertoire de destination (facultatif)

Une fois la fenêtre de MinGW lancée, tapez les commandes suivantes

cd ~

mkdir sources

mkdir sources/PostgreSQL

mkdir sources/PostGIS

mkdir sources/Geos

mkdir sources/Proj

Avec ces commandes, nous mettrons donc nos sources dans c:\msys\1.0\home\XXX\sources. Ces répertoires correspondent au répertoires racines des sources. Sinon pour résumer la création des répertoires précédents, on peut aussi utiliser une boucle FOR:

for i in PostgreSQL PostGIS Geos Proj;do mkdir -p ~/sources/$i;done

Figure 2.1. Commandes de création des répertoires

Commandes de création des répertoires

Figure 2.2. Les répertoires des sources (créés par MinGW)

Les répertoires des sources (créés par MinGW)

2.2. PostgreSQL

2.2.1. Téléchargement

Il faut télécharger les sources de PostgreSQL version 8.2.1 dont l'URL est ftp://ftp.fr.postgresql.org/source/v8.2.1/postgresql-8.2.1.tar.bz2 . Pour se faire, nous utiliserons les commandes suivantes

cd ~/sources/PostgreSQL
wget  ftp://ftp.fr.postgresql.org/source/v8.2.1/postgresql-8.2.1.tar.bz2

qui téléchargerons pour nous les sources vers c:\msys\1.0\home\XXX\sources\PostgreSQL

2.2.2. Compilation et Installation

Depuis MinGW, tapez les commandes suivantes. Arrivé à la commande make, allez-vous préparer un café!!! Y'en a un pour au moins 20 à 40 minutes de compilation selon votre machine.

cd ~/sources/PostgreSQL

tar xvjf postgresql-8.2.1.tar.bz2

cd postgresql-8.2.1

configure  --enable-nls

make

make install

La commande cd - tout le monde sait - sert à se rendre dans un répertoire. La commande tar sert à décompresser des archives compressés se terminant par .tar, .tar.bz2 ou d'autres formats. La commande configure permet de vérifier les dépendances envers/avec les autres outils/librairies présentes dans l'environnement. et de les valider. L 'option --prefix permet de savoir où sera installée la distribution du matériel. Ici ce sera /usr/local/pgsql qui en chemin DOS revient à C:\msys\1.0\local\pgsql. La commande make sert à compiler les sources présentes dans les divers sous-répertoires du matériel à installer. La commande make install, une fois la compilation réussie va copier les divers binaires résultants (fichiers .dll et .exe etc...) dans les divers répertoires prévues à cet effet.. Dans le cas de PostgreSQL, vous devriez donc vous retrouverez avec les répertoires bin, lib, include, doc, share dans /usr/local/pgsql correspondants à ces fameux répertoires prévus à cet effet..

Note

Il existe bien d'autres options possibles que peut prendre en compte PostgreSQL lors de la compilation hors mis celle utilisée ici (--enable-nls). Pour obtenir un descriptif des options possibles, vous n'avez qu'à saisir configure --help. Je ne propose ici qu'une option parmi d'autres qui ne pose pas de problème sous WIndows.

On précisera pour les options passé au script configure

  • --enable-nls: permet d'avoir le support de langue adéquate nls (Native Language Support), notamment le français.

2.2.3. Ajout des outils/supports contributifs pour PostgreSQL

C'est dans le répertoire contrib des sources de PostgreSQL que se trouvent les supports (une bonne partie) offrant plus de fonctionnalités type. Pour pouvoir les ajouter à notre distribution, il nous suffira de faire:

cd ~/sources/PostgreSQL/postgresql-8.2.1/contrib
make
make install

2.3. Geos et Proj

Nous allons maintenant nous intéresser à l'installation de Geos et de Proj

2.3.1. Téléchargement

Il faut télécharger les sources respectives de Geos et de Proj dont les URL respectives sont

http://geos.refractions.net/geos-2.2.3.tar.bz2

ftp://ftp.remotesensing.org/proj/proj-4.5.0.tar.gz

cd ~/sources/Geos
wget http://geos.refractions.net/geos-2.2.3.tar.bz2 
cd ~/sources/Proj
wget  ftp://ftp.remotesensing.org/proj/proj-4.5.0.tar.gz

Les commandes ci-dessus copieront respectivement les sources vers c:\msys\1.0\home\XXX\sources\Geos et c:\msys\1.0\home\XXX\sources\Proj

2.3.2. Compilations et Installations

Depuis MinGW, tapez les commandes suivantes. Pour la compilation de Geos, un deuxième café ne serait pas de trop!!!

cd ~/sources/Geos

tar xvjf geos-2.2.3.tar.bz2

cd geos-2.2.3

configure --prefix=/usr/local/pgsql && make && make install

cd ~/sources/Proj

tar xvzf proj-4.5.0.tar.gz

cd proj-4.5.0

configure --prefix=/usr/local/pgsql && make && make install

2.3.3. Création de la DLL pour PROJ

Il faut pour notre distribution créer la librairie libproj.dll dans le répertoire /usr/local/pgsql/lib

cd /usr/local/pgsql/lib

gcc -shared -o libproj.dll -Wl,--out-implib=libproj.dll.a -Wl,--export-all-symbols -Wl,\
--enable-auto-import -Wl,--whole-archive libproj.a -Wl,--no-whole-archive /c/mingw/lib/libmingw32.a

Note

Depuis la version 2.2.1 de Geos, il n'est plus nécessaire maintenant d'avoir à créer la DLL pour Geos. En effet, celle-ci est automatiquement créée lors de la compilation de Geos.

2.4. PostGIS

Nous allons maintenant nous intéresser à l'installation de PostGIS

2.4.1. Téléchargement

Téléchargez les sources de PostGIS version 1.2.0 à cette URL

http://postgis.refractions.net/download/postgis-1.2.0.tar.gz

et copiez ce fichier vers c:\msys\1.0\home\XXX\sources\PostGIS en faisant

cd ~/sources/PostGIS
wget http://postgis.refractions.net/download/postgis-1.2.0.tar.gz

2.4.2. Compilation et Installation

Depuis MinGW, commençons par décompresser les sources:

cd ~/sources/PostGIS

tar xvzf postgis-1.2.0.tar.gz

Il nous faut temporairement modifier la variable d'environnement PATH pour que les binaires de geos, proj et de PostgreSQL soient accessibles.

export PATH=/usr/local/pgsql/bin:/usr/local/pgsql/lib:$PATH

Puis depuis MinGW, faites

cd ~/sources/PostGIS/postgis-1.2.0

configure 

Si tout se passe bien, la commande configure devrait se terminer par

 SUMMARY
 -------------------------------------------------------
 
 HOST_OS: mingw32
 
   PGSQL: /usr/local/pgsql/bin/pg_config
    GEOS: /usr/local/pgsql/bin/geos-config (with C-API)
          (ldflags: -L/usr/local/pgsql/lib)
    PROJ: prefix=/usr/local/pgsql libdir=/usr/local/pgsql/lib
   ICONV: 1 -liconv
  
 PORTNAME: win32
   PREFIX: /usr/local/pgsql
  EPREFIX: ${prefix}
      DOC: /usr/local/pgsql/doc/contrib
     DATA: ${datarootdir}
      MAN: ${datarootdir}/man
      BIN: C:/msys/1.0/local/pgsql/bin
      EXT: C:/msys/1.0/local/pgsql/lib (\$$libdir)
 -------------------------------------------------------

Il ne reste plus qu'à compiler et installer PostGIS:

cd ~/sources/PostGIS/postgis-1.2.0

make && make install

2.5. Finalisation de la distribution, rendre sa distribution portable

Nous allons créer la structure de répertoire C:\PostgreSQL\8.2.1. On pourra aussi le faire depuis MinGW, en faisant

mkdir -p /c/PostgreSQL/8.2.1

Le reste du document se base sur le fait que nous allons récupérer le contenu du répertorie c:\msys\1.0\local\pgsql et le coller dans le répertoire C:\PostgreSQL\8.2.1:

cd /usr/local/pgsql
cp -r . /c/PostgreSQL/8.2.1/

Pour pouvoir rendre votre distribution - tout ce qui est contenu dans le répertoire C:\PostgreSQL\8.2.1 - utilisable sur une nouvelle machine, récupérez (au moins) les DLL suivantes depuis le répertoire C:\MinGW\bin:

  • libintl3.dll;

  • lintl-2.dll que vous devrez renommer en intl.dll;

  • libiconv2.dll et libiconv-2.dll

  • zlib1.dll

et copiez les dans le répertoire C:\PostgreSQL\8.2.1\bin. Sinon il suffit de référencer C:\MinGW\bin dans la variable PATH de votre machine pour la suite.

Vous pouvez aussi faire un peu de ménage dans votre nouvelle distribution en supprimant les fichiers libproj*a et libgeos*a contenut dans C:\PostgreSQL\8.2.1\lib

Ca y est, les outils sont installés!!! C'est dans la boite!

Figure 2.3. Installation terminée......C'est dans la boite!

Installation terminée......C'est dans la boite!

Il ne reste plus qu'à définir l'environnement de travail de PostgreSQL. Ce dernier point sera l'objet du prochain chapitre dans la partie 3 du document.

2.6. Erreurs de compilations reportées par les utilisateurs

Dans cette rubrique, sont mentionnées les erreurs/bugs trouvées par les utilisateurs, que je tiens à remercier pour leurs travails et leurs contributions. Certaines sont signalées depuis la compilation de PostGIS 1.1.0. Je les signale à titre indicatif.

2.6.1. Erreur de compilation pour PostgreSQL 8.2.1 et PostGIS 1.2.0

Erreur reportée par Hervé QUINQUENEL - le 2007-01-27

make -C doc all
make[1]: Entering directory `/home/david/postgresql-8.2.1/doc'
gzip -d -c man.tar.gz | /bin/tar xf -
for file in man1/*.1; do \
  mv $file $file.bak && \
  sed -e 's/\\fR(l)/\\fR(7)/' $file.bak >$file && \
  rm -f $file.bak || exit; \
done
/bin/sh.exe ../config/mkinstalldirs man7
mkdir -p -- man7
for file in manl/*.l; do \
  sed -e '/^\.TH/s/"l"/"7"/'   \
              -e 's/\\fR(l)/\\fR(7)/' \
      $file >man7/`basename $file | sed 's/.l$/.7/'` || exit; \
done
make[1]: Leaving directory `/home/david/postgresql-8.2.1/doc'
make -C src all
make[1]: Entering directory `/home/david/postgresql-8.2.1/src'
make -C port all
make[2]: Entering directory `/home/david/postgresql-8.2.1/src/port'
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing 
-I../../src/port -DFRONTEND -I../../src/include -I./src/include/port/win32 -DEXEC_BACKEND  "-I../../src/include/port/win32"  -c -o crypt.o crypt.c
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing 
-I../../src/port -DFRONTEND -I../../src/include -I./src/include/port/win32 -DEXEC_BACKEND  "-I../../src/include/port/win32"  -c -o fseeko.o fseeko.c
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing 
-I../../src/port -DFRONTEND -I../../src/include -I./src/include/port/win32 -DEXEC_BACKEND  "-I../../src/include/port/win32"  -c -o getrusage.o getrusage.c
In file included from ../../src/include/rusagestub.h:17,
                 from getrusage.c:18:
c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/sys/time.h:27: error: redefinition of `struct timezone'
c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/sys/time.h:40: error: conflicting types for 'gettimeofday'
../../src/include/port.h:292: error: previous declaration of 'gettimeofday' was here
c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/sys/time.h:40: error: conflicting types for 'gettimeofday'
../../src/include/port.h:292: error: previous declaration of 'gettimeofday' was here
make[2]: *** [getrusage.o] Error 1
make[2]: Leaving directory `/home/david/postgresql-8.2.1/src/port'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/david/postgresql-8.2.1/src'
make: *** [all] Error 2

Il faut en fait utiliser MinGW 4.1.0 et Msys 4.0.10 et pas de version de MinGW 5.0.X.

2.6.2. Erreur de libiconv

Erreur reportée par Alain FERCHAL - le 2006-01-03 - pour PostGIS 1.1.0

Lors d'un certain make install, l'erreur suivante se produit

["Le point d'entree de procedure libiconv_close est introuvable dans la bibliotheque de liaisons dynamique libiconv-2.dll"]

Après une recherche sur internet, le mieux semble de télécharger ce fichier diffutils-2.8.7-1-dep.zip disponible à cette adresse

http://ovh.dl.sourceforge.net/sourceforge/gnuwin32/diffutils-2.8.7-1-dep.zip

Il contient un fichier libiconv2.dll qu'il faut ensuite placer dans C:\MinGW\bin.

Page d'info trouvée sur internet: http://projects.edgewall.com/trac/ticket/2233

2.6.3. Erreur de compilation avec PostGIS pour pgsql2shp.exe

Erreur reportée par Jamal BERRICH - le 2006-01-03 - pour PostGIS 1.1.0

Lors de la compilation de PostGIS, on obtenait à un moment l'erreur suivante

[gcc.exe: C:/msys/1.0/libpq.dll: No such file or directory]

dûe à une erreur de frappe de ma part dans le fichier postgis-1.1.0/configure.in où j'avais écrit

PGFELIBS="$(echo $(${PGCONFIG} --libdir)/libpq.dll)"

au lieu de

PGFELIBS="$(echo $(${PG_CONFIG} --libdir)/libpq.dll)"

Erreur corrigée!

2.6.4. Erreur de PostGIS avec make

Erreur reportée par Alain FERCHAL - le 2006-01-03 - pour PostGIS 1.1.0

Si vous obtenez l'erreur suivante

$ make

./autogen.sh

Can't locate Autom4te/General.pm in @INC (@INC contains: /usr/share/autoconf /usr/lib/perl5/5.6.1/msys /usr/lib/perl5/5.6.1 /usr/lib/perl5/site_perl/5.6.1/msys /usr/lib/perl5/site_perl/5.6.1 /usr/lib/perl5/site_perl .) at /usr/bin/autom4te line 40.

BEGIN failed--compilation aborted at /usr/bin/autom4te line 40

make: *** [configure] Error 2

Le mieux c'est de télécharger la bonne version de msysDTK à savoir la 1.0.1 et non la 1.0.0 ou autre