47. FAQ Linux-PostgreSQL - Compilation de PostgreSQL

Contenu de cette section

=====================================================

Foire Aux Questions (FAQ) de PostgresSQL V6.0 Spécifique Linux A LIRE EN PARALLE AVEC LA FAQ NORMALE

=====================================================

Dernière mise à jour: Wed Jan 29 20:16:00 GMT 1997

Gestionnaire actuel: Andrew C.R. Martin ( martin@biochem.ucl.ac.uk )

Auteur original: Andrew C.R. Martin ( martin@biochem.ucl.ac.uk )

47.1 Quelles modifications dois-je apporter à src/Makefile.global ou src/Makefile.custom?

Ces modifications sont réalisées plus facilement en exécutant le script d'adaptation dans le répertoire src qui créera un fichier Makefile.custom pour vous.

Si vous le faites par vous-même, vous *devez* renseigner la variable suivante : PORTNAME= linux

Il vous faudra aussi modifier celle-ci pour refléter votre propre installation: POSTGRESDIR

Si vous validez l'option USE_TCL option, vous devrez renseigner celles-ci : TCL_INCDIR= TCL_LIBDIR= TCL_LIB= TK_INCDIR= TK_LIBDIR= TK_LIB= X11_INCDIR= X11_LIBDIR= X11_LIB=

Sur mon système Slackware3.0, ces données sont : TCL_INCDIR= /usr/include/tcl TCL_LIBDIR= /usr/lib TCL_LIB= -ltcl TK_INCDIR= /usr/include/tcl TK_LIBDIR= /usr/lib TK_LIB= -ltk X11_INCDIR= /usr/include/X11 X11_LIBDIR= /usr/X386/lib X11_LIB= -lX11

Vous pouvez aussi effectuer d'autres modifications dont vous avez besoin, ceci étant documenté dans les fichiers the INSTALL file and in Makefile.global

47.2 Pourquoi ai-je des problèmes avec "libreadline" manquant?

Les systèmes Linux ne sont généralement pas livrés avec la bibliothèque GNU readline installée. Soit vous vous assurez que vous n'avez pas activé les options readline dans src/Makefile.global ou src/Makefile.custom soit vous installez la bibliothèque GNU readline.

Notez que Debian Linux (comme FreeBSD) est livré avec readline installé.

47.3 REDHAT Pourquoi ai-je des problèmes avec libdl and dlfcn.h manquants?

La bibliothèque libdl est utilisée pour la liaison dynamique de fonctions fournies par l'utilisateurs au moment de l'exécution. Pour une raison quelconque, cette bibliothèque a été oubliée dans la distribution Redhat. Il semble que ce problème a été résolu dans la version Redhat 4.0 (Colgate).

RedHat possède maintenant un nouveau paquetage ld.so RPM sur son site FTP. Récupérez simplement :

ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/ld.so-1.7.14-4.i386.rpm

Installez le fichier RPM de la manière habituelle et c'est tout!

Il y a eu des rapports indiquant que des systèmes ont été abîmés suite à l'accès à ces bibliothèques par certains programmes pendant leur mise à jour (ce qui n'est pas tout à fait surprenant). En conséquence, c'est une bonne idée de redémarrer le système avant l'installation de nouvelle bibliothèques et d'avoir le minimum de choses en fonction pendant ces mises à niveau. Passer en mode mono-utilisateur est certainement aussi une bonne idée!

Si vous voulez le faire de la manière difficile, vous pouvez obtenir la bibliothèque et le fichier en-tête à :

ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.7.14.tar.gz

Autrement, vous pouvez obtenir les binaires précompilés dans distributions/debian/buzz/binary-i386/base/ld.so-1.7.14-4.deb sur le même site, ou suivre les instructions données pour la question 1.2 de correction de la même erreur avec les premières versions de Slackware 3.1. Ne pas utiliser cette méthode, à moins que vous sachiez ce que vous faites!

47.4 SLACKWARE 3.1 Pourquoi ai-je des problèmes avec libdl and dlfcn.h manquants ?

Voir la réponse à la question 1.3. Slackware jusqu'à la version 3.0 était fourni avec cette bibliothèque et le fichier "include" et ils ont semblé revenir en arrière avec les dernières versions 3.1, mais les premières livraisons 3.1 (avant le 9 Septembre 1996) ne les avaient pas et beaucoup de versions CD-ROM ont été réalisés à partir de ces premières versions 3.1.

Il y a eu des rapports indiquant que des systèmes ont été abîmés suite à l'accès à ces bibliothèques par certains programmes pendant leur mise à jour (ce qui n'est pas tout à fait surprenant). En conséquence, c'est une bonne idée de redémarrer le système avant l'installation de nouvelle bibliothèques et d'avoir le minimum de choses en fonction pendant ces mises à niveau. Passer en mode mono-utilisateur est certainement aussi une bonne idée!

La meilleure manière de corriger cela est d'obtenir le fichier ldso.tgz du disque a4 d'une distribution plus récente de Slackware 3.1 de décompacter ce fichier à partir du répertoire root (/), puis de faire

sh install/doinst.sh

pour terminer l'installation, à la suite de cela, faites

ldconfig

Si vous voulez l'installer manuellement, vous devez d'abord installer le fichier dlfcn.h in /usr/include.

Puis, installer le fichier libdl.so.1.7.14 (ou une version plus récente) dans /lib, puis faire :

cd /lib ln -sf libdl.so.1.7.14 libdl.so.1 ln -sf libdl.so.1 libdl.so

Sur quelques systèmes (dépendant de la configuration de GCC) il peut être nécessaire de faire :

cd /usr/lib ln -sf /lib/libdl.so .

Finalement

ldconfig

47.5 Ma compilation du processus d'arrière plan échoue réclamant le "fichier include" dlfcn.h missing

Voir la réponse aux questions 1.3/1.4. N'oubliez pas que si vous utilisez un système a.out vous devez auparavant avoir installé le paquetage dld (qui n'est pas fourni avec la plupart des systèmes a.out) pour avoir dlfcn.h en entier. Voir Question 1.11.

47.6 GCC se plaint d'une option ignorée -fpic

Le première versions de GCC acceptaient soit -fpic soit -fPIC. Il apparaît que les plus récentes versions (V2.7.2?) requièrent -fPIC. Si vous utilisez une version ELF de Linux, on peut ignorer cela sans problème, puisque -fPIC est la valeur par défaut.

Vous pouvez apporter une correction à cela en éditant le fichier src/Makefile.global et en changeant CFLAGS_SL

47.7 J'ai des messages d'avertissement du type "warning- cast from pointer to integer of different size"

Ils apparaissaient dans les premières versions de Postgres95 et peuvent, sans risque, être ignorés. PostgreSQL V6.0 doit pouvoir se compiler sans messages d'avertissement sauf ceux relatifs aux fichiers en-têtes système (qui peuvent également être ignorés sans risque).

47.8 SuSE-Linux 4.2 Où sont curses et termcap?

SuSE-Linux a ncurses et non pas curses. Fixer la valeur de CURSES_LIB dans src/Makefile.custom à -lncurses (ou faites ceci par l'intermédiaire d'un script personnalisé).

SuSE-Linux possède la bibliothèque termcap library dans /usr/lib/termcap au lieu de /usr/lib. Si vous avez un problème, il vous faut ajouter la ligne suivante à src/Makefile.custom:

LDADD_BE+= -L/usr/lib/termcap

Vous pouvez avoir besoin d'éditer src/bin/psql/Makefile et d'effectuer la modification de:

ifeq ($(PORTNAME), linux) LD_ADD+= -ltermcap en: ifeq ($(PORTNAME), linux) LD_ADD+=

47.9 Pourquoi ai-je des problèmes avec ld.so?

Si vous avez des problèmes avec ld.so, une autre bibliothèque nécessaire en format ELF pour les liens dynamiques, alors c'est que vous avez bricolé votre système ou (plus vraisemblablement) effectué une mise à niveau de Linux.

Voyez les réponses aux questions 1.3/1.4. Vous pouvez avoir besoin d'installer ld.so.x.y.z dans /lib et de faire tourner ldconfig.

La version stable la plus récente du paquetage ld package est 1.7.14 Au moment de la rédaction de ce texte, les versions 1.8.x de ld sont expérimentales.

47.10 Pourquoi ai-je les erreurs `yy_flush_buffer undefined'?

Ce n'est pas réellement spécifique à Linux, mais c'est courant sur les installations Linux les plus anciennes. Il vous faut une version récente de flex (2.5.2 ou suivantes) pour compiler PostgreSQL. Notez que flex 2.5.3 a un bogue: voir la Question 3.4.

47.11 Comment dois-je compiler PostgreSQL sur un système a.out?

Premièrement, vous devez installer la bibliothèque dld. On peut l'obtenir sur le site Sunsite sous le nom : Linux/libs/dld.3.2.7.tar.gz

Deuxièmement, ajouter la ligne suivante au fichier src/Makefile.custom: LINUX_ELF= (ou utilisez un script personnalisé)

47.12 Pourquoi make échoue-t-il avec - yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y make- /usr/bin/make- cannot execute binary file

Ce fut un problème des premières versions de Postgres95. Pour PostgreSQL on utilise bison -y par défaut plutôt que yacc.

yacc est généralement implanté comme script qui invoque bison -y Pour une raison quelconque (certaines versions de make? certaines versions de bash?) make est incapable d'exécuter ce fichier script.

Pour corriger cela, éditez simplement src/mk/port/postgres.mk.linux et, à la fin du fichier, changez : # YACC = bison -y en YACC = bison -y

47.13 Que sont les références à libsocket dans X11_LIB et libnsl dans src/Makefile.global?

Ce fut un problème dans la version 1.08 (elles sont spécifiques à Sun Solaris). Cela a été corrigé dans 1.09 et 6.0

47.14 DEBIAN Où se trouve libtermcap?

Le Linux de Debian est livré sans bibliothèque termcap et utilise ncurses (qui à la place utilise terminfo). Il n'y a pas besoin de modifier la variable CURSES_LIB dans src/bin/psql/Makefile puisque Debian fournit un lien de libncurses vers libcurses (à la différence de SuSE-Linux --- voir la Question 1.8).

Vous pouvez avoir besoin d'éditer src/bin/psql/Makefile et de changer:

ifeq ($(PORTNAME), linux) LD_ADD+= -ltermcap en: ifeq ($(PORTNAME), linux) LD_ADD+=


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre