Archives de catégorie : 5. Projets

Open Street Map

Finix
le 7 décembre 2007

Présentation de OpenStreetMap par Ludovic

Le projet open street map est un projet de cartographie libre, au sens de l’open source (la copie des cartes IGN est interdite). Certaines cartes contiennent des « easter eggs », des erreurs volontaires pour repérer les copies.
Les raisons pour participer à la fabrication d’une cartographie libre :
-les cartes changent peu
-les GPS se démocratise
-la mise à jour est rapide
Il ne faut pas confondre libre et gratuit. Google map est gratuit mais n’est pas libre, on ne peut pas le modifier, sauf à avoir accès par un compte Gmail qui est facile à désactiver.

Actuellement, deux compagnies privées se partagent le marché mondial de la cartographie : Navteq et Teleatlas. TomTom veut racheter l’une des compagnies.
Le GPS explose. D’où des projets libres :
Openstreetmap
un point c’est tout
-et d’autres…

Comment participer à OSM?

La cartographie a besoin de sources qui vont servir à tracer les cartes en requérant du temps de calcul pour pourvoir les utiliser.

Sources

Les GPS peuvent être utilisés pour relever les traces.
On trouve
-des GPS USB non autonomes, à brancher sur un ordinateur, aux environs de 30 €, idem avec liaison bluetooth ou série
-des loggers, autonomes récupèrent les points, à rentrer ultérieurement dans un ordinateur, aux environs de 60 €
-des GPS type Carmin aux environs de 150 €
-certains GPS de voiture enregistrent les points

Certains organismes participent.
On peut faire des observations directes : nom de rue, présence de stop, d’une boite aux lettres.
Imagerie aériennes. OSM a eu un accord avec Yahoo pour utiliser les images aériennes.

Tracé de la carte

Les traces apparaissent dans différents formats : GPX (OSM et beaucoup d’autres), KML (google), NMEA (marine). Il existe des logiciels qui font les conversions de format tel que GPS Babel (logiciel libre).
L’exploitation se fait à l’aide de logiciels à installer comme JOSM, ou des applications flash comme Potlach, ou autres. JOSM fait l’agrégation de la carte, de la trace GPS, des photos aériennes.

Calcul de la carte

Une fois réalisé les modifications, on envoie la carte à OSM. OSM recalcule la carte.
On peut participer au calcul en installant chez soi un petit programme qui s’appelle TilesAtHome. Le programme tourne en arrière-plan en priorité basse et ne gène pas l’utilisation de l’ordinateur.
OSM récupère les routes et les transforme en images.

Utilisation

On peut utiliser OSM en se rendant sur le site

Le site fournit une carte OSM plus régulièrement mise à jour.
Les données peuvent être téléchargées.
Parmi les logiciels qui utilisent ces informations, on trouve :
-road map
-navit
-GPS drive
-pyroute
-road nav
-yamap

Utilisation de JOSM

JOSM: editor OpenStreetMap

Installation de JOSM
– install Java (JRE 1.5 minimum)

  • ubuntu: sudo aptitude install sun-java6-jdk
  • debian: apt-get install sun-java6-jdk

– télécharger JOSM

  • http://josm.openstreetmap.de/download/josm-latest.jar

– démarrage

  • java -jar josm.jar

– installation de plugins

  • menu edit/preference: click sur la prise de courant (plugins)
  • cliquer sur « download list »
  • sélectionner:
    • wms plugins
    • yahoo wms
  • cliquer sur OK, puis oui
  • redémarrer JOSM, pour quitter, menu « File/exit »
  • voir section « démarrage » ci-dessus

– Configuration Plugin

  • menu edit/preference: click sur Yahoo WMS Server
  • remplir « firefox profile » avec « osmconfig » par exemple
  • cliquer sur « create »
  • firefox se lance sur un nouveau profile (pour ne pas écraser le profile de l’utilisateur courant).
  • dans la page web qui s’affiche, cliquer sur « make changes » pour autoriser la methode javascript dump et le recouvrement de session.
  • cliquer sur « autoriser » et ensuite fermer ce profile firefox.
  • dans la fenêtre preference, cliquer sur Ok
  • dans le menu WMS, il y aura maintenant un item « Yahoo »
  • cliquer dessus pour ajouter Yahoo dans les layers quand vous aurez choisi votre zone (voir ci-dessous).

– Sélectionner une zone à cartographier

  • choisir une zone sur http://www.openstreetmap.org/ en zoomant
  • cliquer sur « permalink » en bas a droite
  • copier l’url ainsi obtenu
  • démarrer JOSM
  • cliquer sur le lien « Download some data »
  • coller l’URL dans « Bounding Box »/URL from openstreet map »
  • cliquer sur OK
  • utiliser le zoom pour cadrer la portion à cartographier

– Editer des points

  • avec ou sans la carte yahoo cliquer sur « Draw nodes A » dans la barre d’outil a gauche
  • tracer les points sur la carte
  • déplacer les points en cliquant sur « Select, Move and rotate Object »
  • effacer les points en cliquant d’abord sur « Delete nodes » et ensuite selectionner les points a effacer.
  • utiliser menu Presets pour choisir une proprietes pour les points qui sont traces (routes, parking …)

– Sauver les points

  • menu save

Ne perdez plus konsole !

Obligé de faire une réinstallation complète de mon ordinateur (Mandriva sous-version 2006 en 2 Go), pas moyen de l’obliger à garder une console à l’écran. A chaque démarrage, il faut cliquer sur l’icône et repositionner cette console.

Tout ce qui est inutilement répétitif est haïssable, surtout quand on est informaticien (la solution existe déjà, sinon vous la programmez !)

Plusieurs incidents de ce type ne m’avaient pas permis dans le passé d’en trouver soit la cause soit la solution.

Cette fois-ci, et avec l’expérience acquise et avec des recherches assez longues, je crois avoir enfin identifié une solution, que je vous propose ci-dessous. Attention, elle est probablement quelque peu dépendante de la distribution !

Des collègues m’avaient déjà signalé que le lieu du délit se situait dans :
~/.kde/share/config/session

Mais le renseignement était insuffisant… Car après la toute récente réinstallation, il n’y a rien dans ce répertoire !

Heureusement, j’ai un autre ordinateur, qui garde la console d’une fois sur l’autre (pour le moment!) Mais il a été installé avec la version Mandriva 2005 en 4 Go (octobre 2005)…

Le répertoire ci-dessus indiqué contient deux fichiers :
– kwin
– konsole

En réalité, leur nom est suivi d’un nombre d’environ 38 chiffres hexadécimaux…
Ces deux nombres se retrouvent dans ksmserverrc, situé dans le répertoire au-dessus :
(~/.kde/share/config).

Après transfert d’un ordinateur à l’autre de ces trois fichiers aux bons endroits, et après plusieurs redémarrage,’konsole’ condescend enfin à bien rester présente à l’écran, et au bon endroit. Ouf !

NB : ces trois fichiers forment un ensemble indissociable, à cause des fameux nombres de 38 chiffres, sinon ça ne marche pas !

Voici le contenu de ces fichiers :

1) ~/.kde/share/config/ksmserverrc : (complet)
_ [$Version]
_ update_info=ksmserver.upd:kde3

_ [General]
_ screenCount=1

_ [LegacySession: saved at previous logout]
_ count=0

_ [Session: saved at previous logout]
_ clientId1=1013ad0d4db000113111176100000065400008 (nombre a)
_ clientId2=1013ad0d4db000113092683800000062930008 (nombre b)
_ clientId3=1013ad0d4db000113085722000000067400007
count=3
_ discardCommand1=rm,$HOME/.kde/share/config/session/kwin_1013ad0d4db000113111176100000065400008_1140355101_666346
_ discardCommand2=rm,$HOME/.kde/share/config/session/konsole_1013ad0d4db000113092683800000062930008_1140355101_608035
_ discardCommand3=
_ program1=kwin
_ program2=konsole
_ program3=krandrtray
_ restartCommand1=kwin,-session,1013ad0d4db000113111176100000065400008_1140355101_666346
_ restartCommand2=konsole,-session,1013ad0d4db000113092683800000062930008_1140355101_608035
_ restartCommand3=krandrtray,-session,1013ad0d4db000113085722000000067400007_1140355101_609339
_ restartStyleHint1=0
_ restartStyleHint2=0
_ restartStyleHint3=0
_ userId1=mikhail (c’est le nom de l’utilisateur : /home/mikhail)
_ userId2=mikhail
_ userId3=mikhail

‘nombre a’ et ‘nombre b’ sont les parties à bien noter. L’important semble être surtout la première partie des trois groupes de chiffres.
Comme on peut voir, il y a aussi un ‘nombre c’ sur la ligne « restartCommand3 », mais qui ne joue aucun rôle dans mon problème.

2) konsole_1013ad0d4db000113092683800000062930008_1140355101_608035
_ Seul le nom de ce fichier semble avoir de l’importance, pas son contenu (pour le problème en cours)

3) kwin_1013ad0d4db000113111176100000065400008_1140355101_666346

La partie importante de ce fichier semble être la ligne sessionId2. Voici quelques lignes qui encadrent cela :

_ restore1=0,753,1280,47
_ restore2=0,0,0,0
_ sessionId1=1013ad0d4db000114035408900000065790002
_ sessionId2=1013ad0d4db000113092683800000062930008
_ shaded1=false
_ shaded2=false
_ shortcut1=
_ shortcut2=

Le nombre qui suit ‘sessionId1’ ne se retouve pas ailleurs. Qui sait à quoi cela sert ???

Je souhaite que ce renseignement, que je n’ai pu trouver sur Internet (www.google.fr/linux), pourra être utile à d’autres ‘Mandriviens’.

mikhail

Le pendu

Le pendu est un logiciel créé en Java.

Il fonctionne aussi bien sous windows que sous linux.

plusieurs thèmes :
– Culture général
– Personnages de Tintin

Compiler des sources

Compiler des sources
——————–

Installer les outils pour compiler (debian)
– binutil
– gcc
– make
– verifier que les includes (fichier.h dans /usr/include) sont presents

Tester les outils de compil
taper en mode console:
=> gcc
si le compilateur gcc est present il y a une erreur du style: « no input file » autrement erreur: « command not found »

Compiler les sources
——————–
– recuperer les sources d’une application (par exemple: www.squeak.org)

– installer les sources
gzip: si le fichier de sources est un tar.gz => tar xzvf fichier.tar.gz
bunzip: si le fichier de sources est un tar.bz2 => tar xjvf fichier.tar.bz2

– premiere chose a faire, lire les fichiers README et/ou INSTALL qui indiqueront la facon de compiler et d’installer les sources (quelque fois ca varie un peu en fonction des sources, comme c’est le cas pour squeak)

– preparer la compilation des sources
taper: ./configure a la racine des sources
(pour squeak, le README nous indique une ligne de commande differente, mais le resultat est identique)

Que fait Configure ? :
———————-
– Teste les caractéristiques du système local
– Produit un header optionnel ‘config.h’ (par défaut)
– Construit le ou les Makefile(s)
– Produit les fichiers de contrôle ‘config.status config.log’
S’il manque des librairies ou des outils de compilation sur le systeme, Configure finira par une erreur.

– compiler les sources
taper: make

Make prend en entree le fichier Makefile qui a ete
genere par configure, il utilise comme point d’entree dans ce fichier, le label (« target »): ‘all:’ qui est suivi des targets a executer. Ensuite chaque target contient des instructions (gcc …) a realiser pour compiler les sources.

Si les outils de compilation ont trouve un erreur, make ne terminera par la compilation et il faudra la corriger et recommencer.
(comme pour squeak, ou il manquait les libX11-dev sur une des machines).

En cas d’echec lors de la compilation, il faut nettoyer les fichiers makefile ayant ete crees automatiquement lors de la compilation avant de recommencer une nouvelle compilation.

Cela se fait grace à la commande:
make clean

– installation
une fois le programme compile, il est opportun de le placer dans un repertoire ou l’ensemble des utilisateurs du systeme pourront le trouver pour l’utiliser
(/usr/local/bin …).

Pour cela, passer en mode administrateur (root) et taper:
make install

La target « install » s’occupe de l’installation de l’application, aussi bien les binaires que la doc, les librairies necessaires et compilees pour cette application.

– tester le binaire
Il est possible de tester le binaire avant son installation (apres le make).

Dans le cas de squeak, il est important de telecharger en plus l’image (le systeme squeak qui contient les outils, l’environnement graphique … de squeak), le programme squeak (le binaire compile ci-dessus) n’etant qu’une machine virtuelle qui va executer le code machine squeak qui se trouve dans l’image a telecharger.

– fin

Paquetage Debian

Création d’un paquet Debian
—————————
Le système de gestion des paquets Debian est complexe et n’est pas forcément convivial pour les novices. Mais il a l’avantage d’être puissant.

Dans cet exercice, on va essayer de clarifier un peu le processus de création d’un paquet pour son installation sur un système de fichier, en partant du plus loin que l’on peut pour un paquet, à ses sources.

Choisir son source
——————
Pour commencer, il faut avoir des sources sous la main
pour construire un exécutable qui fonctionne.

Par exemple le source hello-1.0.tar.gz
que l’on avait presque reussi a fabriquer la derniere fois !!
que vous trouverez a l’adresse:
http://christian.jacolot.free.fr/Finix/Initiations/hello-1.0.tar.gz

Avant de créer le paquet
————————
Verifier que vous avez tous les outils pour creer le paquet debian:
– dh_make
– fakeroot
Sinon, il faut les installer avec « apt-get install ».

Placer le paquet source « hello » dézippé, détarré,
dans un répertoire « paquetdebian ».
– mkdir paquetdebian
– cp hello-1.0.tar.gz paquetdebian
– cd paquetdebian
– tar xzvf hello-1.0.tar.gz

Généralement on obtient:
paquetdebian/hello-1.0/

Glisse toi dans le répertoire:
– cd hello-1.0

Maintenant utilise la commande:
– dh_make -e adresse_email -f ../hello-1.0.tar.gz

Un menu s’affiche, pour l’instant choisir « s » comme « single »,
et normalement c’est tout, le programme s’occupe de tout.

Modifier quelques fichiers
————————–
Le programme précédent a crée un répertoire debian dans le répertoire hello-1.0 et a crée un fichier hello-1.0.orig.tar.gz dans le répertoire père de hello-1.0 (dans paquetdebian).

Ensuite, on peut eventuellement modifier quelques fichiers dans le répertoire debian:
– control: ajouter des commentaires
– copyright: placer un copyright
– changelog: avec le programme dch ajouter un petit commentaire
– rules: ne rien toucher là-dedans pour l’instant
Les autres fichiers ne sont pas utiles pour notre exemple et peuvent rester dans le répertoire.

Créer le paquet hello
———————
Dans le répertoire hello-1.0, taper la commande:
– dpgk-buildpackage -rfakeroot

Et magique, ca marche tout seul, on trouve dans le répertoire père de hello-1.0 les fichiers suivants (dans le repertoire paquetdebian):
– hello_1.0-1.diff.gz
– hello_1.0-1.dsc
– hello_1.0-1_i386.changes
– hello_1.0-1_i386.deb
– hello_1.0.orig.tar.gz

Ensuite …
On peut installer le paquet binaire hello_1.0-1_i386.deb sur son système:
– dpkg -i hello_1.0-1.i386.deb

Ceci était un petit exemple de manipulation de paquets et d’outils debian.

Paquetage GNU

* Fabriquer un paquetage pour les sources (the GNU build system).

– Installer les outils pour fabriquer un paquetage GNU (debian)
* autoscan
* automake
* autoconf

– Ecrire un programme C:
* mkdir finixware; cd finixware
* mkdir src; cd src
* vim finixware.c
#include

int main()
printf(« Hello the FinixWorldn »);
return 0;

– Compiler et tester le programme C:
* gcc -o finixware finixware.c

– Paquetage
* outil: autoscan
– permet d’aider a la creation d’un fichier configure.ac (les besoins du source: include, librairie …)
– tester la portablilite (entre systeme Unix) des methodes et des fonctions
– creer un fichier vide: configure.ac
=> cd finixware
=> touch configure.ac
=> autoscan
=> cp configure.scan configure.ac (copier le fichier)
– ajouter des elements dans configure.ac
=> AC_INIT(finixware, 1.0)
=> AM_INIT_AUTOMAKE
=> AC_CONFIG_FILES([Makefile])

* aclocal
– permet de creer les macros pour le deploiement futur sur une autre machine
– rendre independant de la pateforme l’utilisation des outils qui vont suivre
* creer squelette Makefile.am
– vim Makefile.am
bin_PROGRAMS = finixware
finixware_SOURCES = finixware.c
* autoheader
– creation du fichier config.h.in (qui va servir pour configure)
=> autoheader
* automake
– creer le fichier Makefile.in
– automake necessite les fichiers suivant:
# install-sh
# missing
# INSTALL
# NEWS
# README
# AUTHORS
# ChangeLog
# COPYING
# depcomp
– automake avec l’option « -a » permet de generer certain de ces fichiers:
# install-sh
# missing
# INSTALL
# COPYING
# depcomp
– les autres sont a creer (dans notre exemple, ils seront vides):
=> touch NEWS README AUTHORS ChangeLog
=> automake -a (qui va creer le fichier Makefile.in)

* autoconf
– permet de creer le fichier configure.in (qui va servir pour configure)
=> autoconf

* Tester le configure
– ./configure (pour voir si ca marche)

* Creer le paquetage
– fournir un fichier src.tar.gz (ou tar.bz2)
– fichier de type finixware-1.0.targ.gz (voir le fichier configure.ac pour les parametres)
– contenant les sources, les fichiers pour compiler.
=> make dist-gzip (ou dist-bzip2)
– on obtient le fichier suivant: finixware-1.0.tar.gz

* Tester le paquetage
– mkdir ../finixware-test
– cp finixware-1.0.tar.gz ../finixware-test/
– cd ../finixware-test/
– tar xzvf finixware-1.0.tar.gz
– cd finixware-1.0

– ./configure
– make
– make install
– which finixware (normalement celui qui se trouve dans /usr/local/bin)
– finixware (executer)
=> Hello the FinixWorld

et voila le resultat 🙂

– fin
– Annexe
– fichier configure.ac
______________________
#

    – Autoconf


      # Process this file with autoconf to produce a configure script.

      AC_PREREQ(2.59)
      AC_INIT(finixware, 1.0)
      AM_INIT_AUTOMAKE
      AC_CONFIG_SRCDIR([src/finixware.c])
      AC_CONFIG_HEADER([config.h])

      # Checks for programs.
      AC_PROG_CC

      # Checks for libraries.

      # Checks for header files.

      # Checks for typedefs, structures, and compiler characteristics.

      # Checks for library functions.
      AC_CONFIG_FILES([Makefile])
      AC_OUTPUT
      ______________________

      – fichier finixware.c
      ______________________
      #include

      int main()
      printf(« Hello the FinixWorldn »);
      return 0;

      ______________________

Suppression automatique de modules non utilisés avec un noyau 2.6.

Depuis la sortie du noyau 2.6, l’option autoclean de rmmod (rmmod -a) qui permettait de supprimer facilement de la mémoire les modules du noyau non utilisés n’est plus disponible.

Cet article donne une façon de rétablir une telle fonctionnalité.

Avertissement: Si cette possibilité a disparu du noyau 2.6, c’est pour une très bonne raison. La suppression de certains modules n’est pas conseillée et est susceptible de rendre un système instable, voire même de le planter. Même si cette fonctionnalité était disponible avec les noyaux 2.4.x, elle était tout aussi dangereuse.

Le contexte.

Il m’arrive de temps en temps de lire des disquettes ou des CD-ROM. Je trouve très dommage d’encombrer en permanence la mémoire de ma machine avec des drivers rarement utilisés, surtout quand la machine dispose de très peu de mémoire.

D’où l’idée de compiler en module les drivers du lecteur de disquettes, du lecteur de CDROM et les systèmes de fichier iso 9660, ext2 et fat et de les charger en mémoire seulement quand c’est nécessaire.

Le chargement automatique de ces modules lorsqu’on monte une disquette ou un CDROM n’a posé aucun problème, mais une fois qu’on en a fini avec eux, les modules restent en mémoire si on ne les supprime pas manuellement.

Une solution.

Tout d’abord, le noyau doit être compilé avec les options nécessaires:

– Le système de fichier /proc (CONFIG_PROC_FS).
– L’option permettant de supprimer des modules pour les noyaux 2.6 uniquement (CONFIG_MODULE_UNLOAD).
Par défaut, cette dernière option n’est pas compilée.

Pour détecter et décharger les modules inutiles, j’ai écrit un script bash (appelé autoclean). Il recherche dans /proc/modules les modules dont le compteur d’utilisation est à zéro puis les supprime avec rmmod.

Certains drivers ne mettent pas ce compteur à jour lorsqu’ils sont compilés sous forme de modules. C’est notamment le cas de certains drivers de souris ou de clavier (comment décider si le driver d’une souris est utilisé ?). De tels modules risquent donc d’être supprimés alors qu’ils sont utilisés et nécessaires à la bonne marche du système.

Afin d’éviter ce genre de problèmes, j’ai prévu d’utiliser un fichier de configuration (/usr/local/etc/autoclean.conf). Le script vérifie que les modules dont le compteur est à zéro ne sont pas présents dans ce fichier avant de les supprimer. Ce fichier, dont les lignes commençant par un # sont ignorées, n’a pas de format particulier.

Voici le source de ce script:


#!/bin/bash

EXCLUDE=/usr/local/etc/autoclean.conf

cat /proc/modules | egrep "[[:space:]]0[[:space:]]" |
while read MODULE NOT_USED; do
if ! (sed -e "/^#/d" $EXCLUDE | grep "<$MODULE>") &> /dev/null ; then
/sbin/rmmod $MODULE
fi
done

exit 0

Pour une suppression automatique des modules, il suffit d’ajouter un appel à ce script dans une cron table. Par exemple, dans ma cron table root, j’ai ajouté la directive suivante:


*/15 * * * * /usr/local/sbin/autoclean

Cette directive lance une recherche et une suppression des modules non utilisés toutes les 15 minutes.

Conclusion.

Cette méthode s’est montrée très fiable chez moi et m’a permis de réduire de façon substancielle l’empreinte mémoire de mon noyau sans sacrifier la moindre fonctionnalité.

Cependant, il faut rester très prudent avec la suppression des modules. Certains modules ne doivent pas être supprimés du tout et d’autres ne peuvent pas l’être par cette méthode car il n’y a aucun moyen fiable de savoir quand ils sont utilisés et quand ils ne le sont pas.

Miroirs proposés par Finix

Finix met à disposition de la communauté des miroirs de logiciels libres. Ces derniers sont accessibles aux URL suivantes en FTP et HTTP:
ftp://mirror1.finix.eu.org/
http://mirror1.finix.eu.org/

L’hébergement est mis à disposition gratuitement par OVH et le contact Finix est Ludovic ( ludovic.bellier AT finix.eu.org ).

Actuellement, sont disponibles en miroir:
BSDeviant : un live CD FreeBSD
Cygwin : un environnement GnuTools pour Windows
FreeBSD : un miroir partiel des ports FreeBSD release i386 5.2.1 (avenir incertain)
FreeSBIE : un live CD FreeBSD
Gentoo : un mirroir source pour la gentoo
GnuWin : des logiciels libres pour Windows
Kaella : un live CD Linux Knoppix francisé
Knoppix : un live CD Linux Knoopix/
Loliwin ; des logiciels libres pour Windows

Le miroir Gentoo est le plus important, il contient toutes les sources des logiciels qu’une Gentoo installe. Pour l’utiliser, modifier la variable GENTOO_MIRRORS de votre make.conf :
GENTOO_MIRRORS= »ftp://mirror1.finix.eu.org/gentoo/ »