Table des matières
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.
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
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
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..
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.
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
Nous allons maintenant nous intéresser à l'installation de Geos et de Proj
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
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
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
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.
Nous allons maintenant nous intéresser à l'installation de PostGIS
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
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
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!
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.
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.
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.
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
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!
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