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ées.
Le dossier de téléchargement pour les sources auront lieu vers le répertoire-racine /mnt/sources/
Nous allons lancer un terminal. Nous profiterons aussi lors de ce chapitre pour fournir les commandes permettant d'installer Geos, Proj et PostGIS
Je pars ici du prinicpe que les commandes apt-get et apt-cache de Debian vous sont familiés. Je ne ferais pas ici usage des outils tel que synaptics et aptitude
Tapez la commande suivante
mkdir /mnt/sources
Pour simplifer 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 /mnt/sources/$i;done
Les programmeurs de PostgreSQL pour des raisons de sécurité (impliquant des failles/fuites de sécurités selon les droits accordés à cet utilisateur sous Linux qui peuvent être dûe à des attaques de requêtes de type "SQL injection" par le réseau ou par une mauvaise utilisation des modules objets chargés dans les bases par de simples utilisateurs etc...) ont imposés que cet utilisateur devait avoir des droits limités sur la machine sur lequel tourne PostgreSQL.Cellà a toutjours été le cas sous des systèmes autres que Windows. Cette règle fut ensuite pris en compte - pour Windows -lors du développement de la 7.5 devel juste avant la sortie de la 8.0.0.
Créons donc cet utilisateur qui a l'accoutumée et pour des raison d'habitude est appelé postgres.
Vous pouvez appeler cet utilisateur comme bon vous semblera. Veuillez alors adapter la suite de la documentation à votre choix.
adduser postgres
qui nous renvoit
Ajout de l'utilisateur « postgres »... Ajout du nouveau groupe « postgres » (1002). Ajout du nouvel utilisateur « postgres » (1002) avec le groupe « postgres ». Création du répertoire personnel « /home/postgres ». Copie des fichiers depuis « /etc/skel » Enter new UNIX password: Retype new UNIX password: passwd : le mot de passe a été mis à jour avec succès Modification des informations relatives à l'utilisateur postgres Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée Nom complet []: N° de bureau []: Téléphone professionnel []: Téléphone personnel []: Autre []: Ces informations sont-elles correctes [o/N] ? o
Dans la suite, je ne propose pas de passer en revue les diverses options de compilation de PostgreSQL mais de retenir celles que j'ai l'habitude d'utiliser.
Ce qui est bon à savoir avant de commencer à compiler PostgreSQL.
Sur le système, il faut commencer par vérifier la présences des outils suivants notamment dans le cadre d'un environnement de compilation complet
make: version supérieure à la 3.7 que l'on peut vérifier en faisant make -v;
GCC: compilateur C de GNU;
tar utilitaire de décompression pour les sources de PostgreSQL;
libreadline bibliothèquequi permet d'avoir accès à l'historique de requête dans le moniteur interactif psql;
zlib bibiothèque nécessaire pour la création d'archives lors de la sauvegardes de bases de données en archive tar ou comrpessées par pg_dum ou pg_restore;
gettext Le package Gettext est utilisé pour l'internationalisation et la localisation. Les programmes peuvent êtres compilés avec le support de la langue native ('Native Language Support' ou NLS) qui leur permettent d'afficher les messages dans la langue native de l'utilisateur, notamment pour nous le français.
Par exemple sous debian, on pourrait faire
apt-cache search tar
et ainsi de suite pour les autres bibliothèques. Puis il faudrait installer l'ensemble manquant en fonction de ce qu'affiche la recherche par la ligne
apt-get update apt-get install tar zlib1g zlib1g-dev libreadline5 libreadline5-dev gettext gettext-base
SI l'on souhaite compiler PostgreSQL avec des options spéciales, il est bon d'avoir d'installé
OpenSSL: pour chiffrer et sécuriser les connexions entre l'application client (par exemple psql ou pgadmin) et le serveur
Tcl/Tk indispensable pour utiliser PgAccess (application d'administration graphique pour PostgreSQL)
Téléchargez les sources de PostgreSQL version 8.1.1 à cette URL
ftp://ftp.fr.postgresql.org/source/v8.1.1/postgresql-8.1.1.tar.gz
et copiez ce fichier vers /mnt/sources/PostgreSQL ou plus simplement en faisant
cd /mnt/sources/PostgreSQL wget ftp://ftp.fr.postgresql.org/source/v8.1.1/postgresql-8.1.1.tar.gz
Pour la décompression, il nous suffira de faire
cd /mnt/sources/PostgreSQL tar xvzf postgresql-8.1.1.tar.gz
Cette section va nous permettre de configurer les sources avant leur compilation, nous allons faire appel à un script qui va également effectuer une vérification des dépendances logicielles. Voici la commande nécessaire pour utiliser ce script :
./configure
La commande suivante nous donnera des informations bien utiles sur les diverses options possibles de compilation
./configure --help `configure' configures PostgreSQL 8.1.1 to adapt to many kinds of systems. Usage: ./configure [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print `checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for `--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or `..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local/pgsql] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, `make install' will install all the files in `/usr/local/pgsql/bin', `/usr/local/pgsql/lib' etc. You can specify an installation prefix other than `/usr/local/pgsql' using `--prefix', for instance `--prefix=$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-integer-datetimes enable 64-bit integer date/time support --enable-nls[=LANGUAGES] enable Native Language Support --disable-shared do not build shared libraries --disable-rpath do not embed shared library search path in executables --disable-spinlocks do not use spinlocks --enable-debug build with debugging symbols (-g) --enable-depend turn on automatic dependency tracking --enable-cassert enable assertion checks (for debugging) --enable-thread-safety make client libraries thread-safe --enable-thread-safety-force force thread-safety in spite of thread test failure --disable-largefile omit support for large files Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-docdir=DIR install the documentation in DIR [PREFIX/doc] --without-docdir do not install the documentation --with-includes=DIRS look for additional header files in DIRS --with-libraries=DIRS look for additional libraries in DIRS --with-libs=DIRS alternative spelling of --with-libraries --with-pgport=PORTNUM change default port number 5432 --with-tcl build Tcl modules (PL/Tcl) --with-tclconfig=DIR tclConfig.sh is in DIR --with-perl build Perl modules (PL/Perl) --with-python build Python modules (PL/Python) --with-krb5 build with Kerberos 5 support --with-krb-srvnam=NAME name of the default service principal in Kerberos [postgres] --with-pam build with PAM support --with-bonjour build with Bonjour support --with-openssl build with OpenSSL support --without-readline do not use Readline --without-zlib do not use Zlib --with-gnu-ld assume the C compiler uses GNU ld [default=no] Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP C preprocessor LDFLAGS_SL DOCBOOKSTYLE location of DocBook stylesheets Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to <pgsql-bugs@postgresql.org>.
Le script configure accepte diverses options qui permettent de configurer précisément la façon dont est construit PostgreSQL :
--prefix=PREFIX : Installe tous les fichiers dans le répertoire PREFIX au lieu de /usr/local/pgsql. Les fichiers seront en fait installés dans divers sous-répertoires ; aucun fichier ne sera installé directement dans le répertoire PREFIX ;
--exec-prefix=EXEC-PREFIX : Installe les fichiers exécutables dépendants de l'architecture dans le répertoire EXEC-PREFIX. Dans le cas où il n'est pas précisé, EXEC-PREFIX vaut PREFIX ;
--bindir=DIRECTORY : Indique le répertoire des fichiers exécutables. Par défaut vaut EXEC-PREFIX/bin (soit /usr/local/pgsql/bin par défaut) ;
--datadir=DIRECTORY : Indique le répertoire des fichiers en lecture seule utilisés par PostgreSQL. Par défaut vaut PREFIX/share. Cela n'a rien à voir avec l'emplacement des fichiers de base de données ;
--sysconfdir=DIRECTORY : Répertoire pour les fichiers de configuration, PREFIX/etc par défaut ;
--libdir=DIRECTORY : Emplacement des bibliothèques et des modules dynamiques. Par défaut, EXEC-PREFIX/lib ;
--includedir=DIRECTORY : Répertoire d'installation des fichiers d'en-tête C et C++. Par défaut, PREFIX/include ;
--mandir=DIRECTORY : Les pages de manuel de PostgreSQL seront installées dans ce répertoire. Par défaut, PREFIX/man ;
--with-docdir=DIRECTORY : Les fichiers de documentations, sauf les pages de manuel, seront installées dans ce répertoire. Par défaut, PREFIX/doc ;
--without-docdir : n'installe pas la documentation lors du make install ;
--with-includes=DIRECTORIES : DIRECTORIES est une liste de répertoires séparés par deux-points dans lesquels seront recherchés les fichiers d'include en plus des répertoires standards. Utile si vous avez des bibliothèques (comme GNU Readline) installées dans des répertoires particuliers ;
--with-libraries=DIRECTORIES : DIRECTORIES est une liste de répertoires séparés par deux-points dans lesquels seront recherchés les bibliothèques. Comme pour --with-includes, à n'utiliser que si vous disposez de packages installés dans des emplacements non standards ;
--enable-nls[=LANGUAGES] : Active l'affichage des messages dans d'autres langues que l'anglais. LANGUAGES est une liste des codes à supporter séparés par des espaces. Si vous n'indiquez rien, toutes les traductions sont installées. Nécessite une implémentation de l'API Gettext ;
--with-pgport=NUMBER : Paramètre le numéro de port par défaut du serveur et des clients. Par défaut, vaut 5432. A n'utiliser que si vous voulez lancer plusieurs instances de PostgreSQL sur la même machine ;
--with-perl : Compile le langage PL/Perl coté serveur ;
--with-python : Compile le langage PL/Python côté serveur ;
--with-tcl : Compile le langage PL/Tclcôté serveur ;
--with-tclconfig=DIRECTORY : Chemin contenant les informations de configuration pour l'interfaçage avec Tcl situées dans le fichier tclConfig.sh. A utiliser si vous voulez utiliser une version de Tcl différente de celle installée ;
--with-krb4, --with-krb5 : support de l'authentification Kerberos 4 ou 5 mais pas les deux ;
--with-krb-srvnam=NAME : Nom du service principal de Kerberos ;
--with-openssl : Support pour les connexions SSL (cryptées). Requiert le package OpenSSL ;
--with-pam : Support PAM (Pluggable Authentication Modules) ;
--without-readline : Evite l'utilisation de la bibliothèque Readline ce qui désactive l'historique des commandes et l'édition de la ligne en cours ;
--with-rendezvous : Support Rendezvous (recommandé sur Mac OS X) ;
--disable-spinlocks : Permet de compiler PostgreSQL même si aucun support pour le spinlock CPU de la plateforme. Résulte en des performances médiocres ;
--enable-thread-safety : Rend les bibliothèques client thread-safe ;
--without-zlib : Evite l'utilisation de la bibliothèque Zlib. Désactive les archives compressées de pg_dump (à n'utiliser que si vous ne disposez pas de zlib) ;
--enable-debug : Inclut les informations de débuggage dans les binaires et les bilbiothèques, uniquement pour le développement ;
--enable-cassert : Active les vérifications d'assertions, uniquement pour le développement ;
--enable-depend ; Active la surveillance automatique des dépendances. Les makefiles résultants forceront la recréation des binaires si un des headers a changé. Ne fonctionne que sur GCC, pour le développement ;
Comme pour les scripts configure classiques, vous pouvez paramétrer le compilateur via la variable d'environnement CC (par défaut, GCC est utilisé), les drapeaux du compilateur via CFLAGS, vous pouvez passer ces variables sur la ligne de commande (./configure CC=/opt/bin/gcc CFLAGS=’-O2 -pipe’).
Nous essayerons de compiler PostgreSQL avec l'options suivante
--enable-nls: permet d'avoir le support de langue adéquate nls (Native Language Support), notamment le français.
Si la ligne de configuration s'est passé sans problème alors, on peut passer à la suite, la compilation
make
Il ne reste plus qu'à installer nos binaires en faisant
make install
Nous rappelerons au passage que si l'option --prefix dans la ligne de ./configure n'a pas été déteminé par défaut notre distribution sera alors installé par défaut dans le répertoire /usr/local/pgsql contenant les sous répertoire bin, include, lib, doc, share
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 /mnt/sources/PostgreSQL/postgresql-8.1.1/contrib make make install
Afin de pouvoir accéder librement à nos utilitaires de PostgreSQL et comme ce dernier dispose de variable d'environnement utiles - que nous verrons en temps utile - comme PGDATA, qui précise le chemin d'accès vers notre groupe de bases de données, nous allons renseigner ces informations en modifiant le fichier /etc/profile :
PATH=/usr/local/pgsql/bin:$PATH PGDATA="/mnt/pgdata" export PATH PGDATA
Au lieu de préciser ici la modification à la variable d'environnement LD_LIBRARY_PATH lui demandant de pointer vers le répertoire des librairies de PostgreSQL (/usr/local/pgsql/lib), ouvrons le fichier /etc/ld.so.conf et ajoutons la ligne suivante
/usr/local/pgsql/lib
modification que l'on peut aussi obtenir en faisant
echo /usr/local/pgsql/lib >> /etc/ld.so.conf
Rechargeons maintenant les librairies dans le "cache" du système de manière à pouvoir les prendre en comptes en faisant
ldconfig
Si nous sommes toujours dans le même termina ou un autre, rechargeons la variable d'environnement PATH du système en faisant
source /etc/profile
Vérifions que tout semble avoir bien été installé en faisant par exemple
if [ ! -z $(which pg_config) ]; then for i in '--version' '--configure' '--includedir';do \ pg_config ${i};done;else echo "PostgreSQL est introuvable";fi
qui devrait renvoyer
PostgreSQL 8.1.1 '-with-openssl' '--enable-nls' /usr/local/pgsql/include
Personnellement, pour avoir un PATH et un PGDATA accessible par défaut pour tous les utilsiateurs, je mets aussi celà dans le fichier /etc/bash.bashrc
# System-wide .bashrc file for interactive bash(1) shells. # To enable the settings / commands in this file for login shells as well, # this file has to be sourced in /etc/profile. export PATH="${PATH}:/usr/local/pgsql/bin" export PGDATA="/mnt/pgdata" [...]
Pour faire l'initialisation qui sera l'objectif de la prochaine section, il nous faut mettre à jour nos locales. Commencez par exécuter la commande suivante en tant que root locale -a et voyez si elle vous renvoit au moins les lignes suivantes
[...] fr_FR fr_FR@euro fr_FR.iso88591 fr_FR.iso885915@euro [...]
Pour les jeux d'encodage supportés par PostgreSQL 8.1.1, merci de consultez le lien suivant bien utile
http://traduc.postgresqlfr.org/pgsql-8.1.1-fr/multibyte.html qui explique bien les jeux de caractères supportés par le serveur
Si c'est la case vous pouvez passer directement à la section suivante. Sinon il vous faut le jeu de caractères propres à la France, le LATIN9. A cette fin, tapez donc la commande suivante
dpkg-reconfigure locales
Dans la liste apparaissant sur fond bleu, faites défiler la liste - en utilisant les flèches de votre clavier - et sélectionnez
[*] fr_FR ISO-8859-1
[*] fr_FR.UTF-8 UTF-8
[*] fr_FR@euro ISO-8859-15
Pour sélectionner ces options, utilisez la touche [BARRE ESPACE] de votre clavier
Pour sélectionner, le bouton situé en bas appuyez sur la touche [TABULATION] de votre clavier de manière à ce que ce dernier apparaisse sur un fond rouge - voir figure - et appuyez sur [ENTER]
Il ne reste pus qu'à préciser le jeu de paramètres régionaux apparaissant sur la nouvelle fenêtre, à savoir fr_FR@euro. Pour vérifier que tout s'est bien passé, il suffit de faire cat /etc/environment qui doit renvoyer au moins LANG=fr_FR@euro
L'initialisation - au sens du système de fichiers - consiste à la création du (premier) groupe de vos futures bases de données par défaut - faisant parti d'un cluster au sens des bases de données -. Cela va consister "à remplir" le répertoire correspondant à la variable d'environnement PGDATA de PostgreSQL qui n'existe pas encore. Elle répond aux besoins suivants. Quel encodage choisir par défaut? Quel doit être le mode de connexion par défaut? etc...Mais le reste des configurations des paramètrages du serveur peut par la suite être reprise dans les fichiers .conf de PostgreSQL..
C'est l'utilitaire initdb qui précise et fait tout celà. Pour obtenir un résumé succint des possibilités offertes par cet utilitaire, il suffit de saisir
$initdb --help initdb initialise un groupe de bases de données PostgreSQL. Usage : initdb [OPTION]... [REP_DONNEES] Options : [-D, --pgdata=]REP_DONNEES emplacement de ce groupe de bases de données -E, --encoding=CODAGE initialise le codage par défaut des nouvelles bases de données --locale=LOCALE initialise le groupe de bases de données avec la locale donnée --lc-collate, --lc-ctype, --lc-messages=LOCALE --lc-monetary, --lc-numeric, --lc-time=LOCALE initialise le groupe de bases de données avec la locale précisée dans la catégorie respective (prise, par défaut, dans l'environnement) --no-locale équivalent à --locale=C -A, --auth=MÉTHODE méthode d'authentification par défaut pour les connexions locales -U, --username=NOM nom du superutilisateur de la base de données -W, --pwprompt demande un mot de passe pour le nouveau superutilisateur --pwfile=nomfichier lit le mot de passe du nouveau superutilisateur à partir d'un fichier -?, --help affiche cette aide puis quitte -V, --version affiche la version puis quitte Options moins utilisées : -d, --debug génère un grand nombre de traces de déboguage -s, --show affiche les paramètrages internes -L DIRECTORY indique où trouver les fichiers d'entrées -n, --noclean ne nettoie pas après des erreurs Si le répertoire des données n'est pas spécifié, la variable d'environnement PGDATA est utilisée.
Créeons maintenant notre répertorie de groupe de bases de données - qui correspond à la variable PGDATA - en faisant
mkdir /mnt/pgdata chown -R postgres:postgres /mnt/pgdata
Connectons-nous en tant qu'utilisateur postgres (=super-utilisateur de PostgreSQL) depuis le terminal.
su postgres
Vérifions malgré tout que le répertoire des utilitaires de PostgreSQL (/usr/local/pgsql/bin) soient accessibles en les voyant apparaitre dans notre PATH , depuis PGDATA respectivement
env | grep PATH=
env |grep PGDATA
sinon mettons là à jour en faisant
source /etc/profile
Remplissons maintenant notre répertoire de données selon les spécifications suivantes
Connexions sans mot de passe (mode trusting) sur la machine en locale à tous les utisateurs créés ultérieurement par le super-utilisateur (option -A trust à passer à initdb);
encodage selon les locales supportées par la machine
Les locales de la machine peuvent être listées en utilisant la commande locale -a sur la machine
Ces spécifications sont pris en compte par initdb en lui passant les options suivantes
initdb -A trust
Les fichiers appartenant à ce système de bases de données doivent appartenir à l'utilisateur «postgres». Cet utilisateur doit aussi posséder le processus serveur. Le groupe de bases de données sera initialisé avec la locale fr_FR@euro. Le codage de la base de données par défaut a été correctement configuré avec LATIN9. création du répertoire /mnt/pgdata ... ok création du répertoire /mnt/pgdata/global... ok création du répertoire /mnt/pgdata/pg_xlog... ok création du répertoire /mnt/pgdata/pg_xlog/archive_status... ok création du répertoire /mnt/pgdata/pg_clog... ok création du répertoire /mnt/pgdata/pg_subtrans... ok création du répertoire /mnt/pgdata/pg_twophase... ok création du répertoire /mnt/pgdata/pg_multixact/members... ok création du répertoire /mnt/pgdata/pg_multixact/offsets... ok création du répertoire /mnt/pgdata/base... ok création du répertoire /mnt/pgdata/base/1... ok création du répertoire /mnt/pgdata/pg_tblspc... ok sélection de la valeur par défaut de max_connections... 100 sélection de la valeur par défaut de shared_buffers... 1000 création des fichiers de configuration... ok création de la base de données template1 dans /mnt/pgdata/base/1... ok initialisation de pg_authid... ok activation de la taille illimitée des lignes pour les tables systèmes... ok initialisation des dépendances... ok création des vues système... ok chargement de pg_description... ok création des conversions... ok initialisation des privilèges sur les objets intégrés... ok création du shéma d'informations... ok lancement du vacuum sur la base de données template1... ok copie de template1 vers template0... ok copie de template1 vers postgres... ok Succès. Vous pouvez maintenant lancer le serveur de bases de données en utilisant: postmaster -D /mnt/pgdata or pg_ctl -D /mnt/pgdata -l journaltrace start
Pour les jeux d'encodage supportés par PostgreSQL 8.1.1, merci de consultez le lien suivant bien utile
http://traduc.postgresqlfr.org/pgsql-8.1.1-fr/multibyte.html qui explique bien les jeux de caractères supportés par le serveur
A savoir, si vous ne souhaitez pas installer PostgreSQL en tant que service mais pouvoir le démarrer/arrêter manuellement, il suffit de faire respectivement
pg_ctl start
ou
pg_ctl stop
Le script permettant d'installer PostgreSQL en tant que service se trouve à /mnt/sources/PostgreSQL/postgresql-8.1.1/contrib/start-scripts/linux Par exemple sous Debian, on copiera le script linux vers /etc/init.d/postgresql
cp /mnt/sources/PostgreSQL/postgresql-8.1.1/contrib/start-scripts/linux /etc/init.d/postgresql
Il est nécessaire de modifier le script de démarrage afin de positionner différentes variables (des commentaires indiquent la zone où il peut être nécessaire d'apporter des modifications). Si vous n'avez rien changé, il n'est pas utile de modifier quoi que ce soit.
Ajoutons les droits nécessaires au fichier
chmod 744 /etc/init.d/postgresql
Ensuite il faut créer les liens symboliques pour que le service soit démarré aux bons niveaux d'exécution. Sous Debian
update-rc.d postgresql defaults
Le serveur est maintenant prêt à être démarré. Pour cela, il suffit d'utiliser le script que l'on vient de mettre en place :
/etc/init.d/postgresql start
A titre d'information voici le contenu de mon fichier /etc/init.d/postgresql
#! /bin/sh # chkconfig: 2345 98 02 # description: PostgreSQL RDBMS # This is an example of a start/stop script for SysV-style init, such # as is used on Linux systems. You should edit some of the variables # and maybe the 'echo' commands. # # Place this file at /etc/init.d/postgresql (or # /etc/rc.d/init.d/postgresql) and make symlinks to # /etc/rc.d/rc0.d/K02postgresql # /etc/rc.d/rc1.d/K02postgresql # /etc/rc.d/rc2.d/K02postgresql # /etc/rc.d/rc3.d/S98postgresql # /etc/rc.d/rc4.d/S98postgresql # /etc/rc.d/rc5.d/S98postgresql # Or, if you have chkconfig, simply: # chkconfig --add postgresql # # Proper init scripts on Linux systems normally require setting lock # and pid files under /var/run as well as reacting to network # settings, so you should treat this with care. # Original author: Ryan Kirkpatrick <pgsql@rkirkpat.net> # $PostgreSQL: pgsql/contrib/start-scripts/linux,v 1.7 2004/10/01 18:30:21 tgl Exp $ ## EDIT FROM HERE # Installation prefix prefix=/usr/local/pgsql # Data directory PGDATA="/mnt/pgdata" # Who to run the postmaster as, usually "postgres". (NOT "root") PGUSER=postgres # Where to keep a log file #PGLOG="/var/log/pgsql" ## STOP EDITING HERE # Check for echo -n vs echo \c if echo '\c' | grep -s c >/dev/null 2>&1 ; then ECHO_N="echo -n" ECHO_C="" else ECHO_N="echo" ECHO_C='\c' fi # The path that is to be used for the script PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # What to use to start up the postmaster (we do NOT use pg_ctl for this, # as it adds no value and can cause the postmaster to misrecognize a stale # lock file) DAEMON="$prefix/bin/postmaster" # What to use to shut down the postmaster PGCTL="$prefix/bin/pg_ctl" set -e # Only start if we can find the postmaster. test -x $DAEMON || exit 0 # Parse command line parameters. case $1 in start) $ECHO_N "Starting PostgreSQL: "$ECHO_C su - $PGUSER -c "$DAEMON -D '$PGDATA' &" 2>&1 echo "ok" ;; stop) echo -n "Stopping PostgreSQL: " su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast" echo "ok" ;; restart) echo -n "Restarting PostgreSQL: " su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast -w" su - $PGUSER -c "$DAEMON -D '$PGDATA' &" 2>&1 echo "ok" ;; reload) echo -n "Reload PostgreSQL: " su - $PGUSER -c "$PGCTL reload -D '$PGDATA' -s" echo "ok" ;; status) su - $PGUSER -c "$PGCTL status -D '$PGDATA'" ;; *) # Print help echo "Usage: $0 {start|stop|restart|reload|status}" 1>&2 exit 1 ;; esac exit 0
Ce qu'il est possible de faire afin d'avoir une trace de chaque fichier de log - lors du redémarrage de la machine - c'est de spécifier un répertoire de log où seront conservés les fichiers de log. Pour ma part, j'ai opté pour là création d'un sous-répertoire dans $PGDATA = /mnt/pgdata
su postgres mkdir $PGDATA/pg_log
J'ai ensuite modifié mon fichier /mnt/pgdata/postgresql.conf de la ligne 203 à 240 dont voici un extrait
#--------------------------------------------------------------------------- # ERROR REPORTING AND LOGGING #--------------------------------------------------------------------------- # - Where to Log - #log_destination = 'stderr' # Valid values are combinations of # stderr, syslog and eventlog, # depending on platform. # This is used when logging to stderr: redirect_stderr = on # Enable capturing of stderr into log # files # These are only used if redirect_stderr is on: log_directory = 'pg_log' # Directory where log files are written # Can be absolute or relative to PGDATA log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # Log file name pattern. # Can include strftime() escapes log_truncate_on_rotation = off # If on, any existing log file of the same # name as the new log file will be # truncated rather than appended to. But # such truncation only occurs on # time-driven rotation, not on restarts # or size-driven rotation. Default is # off, meaning append to existing files # in all cases. log_rotation_age = 1440 # Automatic rotation of logfiles will # happen after so many minutes. 0 to # disable. log_rotation_size = 10240 # Automatic rotation of logfiles will # happen after so many kilobytes of log # output. 0 to disable. # These are relevant when logging to syslog: #syslog_facility = 'LOCAL0' #syslog_ident = 'postgres'
Ce qui me permet à chaque redémarrage de ma machine ou du service - donc du serveur - d'avoir un fichier nommé en postgresql-(date)_(heure).log. Par exemple, pour le fichier postgresql-2006-03-14_152348 stocké dans le répertoire /mnt/pgdata/pg_log, je sais que le serveur a redémarré lors de la journée du 14 Mars 2006 à 15:23:48.
Il y aura surement une manipulation à faire dans le fichier qui répertorie les mirroirs pour les deb de debian /etc/apt/sources.list
Rendez vous ensuite dans le répertoire de root
cd /root/
Faites ensuite
# # Mise à jour # apt-get update # # Recherche des .deb sur la 8.1 # apt-cache search postgresql | grep 8.1 [....] postgresql-8.1 - object-relational SQL database, version 8.1 server [....] postgresql-server-dev-8.1 - development files for PostgreSQL 8.1 server-side programming # # Compilation pour la 8.1 à partir des sources qui seront téléchargées et les .deb construites # apt-get -b source postgresql-8.1 # # Liste des différentes deb construites # ls # # On ontiendra des paquets parmi les suivants #libecpg5_8.1.0-3_i386.deb postgresql-client-8.1_8.1.0-3_i386.deb #libecpg-compat2_8.1.0-3_i386.deb postgresql-contrib-8.1_8.1.0-3_i386.deb #libecpg-dev_8.1.0-3_i386.deb postgresql-doc-8.1_8.1.0-3_all.deb #libpgtypes2_8.1.0-3_i386.deb postgresql-plperl-8.1_8.1.0-3_i386.deb #libpq4_8.1.0-3_i386.deb postgresql-plpython-8.1_8.1.0-3_i386.deb #libpq-dev_8.1.0-3_i386.deb postgresql-pltcl-8.1_8.1.0-3_i386.deb #postgresql-8.1_8.1.0-3_i386.deb postgresql-server-dev-8.1_8.1.0-3_i386.deb # # Voir le contenu de la .deb principale # dpkg -c postgresql-server-dev-8.1_8.1.0-3_i386.deb | less # # Installation # dpkg -i postgresql-server-dev-8.1_8.1.0-3_i386.deb
Nous allons maintenant nous intéresser à l'installation de Geos et de Proj
Téléchargez les sources respectives de Geos et de Proj grâce à leurs URL respectives
http://geos.refractions.net/geos-2.2.1.tar.bz2
ftp://ftp.remotesensing.org/proj/proj-4.4.9.tar.gz
et copiez-les respectivement vers /mnt/sources/Geos et/mnt/sources/Proj
Depuis votre terminal, tapez les commandes suivantes. Pour la compilation de Geos, un café ne serait pas de trop!!!
cd /mnt/sources/Geos tar xvjf geos-2.2.1.tar.bz2 cd geos-2.2.1 ./configure && make && make install cd /mnt/sources/Proj tar xvzf proj-4.4.9.tar.gz cd proj-4.4.9 ./configure && make && make install
Normalement le répertoire /usr/local/bin doit déjà être accessible par votre variable PATH. Voyez celà en l'affichant
env | grep PATH=
qui devrait renvoyer quelque chose comme
PATH=...;/usr/local/bin
Si ce n'est pas le cas, veuillez alors ouvrir - comme pour PostgreSQL - le fichier /etc/profile et écrire
PATH=.../usr/local/bin:$PATH
Mettons à jour notre variable en faisant
source /etc/profile
Testons maintenant si Geos et Proj ont été installé convenablement on testant respectivement les commandes suivantes
geos-config --version
renvoyant
2.2.1
pour Proj, la commande suivante
proj
devant renvoyer
Rel. 4.4.9, 29 Oct 2004 usage: proj [ -beEfiIlormsStTvVwW [args] ] [ +opts[=arg] ] [ files ]
Il faut aussi que les libraires de Geos et de Proj soient chargés. Pour celà
echo /usr/local/lib >> /etc/ld.so.conf
puis
ldconfig
Nous allons maintenant nous intéresser à l'installation de PostGIS
Téléchargez les sources de PostGIS version 1.1.2 à cette URL
http://postgis.refractions.net/download/postgis-1.1.2.tar.gz
et copiez ce fichier vers /mnt/sources/PostGIS
Depuis votre terminal, commençons par décompresser les sources:
cd /mnt/sources/PostGIS tar xvzf postgis-1.1.2.tar.gz
Puis depuis votre terminal, faites
cd /mnt/sources/PostGIS/postgis-1.1.2 ./configure
Il ne reste plus qu'à compiler et installer PostGIS:
cd ~/sources/PostGIS/postgis-1.1.2 make && make install
Nous verrons l'utilisation de PostGIS en temps utile.
A partir de la version 1.1.2 de PostGIS, les tests de régression ont fortement été améliorés et mieux maintenues. Les tests de régression lorsqu'une version vient tout juste de sortir ou une prochaine version est sur le point de sortir permettent de vérifier que PostGIS fournira le minima vital attendu pour fonctionner avant toute utilisation ultérieure. Celà permet également de tester les futures nouveautés de la version car qui dit nouvelle version dit aussi nouveaux tests éventuels. En date de la version 1.1.2, 12 tests de régression sont fournis.
Concernant les tests de régression, il est également possible de les effectuer avant d'installer PostGIS ("make install") mais la compilation ("make") est au moins nécessaire.
Rendez-vous dans le répertoire des sources de PostGIS. Et exécutez les commandes suivantes
cd /mnt/sources/PostGIS/postgis-POSTGIS_VERSION@ export PGUSER=postgres make -C regress
La commande export PGUSER=postgres nous évitera de déclarer l'utilisateur root en tant que super-utilisateur de PostgreSQL - ce qui pourrait conduire à la mise en danger du serveur et ce qui est vivement déconseillé.
De la dernière commande ci-dessus résultera l'affichage suivant
make: entrant dans le répertoire « /mnt/src/PostGIS/postgis-1.1.2/regress » Creating spatial db postgis_reg PostgreSQL 8.1.1 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 4.0.3 20051201 (prerelease) (Debian 4.0.2-5) Postgis 1.1.2 - 2006-04-21 00:13:42 GEOS: 2.2.1-CAPI-1.0.1 PROJ: Rel. 4.4.9, 29 Oct 2004 Running tests regress: Ok. regress_index: Ok. lwgeom_regress: Ok. regress_lrs: Ok. removepoint: Ok. setpoint: Ok. simplify: Ok. snaptogrid: Ok. affine: Ok. regress_ogc: Ok. regress_bdpoly: Ok. regress_proj: Ok. Run tests: 12 Successful: 12 Failed: 0 make: quittant le répertoire « /mnt/src/PostGIS/postgis-1.1.2/regress »
Tout est donc OK! Voilà vous disposez d'un serveur complet et digne de ce nom.