FR:Nominatim/Installation

From OpenStreetMap Wiki
Jump to navigation Jump to search

an unequal sign

Cet article est une version traduite de l’article original, mais son contenu semble ne plus être en phase avec le texte de référence (habituellement la version anglophone ou germanophone). Veuillez mettre à jour cette traduction si possible.

Ces scripts sont à utiliser conjointement au mode -O gazetteer de osm2pgsql pour générer une base de donnée permettant un géocodage.

Changements

Pré-requis

Software

Une distribution standard Debian/Ubuntu devrait fournir tout ces paquetages.

Ubuntu

 apt-get install php5-pgsql postgis postgresql php5 php-pear gcc proj libgeos-c1 postgresql-contrib postgresql-8.4-postgis postgresql-server-dev-8.4
 pear install DB

PostgreSQL and PostGIS Version

Soyez conscient que différents problèmes ont été découverts en faisant tourner Nominatim avec PostgreSQL 8.4. A savoir que la version 8.4 a aussi ralenti l'indexation en masse (!). Il est actuellement recommandé d'utiliser PostgreSQL 8.3. Les premiers tests indiquent que la version 9.0 fonctionne correctement.

De surcroît, Nominatim utilise beaucoup la fonction ST_CONTAINS de PostGIS qui semble plus lente sur ses versions antérieure à la 1.5. Ainsi, il serait de bonne augure, si vous avez cette possibilité, d'utiliser une version ultérieure ou égale à la 1.5. Certaines des releases de la version 1.3 ont aussi des problèmes de stabilité.

Hardware

Pour installer les données de l'ensemble de la planète, vous aurez besoin d'un minimum de 300GB d'espace disque. Sur le serveur OSM Nominatim (http://wiki.openstreetmap.org/wiki/Servers/katie) l'import initial (osm2pgsql) dure environ 30 heures, et le reste du processus d'indexation dure environ 10 jours en utilisant deux processeurs parallèlement.

Sur une machine dotée de 16 coeurs et 48 GB de mémoire avec des disques rapides, l'import initial dure environ 4 heures et le reste du processus d'indexation dure toujours environ une semaine.

First Installation

NB : Vous pourrez être amené à rencontrer le nom "gazetteer" ou "gazetteerworld" comme nom de base de donnée, et le nom d'utilisateur "twain" en dur dans certains fichiers. Si vous utilisez des noms différents, prenez garde à modifier ces termes (la commande grep pouvant alors être utile).

Make the database

 createdb gazetteer
 createlang plpgsql gazetteer
 cat /usr/share/postgresql/8.3/contrib/_int.sql | psql gazetteer

(Les répertoires d'installation /contrib et /postgis peuvent être différent selon la configuration de votre machine).

 cat /usr/share/postgresql/8.3/contrib/pg_trgm.sql | psql gazetteer
 cat /usr/share/postgresql-8.3-postgis/lwpostgis.sql | psql gazetteer

(lwpostgis.sql est remplacé par postgis.sql dans les nouvelles versions de postgis)

 cat /usr/share/postgresql-8.3-postgis/spatial_ref_sys.sql | psql gazetteer

Full script for Ubuntu 11.04:

 cat /usr/share/postgresql/8.4/contrib/_int.sql | psql gazetteer
 cat /usr/share/postgresql/8.4/contrib/pg_trgm.sql | psql gazetteer
 cat /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql | psql gazetteer
 cat /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql | psql gazetteer


Vous pourriez avoir envie de modifier la configuration de PostgreSQL pour une meilleure utilisation de votre configuration matérielle pour les dernières étapes d'installation :

  • Vérifiez les paramètres shared_buffers, maintenance_work_mem, et work_mem et augmentez leurs valeurs par défaut (par exemple 4G/1G/1G?)
  • définissez random_page_cost à 1.5 (plus petit que la valeur par défaut qui est 4).
  • pour l'import initial, désactivez autovacuum=off et fsync=off; ne pas oublier de les restaurer à "on" plus tard.

Import OSM data

Tout d'abord, téléchargez un [Planet File].

Compilez osm2pgsql (depuis http://svn.openstreetmap.org/applications/utils/export/osm2pgsql à moins que vous n'ayez déjà un paquetage à disposition) :

 cd osm2pgsql
 make

Chargez le fichier planétaire. La base de donnée créé à ce niveau n'est pas compatible avec celle que vous pourriez utiliser pour un rendu, créée sans l'option -O gazetteer :

 ./osm2pgsql -lsc -O gazetteer -C 2000 -d gazetteer planet.osm.bz2

Vérifiez que vous utilisez bien l'option -l (--latlon) et -s (--slim); Ils sont nécessaires. -C est la taille du cache en MB. Si vous disposez de suffisamment de mémoire, définissez -C à 8 fois le plut haut id de noeud OSM divisé par 1 million (au moment où ce texte -original- est rédigé, -C 8000 est le paramétrage vous assurant de la meilleure performance). Utiliser une valeur plus élevée n'améliorera pas vos performances. Si vous ne disposez pas d'autant de mémoire, utilisez tout ce que vous pouvez.

Vous n'avez pas besoin de décompresser le fichier planétaire, osm2pgsql prend à sa charge le format bzip.

Ne faîtes pas attention aux messages d'avertissement traitant de fonctions manquantes ou de types de données.

Si vous obtenez une erreur d'initialisation de projection, c'est que votre installation de proj n'a pas été trouvée à l'emplacement attendu. Copiez le répertoire de proj dans /usr/share pour corriger ce problème (NDR: ou effectuer un lien symbolique?).

Construction du module de transformation

Jusqu'à osm2pgsql 0.69

NB: des versions aussi anciennes sont susceptibles de produire une erreur relation "placex" does not exist durant la phase de transformation osm2pgsql. Le conseil donné par advice (archives OSM) est d'utiliser la dernière version disponible sur svn.

 cd gazetteer
 make

Mettez à jour gazetteer-functions.sql pour spécifier le chemin absolu vers le module, en remplaçant /home/twain/osm2pgsql/gazetteer/gazetteer.so.

osm2pgsql 0.70.x et au delà

Avec les modifications apportées par autotools dans osm2pgsql 0.70.x, la librairie gazetteer.so est construite dans sourcedir/gazetteer/.libs/gazetteer.so dans le sous-répertoire caché .libs, et installé dans $prefix/lib/osm2pgsql/gazetteer.so (avec /usr/local comme valeur par défaut de $prefix).

Jusqu'à la version 0.70.5 il était toujours nécessaire de modifier le chemin vers gazetteer.so dans gazetteer-functions.sql manuellement. A partir de la version 0.70.6 make prend en compte la définition du chemin d'installation spécifié dans gazetteer-functions.sql.

Diverses données complémentaires, utilisées pour patcher les manques dans les données OSM

 cd gazetteer
 cat import_country_osm_grid.sql | psql gazetteer
 cat import_worldboundaries.sql | psql gazetteer
 cat import_country_name.sql | psql gazetteer
 cat import_gb_postcode.sql | psql gazetteer
 cat import_gb_postcodearea.sql | psql gazetteer
 cat import_us_state.sql | psql gazetteer
 cat import_us_statecounty.sql | psql gazetteer

Création du site utilisateur

Créer un site utilisateur, www-data dans l'exemple qui suit

 createuser -SDR www-data

Ajout des fonctions gazetteer dans la base de donnée

 cat gazetteer-functions.sql | psql gazetteer

Si vous obtenez une erreur ERROR: type "planet_osm_ways" does not exist, cela signifie que vous essayez de lancer le script sur une base "non-slim" qui n'est pas supportée; Vous avez sans doute ommis de spécifier -s lors du premier import.

Ne faîtes pas attention aux erreurs concernant place_boundingbox qui n'apparaissent pas au premier lancement !

 cat gazetteer-tables.sql | psql gazetteer

Si vous obtenez une erreur ERROR: operator class “gin_trgm_ops” does not exist for access method “gin”, c'est que vous avez oublier de charger le module pg_trm.sql comme indiqué plus haut. Il est possible de ne le recharger que maintenant, et de ne recommencer que les étapes concernant les tables gazetteer.

 cat gazetteer-functions.sql | psql gazetteer

Il est nécessaire de lancer gazetteer-functions.sql une deuxième fois!

Copie des données dans les tables actives

La commande qui suit effectue une première étape d'indexation avec différents triggers et peut prendre un certain temps (pour la planête entière, comptez entre 10 et 3à heures selon votre configuration):

 cat gazetteer-loaddata.sql | psql gazetteer

Si vous vous demandez où en est l'avancement de l'indexation, exécutez la commande select pg_size_pretty(pg_relation_size('placex')); puis la même avec place à la place de <placex>. Lorsque le chargement est terminé, placex sera égal à +/- 25% de la taille de place.

Il est recommandé de lancer la commande PostgreSQL analyze une fois le chargement des données terminé.

Index the database

Cette étape peut nécessiter une durée très longue - jusqu'à 10 jours sur la planète entière sur une petite machine.

Pour de petits imports (un pays entier) vous pouvez utiliser:

 cat gazetteer-index.sql | psql gazetteer

Pour des imports plus conséquents, vous nécessiterez d'utiliser:

 ./util.update.php --index

Veillez à bien modifier la chaîne de connexion à la base dans le script PHP.

Si vous avez une machine multiprocesseur, vous pouvez en tirer partie avec le mode multithread ainsi:

 ./util.update.php --index --index-instances 8 --max-load 10 --max-blocking 10

Cela permettra la création de 8 threads, et ne les mettra en pause que si le chargement dépasse les 10 où si 10 processus sont bloqués d'après /proc/stat.

A titre de vérification après l'indexation, si vous exécutez la commande select count(*) from search_name vous devriez obtenir quelque cose comme 20 millions.

Quelques mots 'spéciaux' pour la recherche

Une description détaillée en est donné dans le fichier lui-même.

 cat import_specialwords.sql | psql gazetteer

Paramétrage des permissions

Assurez-vous que toutes les permissions sur la table sont attribuée à l'utilisateur www-data.

 for tbl in `psql -qAt -c "select tablename from pg_tables where schemaname = 'public';" gazetteer` ; do psql -c "alter table $tbl owner to \"www-data\"" gazetteer; done

Définissez le site web

 cp website/* ~/public_html/

Vous devez vous assurer que website/.htlib/settings.php est configuré avec des valeurs correctes.

 nano ~/public_html/.htlib/settings.php

Modifiez CONST_Website_BaseURL et CONST_Database_DSN selon les paramètres de votre installation.

Mise à jour

Si vous devez effectuer des mises à jour régulières, vous pouvez au choix utiliser Osmosis pour télécharger des différentiels ou programmer le chargement du script util.update.php pour charger des différentiels journaliers ou toutes les heures.

Différentiels journalier ou chaque heure

Mettez à jour la table 'import_status' pour indiquer la date de votre fichier planétaire (il vous est possible d'avoir un jour de décalage pour ne pas perdre de données).

Modifiezutil.update.php pour remplacer /home/twain par le chemin où vous souhaitez stocker vos données, et lancez:

 ./util.update.php --import-daily --import-all --index

Osmosis

A documenter.