Le Blog de Thomas

Logiciels libres, Linux embarqué, et autres ...

Formation Linux embarqué à Toulouse

Un peu de packaging Debian... et un less sympathique


GNU Source Highlight


Lp4all utilisant GNU Source Highlight, j'ai voulu regarder comment étendre ce dernier pour supporter des langages supplémentaires. Je voulais notamment ajouter le support pour la colorisation des Cascading Style Sheets (CSS). J'ai donc regardé quelle était la dernière version upstream (de l'auteur du logiciel) par rapport à la version actuellement dans Debian. Et bien il y a une petite différence: la version upstream est la 2.4, la version disponible dans Debian unstable est la 1.11. Le paquet Debian n'a pas été mis à jour depuis novembre 2005, malgré l'existence d'un bug daté de décembre 2005 demandant à ce qu'une nouvelle version soit intégrée dans Debian. Au jour d'aujourd'hui, août 2006, rien ne semble avoir été fait. Pourtant, cette version 2.4 apporte le support de nouveaux langages en entrée, et de nouveaux types de sorties.

Less et GNU Source Highlight en action
Less et GNU Source Highlight en action

J'ai donc entrepris d'empaqueter rapidement cette version 2.4. Pour ceux que cela intéresse, le paquet est disponible dans mon dépôt de paquets Debian, mais seulement pour Debian unstable.

Rien de bien difficile pour le packaging, mais j'ai appris quelque chose: l'existence du script src-hilite-lesspipe.sh. Un script tout simplement m-a-g-i-q-u-e. En effet, en exportant les deux variables d'environnement suivantes:





export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s"
export LESS=' -R '


Votre traditionnelle commande "less" va afficher en couleurs le code source de vos programmes quand le langage de programmation sera connu de GNU Source Highlight. Ça donne un affichage vraiment très joli. Tout cela est possible, car GNU Source Highlight supporte une sortie de type ANSI color sequences. À noter que cela est déjà possible avec la version 1.11 disponible dans Debian. Avec cette version, le script src-hilite-lesspipe.sh se trouve dans /usr/bin/, alors que dans mon paquet de la version 2.4, j'ai préféré le placer dans /usr/share/source-highlight/.

Vraiment trop classe ce truc.

Camlrpc et le mécanisme de watch


En me baladant sur les pages "qualité" des paquets que je maintiens dans Debian, je suis tombé sur cette page qui résume l'état de mes paquets dans la distribution. J'ai été attiré par la colonne "Watch Unstable" qui pour le paquet camlrpc indique "0.4.5". En fait, cela signifie qu'une nouvelle version upstream de camlrpc est disponible: celle dans Debian est la 0.4.4, alors qu'il existe une 0.4.5. Et le bazar de Debian l'a trouvé tout seul... ou presque !

En fait, la magie vient du fichier debian/watch que j'ai placé dans le paquet, et qui contient:
version=3
http://www.ocaml-programming.de/packages/rpc-([0-9\.]*)\.tar\.gz


À l'origine, j'avais créé ce fichier en copiant sur un autre paquet, mais sans vraiment comprendre comment il était utilisé. En réalité, la regexp permet de regarder si de nouvelles versions du logiciel sont disponibles upstream en regardant si un tarball de version plus récente existe. Je ne savais pas du tout que ce fichier watch était utilisé par le système qualité de Debian, je viens de le découvrir.

Sinon, j'ai pu découvrir que ce fichier watch peut être utilisé grâce à la commande uscan (paquet devscripts).

Sympathique cette petite chose. Il est juste dommage que la chose n'envoie pas un courrier électronique au mainteneur du paquet, car cela améliorerait encore la réactivité : je ne consulte pas fréquemment ma page qualité.

Linda


Pour tester la conformité de mes paquets, j'utilise depuis longtemps Lintian. Pour la première fois, j'ai utilisé un nouvel outil de validation: Linda. Il vérifie d'autres choses que Lintian. Et notamment, sur mon paquet camlrpc, il râlait car un binaire n'était pas strippé:
$ linda librpc-ocaml-dev_0.4.5-1_i386.deb 
E: librpc-ocaml-dev; Binary /usr/bin/ocamlrpcgen contains unneeded section comment.
E: librpc-ocaml-dev; Binary /usr/bin/ocamlrpcgen is not stripped.


Malheureusement, pour une raison qui m'échappe encore, ce binaire (programmé en Objective Caml) ne peut pas être strippé. Lorsqu'il l'est, il ne fonctionne tout simplement plus.

Malgré cela, je ne voulais pas que le warning de Linda apparaisse, il fallait donc le désactiver. La bonne façon de faire est de créer un fichier override pour Linda, tel que documenté dans la page de man. Par contre, ce qui est assez mal documenté, c'est la façon d'intégrer ce fichier override dans son paquet Debian. Après avoir regardé quelques autres paquets, voici comment j'ai procédé.

Dans le répertoire debian/, j'ai créé un fichier librpc-ocaml-dev.linda-overrides (librpc-ocaml-dev est le nom du paquet binaire généré par le paquet source camlrpc). Celui-ci contient:
# For some reason, ocamlrpcgen doesn't work after
# being stripped.
Tag: binary-note-or-comment
Data: /usr/bin/ocamlrpcgen
Tag: unstripped-binary
Data: /usr/bin/ocamlrpcgen


Lors de la génération du paquet, il faut copier ce fichier dans /usr/share/linda/overrides/<nomdupaquet>/. Pour cela, il suffit d'ajouter dans la cible install la ligne suivante:
install -m 644 -D debian/librpc-ocaml-dev.linda-overrides \
         debian/librpc-ocaml-dev/usr/share/linda/overrides/librpc-ocaml-dev


Et hop, le tour est joué:
$ linda -s ../build-area/librpc-ocaml-dev_0.4.5-1_i386.deb 
$


;-)

Au passage, j'ai remarqué que la page de manuel de linda ne mentionnait pas le fait qu'on puisse ajouter des commentaires dans les fichiers override. Après avoir jeté un coup d'oeil au code source de linda pour vérifier que c'était effectivement possible, j'ai reporté un bug avec un patch pour que cette possibilité soit mentionnée. C'est le bug 383523.
Il y a 5 commentaires sur cette page. [Afficher commentaires/formulaire]