S'abonner au Flux RSS

mardi, mars 11 2014

Debian, PG9.3, Osmosis et Nominatim

Même en se basant sur des références en terme de stabilité il peut arriver que certains combos soient fatals à votre production. C'est ce qui m'est arrivé récemment pour un serveur Nominatim installé pourtant sur une Debian Wheezy, osmosis est utilisé pour la mise à jour continue de la base Nominatim et m'a fait des misères que je m'en vais vous conter.

Lire la suite...

samedi, novembre 30 2013

Utiliser GraphHopper avec Jetty8 sous Debian

Actuellement la seule solution documentée pour utiliser GraphHopper est l'utilisation de jetty runner, celle-ci n'est pas satisfaisante dans un mode de production, elle requiert de mettre en place des scripts de lancement. Il est plus simple d'administrer un service de routing en utilisant par exemple jetty ou Tomcat, ce billet va se concentrer sur la configuration de jetty sous Debian Jessie.

Tout d'abord installer le serveur jetty

apt-get install jetty8

Puis on récupère l'archive .war que l'on copie dans le répertoire de webapp de jetty

cd /var/lib/jetty8/webapps
wget http://oss.sonatype.org/content/groups/public/com/graphhopper/graphhopper-web/0.2/graphhopper-web-0.2.war

Toujours dans le répertoire webapps on va renommer le fichier war de GraphHopper afin que le déploiement se fasse dans le contexte racine, de même que l'on va supprimer le répertoire existant nommé root. La raison de cette opération peu orthodoxe est que par défaut GraphHopper répond aux requêtes d'api sur l'url /api/ et qu'il n'est pas actuellement possible de paramétrer cela simplement. La seule méthode de contournement est d'indiquer un paramètre host dans l'url ce qui n'est pas des plus ergonomique.

mv graphhopper-web-0.2.war ROOT.war
rm -fr root/ 

On va déployer les fichiers de configuration et de données dans /home/routing, il faut créer ce répertoire, dans lequel on en crée de suite un autre nommé data qui contiendra les données précompilées par GraphHopper

mkdir /home/routing
mkdir /home/routing/data/

On crée un fichier de configuration dans le dossier en utilisant l'exemple fournit sur le site du projet, fichier que l'on renomme dans la foulée.

wget https://raw.github.com/graphhopper/graphhopper/master/config-example.properties
mv config-example.properties config.properties

Maintenant on va récupérer le fichier qui servira de source de données, on télécharge directement un fichier protobuff depuis le site de Geofabrik, par exemple le fichier de données de la région Nord-Pas de Calais :

wget http://download.geofabrik.de/europe/france/nord-pas-de-calais-latest.osm.pbf

On édite le fichier de configuration pour qu'il corresponde à notre utilisation en ajoutant deux paramètres à la fin de celui-ci. Le premier qui correspond au fichier protobuff utilisé et le second qui indique où GraphHopper doit créer ses fichiers de données.

# data source
osmreader.osm=/home/routing/nord-pas-de-calais-latest.osm.pbf
# repertoire de données
graph.location=/home/routing/data/

Au lancement de jetty GraphHopper va pré-traiter les données du fichier .pbf afin de préparer ses tables de recherches qu'il stockera dans le répertoire /home/routing/data/ Si vous voulez mettre les données à jour il suffit télécharger un nouveau fichier de données et de relancer jetty, le fichier de données étant plus récent GrapHopper relancera une analyse.

Le serveur jetty tournant sous Debian avec l'utilisateur jetty il faut définir les bons attibuts de propriété aux répertoires ainsi qu'à tous les fichiers présents dans celui-ci.

chown -R jetty.jetty /home/routing

Dernière modification, éditer le fichier /etc/default/jetty8 pour paramétrer le démarrage automatique et indiquer le fichier de configuration de GraphHopper

# change to 0 to allow Jetty to start
NO_START=0

# Additional arguments to pass to Jetty    
JETTY_ARGS=-Dgraphhopper.config=/home/routing/config.properties

Par défaut comme souvent sur Debian le démon va écouter seulement sur le localhost, à vous de régler le paramètre JETTY_HOST suivant vos besoins.

Il ne reste plus qu'à lancer jetty avec le script d'init avec l'utilisateur privilégié root

invoke-rc.d jetty8 restart

A ce stade GraphHopper est prêt à répondre sur le port 8989 de votre machine et à vous indiquer la route !

dimanche, octobre 13 2013

Logitech R400 et Debian

J'ai fait l'acquisition d'une télécommande Logitech R400 pour gagner un peu de liberté lors de mes présentations et m'éloigner de ma barre espace. Quelle n'a pas été ma déception quand une fois branchée celle-ci ne fonctionnait pas sous ma Debian Wheezy, bien que je n'ai point analysé ceci lors de mes recherches antérieures à l'achat .

Pour être exact elle dysfontionnait, il fallait en effet par moment appuyer rapidement 4 à 5 fois de suite pour change de slides, après tests sur d'autres machines je n'ai pas réussit à reproduire le problème. Des essais de remapping n'ont rien donné et le phénomène se vérifiait avec xev et quelques soit le logiciel utilisé.

Après moults jurons et une bonne nuit de sommeil la solution fut trouvée, en effet un passage du paquet linux-image-3.2.0-2-amd64 en linux-image-3.2.0-4-amd64 a solutionné mon problème. Je n'ai pas été cherché le détails dans les changelog, mais si vous rencontrez le même problème pensez à upgradez votre paquet kernel.

mercredi, février 6 2013

PyDeb from PyPI to .deb

Dans mon précédent billet j'évoquais les paquets debian que j'avais réalisé pour Django au sein du projet Pyrede. Cette activité de packaging ayant pris de l'ampleur les paquets seront désormais disponibles au sein du Projet Pydeb.

Le projet PyDEB se compose d'un dépôt de paquets et d'un blog sur lequel je publie les nouveaux paquets ainsi que leurs mises à jour.

Les derniers paquets réalisés sont redis, hamlpy, vectorformats, ...

Le projet Pyrede d'analyse de fichier requirements.txt continue son activité avec PyDEB comme ressource bien évidemment.

mardi, janvier 29 2013

Paquets Debian pour Django

Si j'aime les virtualenv quand je code je reste attachés aux paquets pour le déploiement et j'essaye tant que faire se peut de résister aux 'pip install -r requirements.txt' sur mes machines de production. C'est dans ce contexte que j'ai packagé quelques paquets relatifs à Django que je vais essayer de maintenir au sein du projet Pyrede.

http://pyrede.quiedeville.org/debian/

Le fichier repo.key contient la signature utilisée pour signer les paquets.

jeudi, décembre 20 2012

De whoosh à Solr avec Django Haystack

Sur un déploiement Django avec une indexation réalisée avec Haystack je me suis retrouvé face à un problème bloquant. L'application doit permettre à différents users unix de la machine d'insérer des données au moyen d'une commande de management de Django ; les objets insérés dans la base de données sont indéxés en temps réels avec un RealTimeSearchIndex. Le peu de volume de données avait orienté le choix du backend d'indexation vers whoosh, whoosh travaillant avec des fichiers locaux l'appel de la commande manage par différents users unix a engendré des problèmes de permissions sur les fichiers d'index. Une première solution de contournement a été d'utiliser la commande sudo mais cela n'est pas satisfaisant sur le long terme sans une formation des utilisateurs à sudo, pour contourner ce problème je me suis orienté vers l'utilisation d'un backend Solr. Je vais décrire ici la mise en oeuvre de cette solution sur une Debian Wheezy car cela ne s'est pas fait sans problèmes.

Installation de Solr

Le choix fait a été d'utiliser Solr avec le server d'application Jetty, l'installation sous Debian est toujours aussi simple qu'apt-get dans notre cas de figure ici il est nécessaire d'installer les paquets

  • jetty
  • solr-jetty

Le serveur d'indexation étant sur une machine séparée de l'instance Django il faut également installer le package python-pysolr sur le serveur qui fait tourner l'application Django elle même.

Il existe un bug dans le paquet solr-jetty, l'installation créé un lien symbolique cassé.

/var/lib/jetty/webapps/solr doit pointer vers /usr/share/solr/web et non vers /usr/share/solr/webapp comme le fait l'installation du package

Schema généré non conforme

Une fois le serveur installé il faut configurer Solr en conformité avec les données de l'application Django, pour cela on génère un fichier nommé schema.xml avec la commande :

manage.py build_solr_schema > schema.xml

Une fois ce fichier généré copiez le sur le serveur Solr dans /etc/solr/conf/schema.xml

J'utilise une version 2.0.0 de Haystack et il est nécessaire de modifier quelque peu le fichier généré pour le rendre compatible avec Solr 3.6.0 présent à l'heure d'écriture de ce billet dans Wheezy.

Tout d'abord il faut remplacer la chaine stopwords_en.txt par lang/stopwords_en.txt pour spécifier le bon chemin vers le fichier. (ref)

Un autre problème rencontré qui peut ne pas être votre cas,mais autant le signaler au cas où, lors du premier appel de la commande ./manage.py build_solr_schema le fichier schema.xml généré contenait des définitions de champs erronés :

<field name="" type="" indexed="True" stored="True" multiValued="" />

<field name="" type="" indexed="True" stored="True" multiValued="" />

Un nouvel appel à build_solr_schema a cette fois généré un fichier valide, une fois copié sur le serveur solr l'indexation fonctionne, et on peut désormais mettre à jour l'index avec manage.py rebuild_index de même que celui-ci se met à jour lors de l'import des objets dans la base.

Suivant votre configuration réseau vous pourrez vouloir changer le port ou l'interface d'écoute, cela s'effectue dans le fichier /etc/default/jetty ; il ne reste plus enfin qu'à redémarrer jetty.

Ce ne fût pas sans peine, mais au final l'indexation fonctionne et désormais tous les utilisateurs peuvent indexer leurs documents sans problèmes de permissions.

vendredi, novembre 30 2012

Penser à xauth

Devant installer un outil dont je tairais la nom sur un serveur, outil qui ne se configure qu'avec un client X (ça commence mal) j'ai bloqué sur le X forwarding pendant une demi-journée. Après avoir fait un connexion ssh -X vers le dit serveur impossible de récupérer l'affichage sur ma machine. Un ssh -v m'a mis la puce à l'oreille avec comme dernière ligne :

debug1: Remote: No xauth program; cannot forward with spoofing.

Sans xauth effectivement difficile de reporter l'affichage au travers de la session ssh, la solution simpliste au possible consiste à installer le paquet xauth sur Debian.

apt-get install xauth

Espérons que la prochaine fois j'y penserai plus tôt.

mercredi, octobre 31 2012

Monitorer les mises à jour de sécurité Debian

Jusqu'à peu j'utilisais des scripts maison pour suivre les mises à jour de sécurité à faire sur les serveurs Debian que j'administre, scripts shell qui à grand coup de sed, grep, gawk sur les sorties de apt-get update / upgrade permet de connaître les mises à jour à faire. Une fois de plus Debian à des outils internes pour faire cela beaucoup mieux. Utilisant aussi Debian sur mon desktop je me suis penché sur la méthode mise en oeuvre qui permet à mon gestionnaire de bureau de signaler dans une popup les màj à faire après chaque action apt, je suis tombé sur le paquet update-notifier-common qui contient tout ce qu'il faut pour refactoriser mes sondes Nagios.

La commande apt-chek (qui est un script python) permet de savoir tout de go si il existe des mises à jour à faire :

rodo@arz: $ /usr/lib/update-notifier/apt-check
110;57

donne une sortie facilement scriptable qui indique ici qu'il y a 110 mises à jour disponibles dont 57 mises à jour de sécurité (tests effectués sur mon desktop, n'ayez craintes)

rodo@arz: $ /usr/lib/update-notifier/apt-check --human-readable
110 packages can be updated.
57 updates are security updates.

donne une sortie plus compatible avec le genre humain.

Enfin l'option -p elle va afficher la liste des noms de paquets à mettre à jour. Pour parfaire le script on souhaiterait avoir une option qui permette de n'afficher que les noms de paquets issus de security à mettre à jour, gageons que cela soit dans une future release.

Il ne reste plus qu'à utiliser cette commande dans une sonde nagios telle que celle décrite dans ce billet

Pour conclure il me reste à dire que apt-check se base sur la librairire python apt_pkg disponible dans python-apt que je vous invite à découvrir si vous souhaitez manipuler les commandes apt à partir de python.

MàJ : après ma réflexion sur une option supplémentaire j'ai envoyé un patch au mainteneur du paquet

lundi, octobre 29 2012

Nagios et les MIBS perdues dans Debian

Il faut désormais activer non-free dans Debian pour pouvoir utiliser les MIBS snmp ( voir http://wiki.debian.org/SNMP), action qui n'est pas réalisable dans de nombreuses architectures. Sans les MIBS utiliser SNMP devient vite une gageure, devoir déclarer les commandes Nagios en se basant sur les OID des directives extend est fastidieux et difficilement maintenable dans le temps. Afin de simplifier cette utilisation j'ai écrit un script pour simplifier la déclaration dans Nagios en se passant des MIBS.

mibchecks génère les définitions Nagios en analysant le fichier de configuration du démon snmp, il est disponible sur gitorious pour download et/ou fork.

Repo : https://gitorious.org/mibchecks/mibchecks

mibchecks lit le fichier /etc/snmp/snmpd.conf, en extrait les définitions extend, convertit les noms de commandes en OID et écrit sur la sortie standard les définitions de command à inclure dans la configuration de nagios. Un exemple de sortie.

Le script est actuellement en version 1.0.2 et attend vos patch et/ou amélioration.

mercredi, juin 13 2012

Backport python-dbf pour squeeze

Il existe peu de librairie pour manipuler le format DBase dans le monde du libre. Peu utilisé pour les usages standards des base de données, au regard d'outil comme Postgresql ou Sqlite, le format DBase reste néanmoins incontournable dans l'univers du SIG. Utilisé comme format de stockage des données attributaires pour les fichiers Shapefile il est encore manipulé tous les jours par les géomaticiens. Il existe néanmoins une librairie python nommée python-dbf mais uniquement dans Wheezy, j'ai retroporté celle-ci vers squeeze.

  • python-dbf 0.88.16-1~bpo60+1
  • python-dbf-doc 0.88.16-1~bpo60+1

Adresse du dépôt : dépôt personnel.

- page 1 de 3