Mon premier paquet AUR : fortune-mod-kaamelott

Suite au billet de Devil505 expliquant qu\’il avait packagé pour Frugalware et pour l\’application fortune-mod des citations des Tontons Flingueurs, je me suis dit qu\’il était temps pour moi de proposer mon premier paquet AUR pour ArchLinux sur le même principe. En effet, il y a quelques mois, j\’avais extrait de Wikiquote.org plus de 500 citations de la série Kaamelott de façon à les utiliser avec fortune. Je faisais l\’installation à la main sous Ubuntu (si on peut vraiment parler d\’installation vu qu\’il s\’agit de copier deux fichiers…). Dorénavant, il suffira de faire sous ArchLinux :

$ yaourt -S fortune-mod fortune-mod-kaamelott

Permettant ainsi d\’avoir de superbes citations :

$ fortune kaamelott
C est pas que c est difficile de la récupérer... C est que c est sa mère
difficile de la récupérer, la race de sa grand-mère !
[Karadoc, Livre IV, Le Vice De Forme]

Bref, je vais profiter de ce billet pour expliquer brièvement comment j\’ai créé et soumis ce paquet AUR. Le principe est finalement très simple puisque que j\’ai créé d\’une part une archive des \ »sources\ » hébergée sur mon serveur contenant les citations de Kaamelott au format \ »fortune\ » et d\’autre part une archive contenant le fichier PKGBUILD qui permet de décrire le paquet (que ce soit des informations sur la version ou la licence comme la fonction permettant l\’installation). Pour écrire ce fichier, je me suis inspiré de PKGBUILD existants et notamment celui de fortume-mod-chucknorris. Voilà ce que ça donne :

# Maintainer: François Tessier

pkgname=fortune-mod-kaamelott
pkgver=1
pkgrel=1
pkgdesc=\"French Fortune cookies from Kaamelott\"
arch=(any)
license=(\'CCPL\')
depends=(fortune-mod)
makedepends=(coreutils)
source=\"http://www.francoistessier.info/blog/wp-content/uploads/2011/02/fortune-kaamelott.tar.gz\"
url=\"http://www.francoistessier.info/blog/2011/02/14/mon-premier-paquet-aur-fortune-mod-kaamelott\"
md5sums=(\'a490897ecfdf4b1944e1411bd97b6a17\')

build() {
  cd $startdir/src
  mkdir -p $startdir/pkg/usr/share/fortune
  fold -w 80 -s fortune-kaamelott/kaamelott > \\
  	$startdir/pkg/usr/share/fortune/kaamelott || exit 1
  strfile $startdir/pkg/usr/share/fortune/kaamelott || exit 2
}

Quelques précisions concernant cette archive : une fois le PKGBUILD rédigé, j\’ai dû générer le hash MD5 du fichier spécifié dans le champ \ »source\ ». Un outils permet de faire ça simplement : makepkg. Ainsi, une fois dans le dossier contenant mon PKGBUILD :

$ makepkg -g >> PKGBUILD

Cette commande va télécharger la source, en générer le hash et l\’écrire à la fin du fichier PKGBUILD. Pour plus de lisibilité, j\’ai déplacé cette ligne au-dessus de la fonction build(). Enfin, pour générer proprement l\’archive qu\’il faudra uploader sur http://aur.archlinux.org, toujours dans le même dossier :

$ makepkg --source

Un fichier fortune-mod-kaamelott-1-1.src.tar.gz a été créé. L\’upload s\’est bien passé et l\’installation via yaourt aussi! Bref, je suis vraiment très impressionné par la simplicité de la procédure permettant de soumettre un paquet AUR. Qui plus est la documentation est assez fournie. Ce système est vraiment puissant et encourage la communauté à participer ou tout du moins ne la décourage pas! Qui dit mieux?!

PS : Les citations de Wikiquote.org étant sous licence CC by-sa, j\’ai soumis mon paquet à la même licence et j\’ai cité Wikiquote.org dans mon README. Qu\’en pensez-vous? Suis-je bien en règle en procédant ainsi?

Introduction à DocBook sous Linux

Parce qu\’il n\’y a pas que le LaTeX pour écrire de bons documents, je vais vous présenter rapidement les bases de DocBook 5.0. Mais d\’abord, qu\’est-ce que DocBook?

DocBook

DocBook peut se résumer dans un premier temps à un schéma XML définissant un standard de création de documents (concrètement un DTD, un XSD, …). Il offre un grand nombre de balises pour écrire un document. C\’est un \ »format\ » très utilisé pour les documentations de projets open-source par exemple. Par abus de langage, nous parlerons de \ »fichier DocBook\ » durant le reste de cet article pour parler d\’un fichier XML écrit en suivant le schéma DocBook.

Du fait qu\’il soit standardisé, un même fichier DocBook peut servir de base à plein de rendu différents (HTML, PDF, …).

Enfin, à la base de DocBook, il y a le célèbre éditeur d\’ouvrages consacrés à l\’informatique : O\’Reilly (qui a malheureusement mis la clé sous la porte…).

Créer son premier document

Nous allons donc créer notre premier document à base de DocBook. Pour commencer, il faut installer le paquet suivant :

$ sudo apt-get install docbook-xsl-ns

Ce paquet ajoute des fichiers XSL qui sont des feuilles de style pour document XML. Elles permettent, à partir d\’un fichier basé sur DocBook, de lui appliquer un style pour un rendu spécifique. C\’est en quelque sorte le même principe que le CSS appliqué au HTML.

Dans un premier temps, nous allons écrire un fichier XML, essai.xml, basé sur le schéma DocBook.

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
 <article version=\"5.0\" xmlns=\"http://docbook.org/ns/docbook\">
   <title>Premier document DocBook</title>
   <articleinfo>
     <author>
       <firstname>John</firstname>
       <surname>Doe</surname>
     </author>
     <copyright>
       <year>2010</year>
       <holder>One More Blog</holder>
     </copyright>
   </articleinfo>
   <sect1>
      <title>Section de premier niveau</title>
      <para>
        Ce texte est dans un paragraphe.
      </para>
      <itemizedlist>
        <listitem>
          premier item d\'une liste;
        </listitem>
        <listitem>
          et le second item.
        </listitem>
      </itemizedlist>
   </sect1>
 </article>

Les noms des balises font que le code est très compréhensible et, du coup, rapide à intégrer. Ce petit morceau de code n\’est qu\’un aperçu minime de ce qu\’il est possible de faire avec DocBook. Bref, nous allons maintenant appliquer à ce fichier un style afin de créer un rendu. En HTML d\’abord, puis en PDF.

$ xsltproc -o essai.html /usr/share/xml/docbook/stylesheet/docbook-xsl-ns/xhtml/docbook.xsl essai.xml

La syntaxe est très simple. On spécifie le nom du fichier en sortie grâce à l\’option -o. On donne ensuite une feuille de style XSL et le fichier XML en entrée. Le résultat est le suivant :

\"Exemple

Un peu comme en LaTeX, tout est géré. Une table des matières est générée en fonction des sections et sous-sections avec les liens qui vont bien. Des id et class sont ajoutés à toutes les balises HTML de façon à éventuellement rajouter une feuille de style, …

Nous allons maintenant, à partir du même code XML, générer une version PDF de ce DocBook. Cependant, cela nécessite l\’installation de quelques outils supplémentaires. Dans un premier temps, nous allons ajouter les feuilles de styles prévue pour le PDF :

$ sudo apt-get install docbook-xsl-doc-pdf

Il nous faut ensuite récupérer l\’utilitaire FOP (Formatting Objects Processor). Il s\’agit d\’un programme écrit en Java qui permet de générer entre autres des fichiers PDF à partir de XML et XSD. Cet utilitaire est présent dans les dépôts d\’Ubuntu – et des autres distributions j\’imagine – mais dans sa version 0.95. Or, est sortie depuis quelques mois une version 1.0 plus aboutie. Nous allons donc récupérer cette version et y ajouter une librairie, Offo, qui gère les découpages de mot (hyphenation ou trait d\’union si fin de ligne) et qui évitera des erreurs lors de la génération du document.

$ wget http://apache.crihan.fr/dist//xmlgraphics/fop/binaries/fop-1.0-bin.tar.gz
$ tar -xvzf fop-1.0-bin.tar.gz
$ cd fop-1.0/
$ wget http://freefr.dl.sourceforge.net/project/offo/offo-hyphenation/1.2/offo-hyphenation-fop-stable_v1.2.zip
$ unzip offo-hyphenation-fop-stable_v1.2.zip
$ cp offo-hyphenation-fop-stable/fop-hyph.jar lib/

Lançons maintenant la création de notre document PDF :

$ ./fop -xml ../essai.xml -xsl /usr/share/xml/docbook/stylesheet/docbook-xsl-ns/fo/docbook.xsl -pdf ../essai.pdf

Là encore c\’est très simple. L\’option -xml doit être suivie du fichier DocBook, l\’option -xsl d\’une feuille de style spécifique au PDF et enfin la dernière option défini le fichier en sortie. Le résultat est très satisfaisant : \"PDF

Ce n\’est là qu\’un tout petit aperçu de ce qu\’il est possible de faire avec DocBook. Comme pour LaTeX, il existe plusieurs classes (ici nous avons testé la classe article) pour différents usages. Je vous laisse fouiller un peu et trouver votre bonheur dans la documentation. Je vous propose quelques sites intéressants qui d\’une part m\’ont aidé à écrire ce premier article sur le sujet et qui d\’autre part proposent de la documentation de qualité pour approfondir tout ça :

Environnement LaTeX sous Ubuntu

On m\’a fait remarquer il y a peu de temps que j\’avais publié un article sur comment écrire son CV en LaTeX sans expliquer comment faire du LaTeX… Remarque très pertinente! Du coup, je vais tenter de faire un rapide tutoriel permettant de se lancer rapidement et sans trop de difficultés dans l\’aventure LaTeX. Je laisserai de côté la syntaxe qui est déjà très bien documentée sur de nombreux sites (celui-ci étant mon favori) pour me concentrer plus spécifiquement sur l\’environnement nécessaire pour créer et compiler du LaTeX.

Installer LaTeX

Dans un premier temps, nous allons installer les bibliothèques et executables permettant de compiler des documents en LaTeX (que ce soit en DVI, PS ou encore PDF). Le plus simple, si on a un bon giga-octet de libre sur son disque, est d\’installer le paquet texlive-full. C\’est certes assez lourd en terme d\’espace mais on est sûr de ne rien oublier. Si en revanche on veut s\’éviter l\’installation de la prise en charge du grec ou du letton et économiser ainsi 300Mo je vous conseille plutôt d\’exécuter la commande suivante qui n\’installera que le nécessaire :

$ sudo apt-get install texlive texlive-lang-french texlive-latex-extra

En fonction de votre connexion, cette installation peut prendre un certain temps. Elle demande en effet de prendre plus de 400Mo dans les dépôts. Une fois ceci fait, vous devriez être en mesure de compiler votre premier document. Pour en être convaincu, créez un document doc.tex avec le premier éditeur de texte venu et écrivez dedans :

\\documentclass{article}
\\begin{document}
Premier test de compilation d\'un document \\LaTeX\\ en PDF.
\\end{document}

La compilation en PDF se fait ensuite simplement de cette manière :

$ pdflatex doc.tex

Dans le même dossier sera créé le fichier doc.pdf (mais aussi des fichiers temporaires que vous pouvez supprimer sans problème à savoir doc.aux et doc.log).

Seulement, écrire un document en LaTeX n\’est pas si évident à l\’aide d\’un simple éditeur de texte. Un peu d\’auto-complétion et de compilation automatique peut vite s\’avérer pratique si on veut gagner du temps et se consacrer exclusivement au contenu.

Éditeur LaTeX

Je ne connais pas vraiment les différents IDE (si on peut parler d\’IDE…) aidant à la rédaction de documents LaTeX donc je n\’oserai pas prétendre que ma solution est la meilleure. Cependant, je vais vous faire partager les outils que j\’utilise et qui pour le moment me conviennent parfaitement : Eclipse et le plugin TeXlipse.

Installation d\’Eclipse

Eclipse est un IDE open-source très connu écrit en Java fonctionnant essentiellement grâce à un système de plugins. Une communauté très active gravite autour de ce projet et propose des modules pour à peu près tout et en particulier pour le LaTeX. J\’utilise Eclipse aussi pour coder en Java et en C++. Du coup, pour éviter un nombre incalculable d\’applications et parce que je suis familier avec son interface, je l\’ai choisi aussi pour le LaTeX.

\ »Installation\ » est un bien grand mot puisque Eclipse n\’en nécessite justement pas! Pour pouvoir l\’utiliser, il faut dans un premier temps récupérer la dernière version disponible à cette adresse :

http://www.eclipse.org/downloads/packages/eclipse-classic-360/heliosr

Une fois l\’archive téléchargée, décompressez-là et lancez l\’exécutable eclipse. Si vous n\’avez pas de JRE (Java Runtime Environment), Eclipse vous le spécifiera puisqu\’il ne pourra tout simplement pas démarrer! vous pouvez remédier à ça en installant une implémentation libre du JRE d\’Oracle, OpenJDK :

$ sudo apt-get install openjdk-6-jre

Le lancement d\’Eclipse devrait ensuite ne plus poser de problèmes. Nous allons maintenant ajouter le plugin aidant à la création de documents LaTeX.

Ajout du plugin TeXlipse

Dans Eclipse, ouvrez Help > Install New Software. Dans le fenêtre qui s\’affiche, cliquez sur le bouton Add, ajoutez les informations suivantes puis validez :

  • Name : TeXlipse
  • Location : http://texlipse.sourceforge.net/
\"Add

Un item \ »TeXlipse\ » est alors proposé dans la liste. Cochez-le et cliquez sur Next. Il ne reste plus qu\’à suivre les instructions. Quelques questions sont posées durant le processus (accepter les conditions de licence, valider l\’installation) auxquelles vous devez bien entendu répondre par la positive.

Un redémarrage d\’Eclipse plus tard, le plugin est bien installé. On peut maintenant créer un projet LaTeX. Pour cela, File > New > Project… puis dans la fenêtre qui s\’est ouverte, séléctionnez LaTeX project dans le sous-menu de TeXlipse.

\"new

Attribuez un nom au projet et sélectionnez le format de sortie du document une fois le .tex compilé (par exemple PDF). Cet écran permet également de choisir le template qui sera utilisé pour mettre du contenu par défaut dans votre fichier LaTeX. Ça n\’a pas grand intérêt si ce n\’est de \ »pré-écrire\ » la balise \\documentclass{}. L\’étape suivante permet en particulier de renommer le fichier .tex principal et surtout le fichier de sortie (par exemple CV.pdf).

Et voilà! Il n\’y a plus qu\’à écrire son document. A chaque sauvegarde d\’un fichier du projet dans Eclipse, le LaTeX sera recompilé. Plus besoin de la ligne de commande, tout est automatique. Petite précision pour vous éviter des frayeurs, l\’instruction \\tableofcontents nécessite une double compilation pour que la table des matières du document soit mise à jour.

Créer son CV en LaTeX avec moderncv

moderncv est une classe de document pour LaTeX permettant de mettre en forme son CV de façon propre, lisible et dans un design moderne (d\’où son nom!). Cette classe est disponible dans le paquet TeXlive. Par rapport à d\’autres classes de ce type, elle a l\’avantage de supporter quelques options intéressantes comme deux mises en page différentes (version \ »casual\ » ou \ »classic\ ») ou un choix de couleur de bordures parmi le bleu, le vert, l\’orange, le rouge ou le gris. L\’exemple fourni par l\’auteur de cette classe est bien documenté et permet de réaliser rapidement son CV en s\’en inspirant. En version \ »classic bleu\ », le mien ressemble à ça :

\"CV\"

Autant dire que j\’en ai définitivement fini avec les CV créés sous Word (ou Open Office) ! Encore une preuve de la puissance de LaTeX.

[EDIT ] : Voir comment mettre à jour le package moderncv pour avoir accès à toutes les balises de l\’exemple.

[EDIT 2] : A la demande générale (!!), je mets en ligne le .tex de mon CV : cv.tex.

Connaître la place prise sur le disque par un paquet

J\’ai eu besoin il y a quelques jours de connaître la taille utilisée sur le disque par un paquet installé. Sur une version desktop d\’Ubuntu (ou autre) il suffit d\’ouvrir le gestionnaire de paquet et de regarder les propriétés du programme installé. En revanche, sur une version serveur sans interface graphique, ça demande évidemment un peu plus de travail. A ma connaissance, deux solutions pour y parvenir : aptitude ou dpkg-query.

Exemple concret : on souhaite connaître la place utilisée sur le disque par l\’éditeur de texte vim.

1 – via aptitude

aptitude show vim

Cette commande fournit en sortie un certain nombre d\’informations concernant le paquet en question. La ligne qui nous intéresse est celle intitulée \ »Taille décompressée\ » :

Paquet : vim
État: installé
Automatiquement installé: non
Version : 2:7.2.245-2ubuntu2
Priorité : optionnel
Section : editors
Responsable : Ubuntu Developers
Taille décompressée : 1 937k
Dépend: vim-common (= 2:7.2.245-2ubuntu2), vim-runtime (= 2:7.2.245-2ubuntu2), libacl1 (>= 2.2.11-1), libc6 (>= 2.7), libgpm2 (>= 1.20.4), libncurses5 (>=
5.6+20071006-3), libpython2.6 (>= 2.6), libselinux1 (>= 2.0.85)
Suggère: ctags, vim-doc, vim-scripts
Est en conflit: vim-common (< 1:7.1-175+1)
Remplace: vim-common (< 1:7.1-175+1)
Fournit: editor
Fourni par: vim-gnome, vim-gtk, vim-nox
Description : Vi IMproved – enhanced vi editor
Vim is an almost compatible version of the UNIX editor Vi.

Many new features have been added: multi level undo, syntax highlighting, command line history, on-line help, filename completion, block operations, folding, Unicode
support, etc.

This package contains a version of vim compiled with a rather standard set of features. This package does not provide a GUI version of Vim. See the other vim-*
packages if you need more (or less).
Site : http://www.vim.org/

2 – via dpkg-query

dpkg-query -s vim

Dans ce cas, c\’est la ligne \ »Installed size\ » qui va nous importer (la valeur affichée est en kilo-octet) :

Package: vim
Status: install ok installed
Priority: optional
Section: editors
Installed-Size: 1892
Maintainer: Ubuntu Developers
Architecture: amd64
Version: 2:7.2.245-2ubuntu2
Replaces: vim-common (<< 1:7.1-175+1) Provides: editor Depends: vim-common (= 2:7.2.245-2ubuntu2), vim-runtime (= 2:7.2.245-2ubuntu2), libacl1 (>= 2.2.11-1), libc6 (>= 2.7), libgpm2 (>= 1.20.4), libncurses5 (>= 5.6+20071006-3), libpython2.6 (>= 2.6), libselinux1 (>= 2.0.85)
Suggests: ctags, vim-doc, vim-scripts
Conflicts: vim-common (<< 1:7.1-175+1)
Description: Vi IMproved – enhanced vi editor
Vim is an almost compatible version of the UNIX editor Vi.
.
Many new features have been added: multi level undo, syntax
highlighting, command line history, on-line help, filename
completion, block operations, folding, Unicode support, etc.
.
This package contains a version of vim compiled with a rather
standard set of features. This package does not provide a GUI
version of Vim. See the other vim-* packages if you need more
(or less).
Homepage: http://www.vim.org/
Original-Maintainer: Debian VIM Maintainers

L\’avantage selon moi de dpkg-query est le grand nombre d\’options permettant notamment de spécialiser l\’affichage en le limitant à l\’information que l\’on cherche. Ainsi pour n\’afficher que le nom du paquet et la place qu\’il prend sur le disque :

dpkg-query --show --showformat=\'${Package}\\t${Installed-Size}\\n\' vim

On aura alors en sortie :

vim 1892

Cependant, comme on peut le voir sur cet exemple les informations donnée par chacune des commandes ne sont pas toujours les mêmes (par exemple 1937ko pour aptitude contre 1892ko pour dpkg-query). Cette différence ne se constate que sur certains paquets et je dois dire que je n\’ai pas encore trouvé quelle en est la raison…
Pour plus d\’informations sur ces commandes : manuel d\’aptitude et manuel de dpkg-query.

Opérations sur les images dans Nautilus

Pour ceux qui utilisent Nautilus comme gestionnaire de fichiers (sous Ubuntu par exemple…), il existe un paquet qui ajoute dans le menu contextuel qui apparait lors d\’un clic droit sur une image, des options de redimensionnement et de rotation d\’images. Ce qui permet ainsi d\’effectuer ces opérations de base sur une image sans avoir à ouvrir GIMP ou autre. Pour cela, un petit

sudo apt-get install nautilus-image-converter
killall nautilus
nautilus

Et le tour est joué. Dorénavant, un clic droit sur une image propose deux nouvelles entrées :

\"Menu

Le redimensionnement comme la rotation fonctionnent de la même manière. Une fenêtre vous propose deux options. La première concerne respectivement les dimensions de l\’image et l\’angle de rotation que l\’on souhaite appliquer. La seconde option offre la possibilité d\’enregistrer l\’image modifiée dans un nouveau fichier ou d\’écraser celui d\’origine. Quelques précisions tout de même concernant l\’option de redimensionnement : quel que soit le système de calcul de dimension que vous choisirez (taille prédéfinie, échelle ou taille personnalisée) les proportions de l\’image d\’origine seront toujours respectées! Ainsi, une image de taille 800x600px redimensionnée en choisissant la taille prédéfinie 128x128px aura au final comme dimension 128x96px. De plus, en utilisant l\’option de redimensionnement personnalisé, il faudra veiller à modifier les deux valeurs dans le cas d\’un agrandissement… En effet, pour une image de taille 800x600px, si vous spécifiez une hauteur de 500px pour réduire l\’image d\’origine, la largeur par defaut de 1000px ne sera pas prise en compte et vous aurez une image en sortie de 667x500px. En revanche, si vous spécifiez une hauteur de 900px, l\’image en sortie sera de 1000x750px. Il s\’agit sans doute d\’un bug donc dans le doute, le mieux sera toujours d\’enregistrer l\’image modifiée dans un nouveau fichier pour préserver le fichier d\’origine. Malgré tout, c\’est une fonctionnalité de nautilus très pratique et qui fait gagner un temps précieux!

Ubuntu: changer la source des paquets

Lors de la sortie il y a quelques jours de la version 10.04 alias Lucid Lynx d\’Ubuntu, j\’ai tenté à plusieurs reprise la migration depuis ma 9.10. Le problème qui s\’est posé et qui se pose finalement à chaque nouvelle version était que les serveurs utilisés par défaut étaient surchargés. Chacune de mes tentatives de mise à jour s\’est alors soldée par un échec cuisant jusqu\’à ce que je m\’aperçoive que chez Canonical (Debian?), on pense à tout!
En effet, si vous allez dans Système > Administration > Sources de logiciels vous verrez dans le premier onglet la ligne \ »Télécharger depuis: \ » avec comme sélection par defaut \ »Serveur National (France)\ ». Sélectionnez à la place \ »Autre…\ » puis dans la fenêtre qui s\’affiche, cliquez sur \ »Sélectionner le meilleur serveur\ ». Une série de tests de connexion est alors lancée sur quelques 350 serveurs afin de déterminer celui qui est le mieux adapté.

\"Changer

Dans mon cas, il m\’a choisi un serveur qui appartient visiblement à Orange :

http://ftp.oleane.net/ubuntu

La mise à jour s\’est ensuite faite sans aucun problème et à une vitesse folle (3Mo/s pour la partie téléchargement des paquets).