Analyse numérique
AccueilLa page d'accueil du site Analyse numériqueUne compilation de travaux numériques Tuto HP PavilionComment installer un serveur graphique sous debian sur un portable HP Géomatique et SIGQuelques ressources et algos sur le thème de la géomatique DevelQuelques programmes CVLes grandes lignes de mon parcours professionnel et de ma formation MiscDes liens et du bazar A proposDétails sur ce site

Introduction

Pour les besoins de mon travail, je me suis offert un portable HP Pavillon. Comme je travaille dans le service des observatoires d'une agence d'urbanisme, j'avais besoin d'un appareil léger, muni d'un SIG (système d'informations géographiques), d'un outil de gestion de bases de données et d'un système de cyptage des données pour s'assurer que les données stockées ne partent jamais dans la nature en cas de vol ou perte du portable.


Avec la maturité du projet Quantum GIS, mes yeux se sont vite tournés vers une debian munie de postgres et de postgis. Après avoir testé l'install avec une stable et une testing (respectivement lenny et squeeze en ce moment) je conseille vivement la version stable, tout y fonctionne bien, par contre je rencontre pas mal de problèmes avec la testing.


Ce tuto décrit comment paramétrer un système sous debian pour avoir :


Le hardware

L'ordi est un HP Pavilion dv3650ef. Il a un écran de 13.3'' , 4G de ram, 250G de DD, un processeur "Intel Core 2 Duo T6400", une carte graphique "NVIDIA GeForce 9300M GS". Il existe une version avec 3G de RAM et 320G de disque dur, préférez la et ne faites pas la bêtise comme moi, linux ne prennant pas en charge 4 gigas de RAM mais seulement 3. Acheté 689 euros à la Surcouf.

C'est une vraie petite bombe, j'ai un peu peur pour la batterie, on verra à l'usage... Il pèse moins de 2kg et répond pleinement à mes besoins niveau software (voire il va même au delà). J'écris donc ce texte pour faire profiter ceux qui auraient besoin d'un telle station de travail.


L'installation

Par défaut, VISTA est installé dessus. Il aura vécu 30 minutes. Hop, boot sur une debian net install et reformatage du disque dur. C'est parti pour l'install d'une debian/GNU/linux/paté et deux tranches de pain s'il vous plait.


Le partitionnement

Paquets nécessaires

Après l'install du système debian de base et à l'exécution de tasksel, j'ai choisis d'installer les meta-paquets "standards", "environnement graphique" (gnome par défaut) et "ordinateur portable". Voici la liste des paquets supplémentaires à installer pour faire fonctionner le système comme on le souhaite.

$ apt-get install cryptsetup

C'est l'utilitaire qui nous servira d'interface avec le noyau pour prendre en charge le cryptage de la partition dédiée.

$ apt-get install postgresql pgadmin3

postgresql dépend toujours de la dernière version supportée du serveur de base de données PostgreSQL (acutellement la 8.3). Ses dépendances incluent tout ce dont nous avons besoin au niveau de postgres. pgadmin est une interface graphique d'administration de bases postgres.

$ apt-get install postgis

Il s'agit de la couche de support des objets géographiques. Il sert à prendre en charge les objets spatiaux dans postgres.

Qgis n'est pas disponible dans les paquets debian mais le site officiel propose son propre dépot. Editez le fichier /etc/apt/source.list et rajoutez la ligne :

deb http://debian.gfoss.it/ lenny main

Puis, autorisez le téléchargement de paquets depuis cette source, mettez à jour la base de paquets du systeme et installez Quantum. J'ai installé la version "pan" actuellement dans la branche instable mais qui fonctionne farpaitement

$ wget http://debian.gfoss.it/debian-gfoss.key -O - | apt-key add -
$ apt-get update
$ apt-get install qgis

Initialisation et paramétrage de la partition cryptée

Le cryptage sera assuré par des modules du noyau : dm_mod et dm_crypt. S'ils ne sont pas déjà chargés (à vérifier avec la commande lsmod), un coup de modprobe :

$ modprobe dm_crypt dm_mod

Pour qu'ils soient chargés définitivement à chaque démarrage de l'ordi, il suffit de rajouter ces lignes dans le fichier /etc/modules :

dm_crypt
dm_mod

La partition à crypter est /dev/sda3. Le volume s'appelera datas et sera monté sur le point de montage /mnt/datas.

On crée le volume dans le mapper (à ne faire qu'une seule fois) :

$ cryptsetup -y create datas /dev/sda3

A cette étape, le système demandera une passphrase. Il faut bien sur la retenir, c'est elle qui assurera l'accès à la partition cryptée. Cette commande crée le fichier /dev/mapper/datas qui remplacera maintenant /dev/sda3 pour tous les appels au volume crypté.

On crée le système de fichier :

$ mkfs.ext3 /dev/mapper/datas

On monte la partition :

$ mkdir /mnt/datas
$ mount -t ext3 /dev/mapper/datas /mnt/datas

C'est terminé pour cette étape. La partition cryptée est opérationelle. A l'avenir s'il faut monter ou demonter la partition manuellement, il faudra utiliser ces commandes :

$ unmount /mnt/datas
$ cryptsetup remove datas
$ cryptsetup create datas /dev/sda3
Enter passphrase:

Mais nous verrons plus loin comment créer un script qui sera exécuté à chaque démarrage du PC et qui assurera le montage de la partition cryptée, le lancement du serveur postgres et qui arrêtera tout ça proprement à l'arrêt du PC.

Paramétrage de postgres

Tout d'abord, en supposant que le serveur postgres est bien installé et qu'il est actif, nous allons l'arrêter pour le configurer selon nos besoins.

$ /etc/init.d/postgresql stop

Par défaut le système debian, via le gestionnaire de scripts de gestion des services, fait démarrer et arrêter postgres automatiquement quand l'ordi démarre et s'arrête. Nous allons supprimer ces démarrages automatiques. Nous le ferrons nous même plus tard à l'aide d'un script personalisé. En effet postgres doit démarrer après le montage de la partition cryptée et de manière personalisée. Le script de démarrage est appelé dans le répertoire du runlevel par défaut (le 2 en général sous debian, si vous n'êtes pas sur, vérifiez dans le fichier /etc/inittab au niveau de la ligne initdefault. Pour stoper le service, en général c'est le runlevel 6 qui est utilisé.

$ rm /etc/rc2.d/*postgresql
$ rm /etc/rc6.d/*postgresql

Créons un répertoire sur la partiton cryptée qui servira à acceuillir les bases postgres et donnons en les droits à l'utilisateur postgres.

$ mkdir /mnt/datas/gisdb
$ chown postgres /mnt/datas/gisdb

Profitons-en pour donner un mot de passer à l'utilisateur postgres sur le système. Attention, il ne s'agit pas du mot de passe de l'utilisateur postgres dans le sgbd mais bien sur le systeme debian !

$ passwd postgres

Nous avons fait ce travail en tant que root depuis le début. Loggons nous en tant qu'utilisateur postgres.

$ su postgres

Créons la structure gisdb qui recevra nos bases de données.

$ /usr/lib/postgresql/8.3/bin/initdb -A trust -E SQL_ASCII -D /mnt/datas/gisdb
$ ls -lah /mnt/datas/gisdb
total 104K
drwx------ 10 postgres root     4,0K aoû  7 17:06 .
drwxr-xr-x  6 root     root     4,0K jui 31 12:11 ..
drwx------ 10 postgres postgres 4,0K jui 31 15:47 base
drwx------  2 postgres postgres 4,0K aoû  7 17:40 global
drwx------  2 postgres postgres 4,0K jui 19 20:42 pg_clog
-rw-------  1 postgres postgres 3,4K jui 24 22:38 pg_hba.conf
-rw-------  1 postgres postgres 1,5K jui 19 20:42 pg_ident.conf
drwx------  4 postgres postgres 4,0K jui 19 20:42 pg_multixact
drwx------  2 postgres postgres 4,0K jui 31 16:00 pg_subtrans
drwx------  2 postgres postgres 4,0K jui 19 20:42 pg_tblspc
drwx------  2 postgres postgres 4,0K jui 19 20:42 pg_twophase
-rw-------  1 postgres postgres    4 jui 19 20:42 PG_VERSION
drwx------  3 postgres postgres 4,0K jui 31 16:35 pg_xlog
-rw-------  1 postgres postgres  17K jui 24 22:27 postgresql.conf
-rw-------  1 postgres postgres   64 aoû  7 17:06 postmaster.opts
-rw-------  1 postgres postgres   45 aoû  7 17:06 postmaster.pid

Cela a eu pour effet de créer tout l'arborescence nécessaire à ce qu'une instance de postgres fonctionne.

Editez le fichier /mnt/datas/gisdb/postgresql.conf et apportez la modification suivante de manière à ce que tout le monde puisse se conntecter au serveur (pratique dans un réseau local par exemple). Modifiez la ligne listen_addresses comme ci-dessous.

# - Connection Settings -

listen_addresses = '*'		# what IP address(es) to listen on;

Si vous souhaitez vous conntecter avec d'autres ordis dans un réseau local au serveur du portable, il faut éditer le fichier pg_hba.conf. Il donne les droits aux machines qui veulent se connecter. Je ne me suis pas trop penché dessus (ça avait l'air profond). Voici ce que j'ai ajouté pour me connecter chez moi avec mon pc de bureau qui a l'IP 192.168.0.1 dans mon réseau.

host	all	    all		192.168.0.1/32	      trust

Changeons le mot de passe de l'utilisateur postgres dans le sgbdr :

$ /usr/lib/postgresql/8.3/bin/psql
postgres=# \password

puis choisissez un mot de passe qui sera utilisé par qgis et pgadmin.

Démarrons le serveur.

$ /usr/lib/postgresql/8.3/bin/pg_ctl -o -i -D /mnt/datas/gisdb start

Voilà, le serveur postgres tourne sur la partition cryptée. Nous allons pouvoir y créer des basses de données géographiques avec postgis.

Paramétrage de postgis

En ce qui nous concerne, postgis contient des scripts en sql qui doivent être exécutés dans une base postgresql. Il est donc possible sur un serveur d'avoir plusieurs bases. C'est très pratique pour le rangement.

Il est toujours nécessaire d'être loggé en tant que user postgres.

Créons une base de données Ressources_pub. Je l'ai choisi pour y mettre des couches comme celles de Corine Land Cover ou d'autres qui sont dans le domaine public.

$ /usr/lib/postgresql/8.3/bin/createdb Ressources_pub
$ /usr/lib/postgresql/8.3/bin/createlang plpgsql Ressources_pub

On exécute les scripts de postgis pour spatialiser la base.

$ /usr/lib/postgresql/8.3/bin/psql -d Ressources_pub -f /usr/share/postgresql-8.3-postgis/lwpostgis.sql
$ /usr/lib/postgresql/8.3/bin/psql -d Ressources_pub -f /usr/share/postgresql-8.3-postgis/spatial_ref_sys.sql

Script de démarrage

Pour automatiser le montage au boot de la partition cryptée et le lancement de postgres, j'utilise le script ci-dessous. Il faut le mettre dans /etc/init.d/

Je l'ai appelé ringo du nom de la machine. Il est utilisable avec les options start et stop

#! /bin/sh
### BEGIN INIT INFO
# Provides:          defaultdaemon
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

case "$1" in
    start)
	# On cree le mappage de la partition cyptée
	/sbin/cryptsetup create datas /dev/sda3
	# Montage de la partition
	/bin/mount -t ext3 /dev/mapper/datas /mnt/datas
	# Demarrage du serveur postgres
	su postgres -c "/usr/lib/postgresql/8.3/bin/pg_ctl -D /mnt/datas/sigdb start"
	;;
    restart|reload|force-reload)
	echo "Error: argument '$1' not supported" >&2
	exit 3
	;;
    stop)
	# Arret du serveur postgres
	su postgres -c "/usr/lib/postgresql/8.3/bin/pg_ctl -D /mnt/datas/sigdb stop"
	# Demontage de la partiton cryptee
	/bin/umount /mnt/datas
	# On enleve le mappage
	/sbin/cryptsetup remove datas
	;;
    *)
	echo "Usage: $0 start|stop" >&2
  exit 3
	;;
esac

exit 0

Rajoutons les liens symboliques dans les réprtoires rc2.d et rc6.d pour qu'il soit utilisé au boot et au shutdown.

$ ln -s /etc/init.d/ringo /etc/rc2.d/S15ringo
$ ln -s /etc/init.d/ringo /etc/rc6.d/K15ringo

Le script intérrompra le boot pour demander la passphrase qui sert à monter la partition cryptée. A l'arrêt de l'ordi, la partition cryptée sera démontée puis le cryptage retiré proprement.

Paramétrage de Qgis et de PGAdmin

L'essentiel du travail est terminé. postgis fonctionne, il n'y a plus qu'a lancer qgis pour profiter du serveur géographique. Dans le menu plugin->gestionnaire d'extentions, cochez SPIT. Il sert à importer des shapefiles dans une base postgis.


Configuration d'une source de base dans qgis






Exemple de navigation dans ma base pro. Les couches sont rangées dans des schémas, eux
mêmes rangés dans des bases postgis sur le serveur postgres.



SPIT en action



Dans une base, ajoutez des schémas pour améliorer le rangement des couches.



Tests et conclusion

Cela dépasse les espérences, ce qui a valu ce document. En termes de rapidité, qgis affiche corinelandcover sur la France entière avec 5 posts de légende en 10 secondes. 270.000 objets vectoriels on va dire "compliqués". Pour un parcellaire d'objets bien plus simples, 220.000 parcelles, le temps d'affichage est de 5 secondes environ. C'est très satisaisant.

Ressources

Voici une liste des liens que j'ai utlisé pour monter cette machine en station de travail géomatique :