Un peu de libre dans ce monde propriétaire

On y parle de libre, de configuration et d'autres trucs hermétiques à la plupart des personnes

Aller au contenu | Aller au menu | Aller à la recherche

17avr.

Oripa & Ubuntu

Oripa est un outil développé en Java qui permet de concevoir des canevas de plis (ou Crease Pattern) de modèles en origami et de les plier virtuellement.

Pour le faire fonctionner, il est nécessaire d'avoir Java d'installé et plus particulièrement le Java Runtime Environment (JRE). Pour ce faire, un petit tour sur le terminal et on installe le paquet nécessaire et ses dépendances :

  1. sudo apt-get install sun-java6-jre

Puis on lance Oripa avec la commande suivante :

  1. java -jar oripaXXX.jar
  2. # où XXX est le numéro de version. 034 à la date d'écriture de ce billet

Hélas, lors du premier lancement, j'ai été confronté à l'erreur suivante :

  1. Exception in thread "main" java.lang.NoClassDefFoundError: javax/vecmath/Tuple2d
  2. at oripa.ORIPA.main(ORIPA.java:54)
  3. Caused by: java.lang.ClassNotFoundException: javax.vecmath.Tuple2d
  4. at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
  5. at java.security.AccessController.doPrivileged(Native Method)
  6. at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
  7. at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
  8. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
  9. at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
  10. ... 1 more

Je n'avais pas vu sur la page d'Oripa que le programme nécessite l'API Java 3D. On va donc installer le paquet nécessaire :

  1. sudo apt-get install libjava3d-java

Et on relance.

Malheureusement, j'ai toujours la même erreur. Après quelques recherches, je suis tombé sur cette page qui m'a fourni des pistes pour résoudre mon problème. J'ai juste créé un lien symbolique à l'endroit nécessaire :

  1. sudo ln -s /usr/share/java/vecmath-1.5.2.jar /usr/lib/jvm/java-6-sun/jre/lib/ext/vecmath-1.5.2.jar

Et voila, ça fonctionne :)

Édition du 29 juin 2011 : La méthode proposée en faisant un lien symbolique n'est pas des plus propres. Il y a une méthode plus adaptée pour utiliser la bibliothèque vecmath. Il suffit de d'ajouter un répertoire dans la liste des répertoires lus par Java pour récupérer les bibliothèques. Donc, au lieu de lancer Oripa de la manière suivante :

  1. java -jar oripaXXX.jar
  2. # où XXX est le numéro de version. 034 à la date d'écriture de ce billet

on le lance en lui ajoutant un paramètre avec le chemin des bibliothèques :

  1. java -Djava.ext.dirs=/usr/share/java/ -jar oripaXXX.jar
  2. # où XXX est le numéro de version. 034 à la date d'écriture de ce billet

C'est plus propre, non?

25fév.

Relancer un service avec cron

Dis comme ça, ça paraît simple.
Effectivement c'est très simple. Par exemple, pour relancer le service d'apache, il suffit d'ajouter la ligne suivante au cron :

  1. */1 * * * * /usr/bin/pgrep apache || /etc/init.d/apache2 start

Pour l'explication de la syntaxe, je vous laisse le soin de lire l'introduction à cron et le tutoriel de relance automatique des services.

Mais si ça avait été aussi simple dans mon cas, je n'aurais pas écrit ce message. J'ai été confronté à un problème qui m'a demandé pas mal de temps à résoudre.

Le problème était le suivant. J'avais un script de relance d'un service un peu plus complexe que celui décrit un peu plus haut. Le script fonctionnait parfaitement lancé manuellement avec l'utilisateur root. Par contre, il ne fonctionnait pas du tout quand il était lancé par cron (toujours en root).

Après de nombreux tests différents, j'ai identifié le problème. La variable PATH utilisée par cron ne contenait pas le chemin d'accès au programme appelé et ce même si l'utilisateur était le même.
Je ne sais pas si c'est dû à la configuration de Debian et d'Ubuntu [1], mais la configuration de cron [2] n'est pas prise en compte au moment de l'exécution des commandes. J'ai du ajouter manuellement le chemin d'accès dans le script.

Finalement, la solution était vraiment toute simple mais identifier le problème a été la partie la plus complexe.

Notes

[1] j'ai fait le test sur les 2 plate-formes

[2] dans le fichier /etc/crontab