Setup est le gestionnaire de paquetages utilisé par Logram. Il gère les applications et bibliothèques sous forme de paquets, facilement installables.
Cette page vous apprendra à créer un paquet Setup en quelques étapes.
Nous allons créer un paquet pour l'application Vim, un éditeur de texte en ligne de commande. Ce paquet n'est ni trop simple, ni trop complexe, et ne vous oblige pas à installer tout un tas de dépendances sur votre ordinateur.
Pour le moment, ce paquet n'aura aucune dépendance, la distribution Logram ne contenant encore rien. Ce sera un simple exemple.
Le format de paquet de Logram est l'un des plus simples. Si vous connaissez quelques bases du XML, tout ira tout seul. En effet, l'entièreté d'un paquet est contenu dans un fichier XML, qui ne fait que renseigner Setup sur les fichiers à télécharger, comment compiler l'application, comment la découper en paquets, etc.
Ce fichier est court et fait très rapidement, vous verrez
.
Pour commencer à créer notre paquet, créez un dossier dont vous choisissez le nom (une bonne habitude est de le nommer comme le paquet) et ajoutez-y un fichier metadata.xml :
1 2 3 | mkdir vim
cd vim
touch metadata.xml
|
Lancez ensuite votre éditeur de texte préféré (de préférence avec coloration syntaxique), et ouvrez ce fichier metadata.xml. Ensuite, copiez-y ceci :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?xml version='1.0'?> <metadata primarylang="fr" > <source license="gpl" devel="false" name="" upstreamurl=""> <maintainer email="vous@vous.vous" name="vous" /> <script type="download" ><![CDATA[ ]]></script> <script type="build" ><![CDATA[ ]]></script> </source> <package name="" section=""> <files pattern="/*" /> <title> </title> <shortdesc> </shortdesc> <description> </description> </package> <changelog> <entry version="" distribution="experimental" email="vous@vous" author="Vous" time="" date="" > </entry> </changelog> </metadata> |
Voici le squelette du fichier, qu'il vous suffira de compléter. Cet arbre d'éléments XML dit à Setup que vous souhaitez créer un paquet, à partir d'une certaine source, et que ce paquet une fois compilé ira dans package. Le changelog vous permet de mettre l'historique des modifications. Les deux scripts contiendront un morceau de script bash, qui dira à Setup comment récupérer et compiler les sources.
Nous allons commencer par un peu peupler ce fichier. Nous allons créer le paquet vim, donc mettez "vim" dans les différents "name=", comme ceci :
1 2 3 4 5 6 | <source license="gpl" devel="false" name="vim" upstreamurl="http://www.vim.org"> ... </source> <package name="vim" section="base"> .... </package> |
Vim est actuellement à la version 7.2, donc nous le renseignons dans le changelog. Mettez aussi la date et l'heure à laquelle vous faites le paquet :
1 2 3 4 5 6 | <changelog> <entry version="7.2~1" distribution="experimental" email="vous@vous" author="Vous" time="13:00:00" date="2009-12-25" > </entry> </changelog> |
Voilà, ça commence tout doucement à un peu se remplir. Maintenant, passons à la partie créative : les chaînes de caractères. Il y en a quelques unes à remplir, et elles peuvent être traduites. Mettez-les dans votre langue maternelle, et si elle n'est ni l'anglais ni le français, traduisez-les aussi soit en français, soit en anglais. Ainsi, vous êtes certain qu'au moins un membre de l'équipe de Logram pourra vous lire, et les utilisateurs ne seront pas perdus.
Les chaînes de caractères des paquets ont un format particulier. Elles ont la forme :
1 2 | <langue>texte</langue> <autre_langue>texte</autre_langue> |
Commencons par le changelog. C'est une chaîne normale et courte. Pour l'exemple, elle va être en anglais et en français :
1 2 3 4 5 6 7 8 9 | <entry version="7.2~1" distribution="experimental" email="vous@vous" author="Vous" time="13:00:00" date="2009-12-25" > <fr> Première version </fr> <en> First release </en> </entry> |
C'était simple. Maintenant, il faut remplir les descriptions du paquet :
Voici à quoi ressemble maintenant la zone intéressante de notre metadata.xml :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <package name="vim" section="base"> <files pattern="/*" /> <title> <fr>Éditeur de texte Vim</fr> </title> <shortdesc> <fr>Éditeur de texte console riche en fonctionnalités</fr> </shortdesc> <description> <fr> Vim est un éditeur de texte console puissant et léger. Il permet d'éditer tout type de texte, avec coloration syntaxique, et plein de fonctionnalités avancées. Il permet également de scinder et de gérer les vues, d'utiliser un langage de scripts, et est extrêmement configurable. Vim est aussi l'autre participant du "troll" entre Vim et Emacs, deux éditeurs de textes connus, et jouissant d'un fan-club n'hésitant pas à mettre les avantages de l'un en face des inconvénient de l'autre, au travers de discussions longues et animées. </fr> </description> </package> |
Les métadonnées sont maintenant complètes, on va pouvoir télécharger et compiler tout ça !
Vous n'avez rien à télécharger, Setup le fera pour vous. Il suffit de le renseigner sur la manière de télécharger Vim. Le script de type download est là pour ça. Il doit télécharger le fichier, et le décompresser. Il est lancé depuis le dossier des sources (appelons-le {{sourcedir}}. Il est généralement dans ./src, mais ça peut changer).
Vim est téléchargeable à l'adresse ftp://ftp.vim.org/pub/vim/unix/vim-7.2.tar.bz2. Nous allons utiliser wget pour le récupérer, puis tar pour le désempaqueter. Voici le script download :
1 2 3 4 | <script type="download" ><![CDATA[ wget -q ftp://ftp.vim.org/pub/vim/unix/vim-7.2.tar.bz2 || exit 1 tar -xf vim-7.2.tar.bz2 || exit 1 ]]></script> |
Notez que le CDATA permet de ne pas utiliser de XML dans le script. Cela évite tout un tas d'erreurs, et c'est une très bonne habitude à prendre.
Maintenant que Setup sait télécharger ce fichier, il faut lui dire comment le compiler. C'est assez simple, il suffit de mettre la suite de commandes nécessaites dans build. Ce script est également lancé depuis le dossier {{sourcedir}}, donc c'est comme s'il était lancé juste après download, sans cd entre les deux.
Une bonne habitude à prendre est de lire le fichier INSTALL et README du paquet que vous empaquetez. Ces fichiers indiquent tout un tas d'options intéressantes pour la compilation. Ici, nous allons nous contenter du strict minimum.
Une remarque tout de même : pas de sudo dans les scripts ! Il faut dire que ce n'est pas du tout nécessaire. En effet, le système dit du fakeroot est utilisé. Cela conciste à installer le programme compilé dans un sous-dossier, et non pas à la racine comme vous en avez l'habitude. Setup l'installe dans le dossier build, qui ne nécessite pas de droits spéciaux. Ainsi, votre système n'est aucunement touché par ce que vous construisez.
!xml <script type="build" ><![CDATA[ # tar -xf a mis vim dans le dossier vim72, y aller cd vim72 || exit 1 ./configure --prefix=/usr || exit 1 make || exit 1 # Fakeroot, on installe dans le dossier build make install "DESTDIR={{builddir}}" || exit 1 ]]></script>
builddir ?
Mais qu'est-ce cela ? Et oui, Setup possède un petit système de templates, vous permettant de placer des variables dans vos scripts. {{builddir}} est remplacé par le chemin du dossier qui accueillera les binaires, juste avant que votre script soit lancé. C'est plus pratique des des variables bash ou des paramètres, car là, vous avez un nom, au lieu d'utiliser des numéros ($1, $2, etc). De futures améliorations vous permettront peut-être bientôt d'avoir l'équivalent de tout un préprocesseur dans les templates, l'inclusion de fonctions d'aide, des filtres, etc. Que du bonheur en perspective !
Les communications vous permettent, depuis votre paquet, d'envoyer des informations à l'utilisateur. Elles peuvent être de plusieurs types, comme des messages, des questions, des erreurs. Les questions peuvent demander une chaîne de caractère, un nombre, un oui/non, un choix parmi une liste, plusieurs choix parmi une liste, et d'autre à venir (comme une date, un fichier, une url, une image, etc).
Ce chapitre n'est pas obligatoire, un paquet fonctionne très bien sans questions. De même, évitez les questions quand vous le pouvez, et ne les utilisez que pour trois raisons :
Une question est un simple ensemble de balises XML, qui parlent pour elle-mêmes. Pour ajouter une question, ajoutez ceci entre package et changelog :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ...
</package>
<communication type="message" name="test_msg" >
<title>
<fr>
Vim, le meilleur éditeur de texte !
</fr>
</title>
<description>
<fr>
Vim {{version}} assure qu'en étant installé dans {{root}},
il est infiniment supérieur à la {{machin}} qu'est Emacs !
</fr>
</description>
</communication>
<changelog>
...
|
Ok, vous avez une question, il faut maintenant la «lancer». Pour cela, vous allez à nouveau utiliser un script, mais une sorte spéciale de scripts : les hooks. Les hooks sont des scripts qui sont appelés à certaines étapes de l'installation du paquet (et non-plus la construction, là maintenant c'est complet). Ils vous permettent de nettoyer après la suppression, de préparer l'installation, etc :
Ces scripts peuvent utiliser des templates, et voici les variables disponibles :
Assez parlé, passons au codage. Le lancement de questions est simple et se fait depuis un script dans package :
1 2 3 4 5 6 7 8 | <package name="vim" section="base"> <files pattern="/*" /> <script type="preinst" ><![CDATA[ communicate test_msg version {{version}} root {{instroot}} machin "chose" ]]></script> ... |
communicate est une petite fonction bash que Setup vous met à disposition. Elle prend les paramètres suivantes : «communication nom_de_la_question clef valeur clef valeur ...». Les couples «clef valeur» permettent de remplir les variables templates que nous avons mises dans la question, ici version, root et machin.
Voilà, notre metadata.xml est complet
! Passons maintenant aux tests. Placez-vous dans le dossier du paquet, et tapez "setup download metadata.xml" :
1 2 | cd vim
setup download metadata.xml
|
Le script "download" est appelé. Rien ne s'affiche dans la console, du fait que nous utilisons wget -q. En utilisant d'autres paramètres, wget aurait pu être plus bavard, et Setup nous aurait envoyé la sortie de wget. Attention tout de même, le wget sans options envoie énormément de choses sur la console et ralentit très fort Setup.
Normalement, si vous faites un "ls", un dossier src, contenant le dossier vim, a fait son apparition.
Assurez-vous maintenant que vous avez le matériel nécessaire à la compilation de Vim (gcc, make, autoconf, automake, build-essentials), puis tapez :
1 | setup build metadata.xml |
Les lignes défilent à votre écran, vous montrant l'avancement de la compilation. Ça prend quelques minutes, juste le temps d'aller chercher un café
.
Une fois compilé, un dossier "build" a fait son appartition. Il est maintenant temps de créer les binaires :
1 | setup binaries metadata.xml |
Des lignes du genre
1 | [1435/1570] Compression de data/usr/share/vim/vim72/syntax/tf.vim |
apparaissent à l'écran, vous indiquant l'avancement de la compression XZ. Cette compression est assez lente (rassurez-vous, seuls les 20 premiers fichiers prennent beaucoup de temps, les autres sont bien plus rapides
), et la compression du paquet prend à peu près une minute.
Une fois que c'est fait, vous pouvez vous féliciter : un fichier vim~7.2~1.i686.lpk a fait l'apparition dans votre dossier, il contient le paquet !
Tester un paquet Setup est très simple. Tout d'abord, vérifiez que le paquet est correct :
1 | setup -C -R /tmp/setup showpkg vim~7.2~1.i686.lpk |
Le "-R" est nécessaire, suivez la page Tester Setup pour configurer votre Setup.
La sortie devrait être proche de celle-ci :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | Nom : vim
Version : 7.2~1
Titre : Éditeur de texte Vim
Drapeaux : o Intégration à KDE : utilisable
o Paquet graphique : Non
o Ne pas mettre à jour : Non
o Ne pas installer : Non
o Ne pas supprimer : Non
Section :
Distribution : experimental
Dépôt d'origine : (filesystem)
Status : Non-installé
Téléchargement : 4 Mio
Taille installée : 38 Mio
Paquet source : vim
Adresse de l'auteur : http://www.vim.org
Licence : gpl
Mainteneur : vous <vous@vous.vous>
Description courte : Éditeur de texte console riche en fonctionnalité
Description longue :
Vim est un éditeur de texte console puissant et léger. Il permet d'éditer tout type de
texte, avec coloration syntaxique, et plein de fonctionnalités avancées. Il permet
également de scinder et de gérer les vues, d'utiliser un langage de scripts, et est
extrêmement configurable.
Vim est aussi l'autre participant du "troll" entre Vim et Emacs, deux éditeurs de
textes connus, et jouissant d'un fan-club n'hésitant pas à mettre les avantages de l'un
en face des inconvénient de l'autre, au travers de discussions longues et animées.
Historique des versions :
7.2~1 (Vous <vous@vous>), 20/11/09 00:00
Première version
|
Ne paniquez pas s'il faut attendre une petite seconde pour que ça s'affiche, il y a une grosse décompression XZ qui doit être faite (remarquez tout de même que chez moi, 38Mio sont compressés en 4Mio par XZ, comme quoi ce machin fait des miracles !)
Maintenant, vous pouvez l'installer sans aucun problème :
1 | sudo setup -R /tmp/setup add vim~7.2~1.i686.lpk |
Encore une fois, le sudo est nécessaire à cause de libarchive qui fait des chown
. Si vous avez ajouté la question, elle vous est posée. Appuyez simplement sur ENTER pour continuer.
L'installation est assez rapide (malgré le fait que le paquet est décompressé deux fois, d'où le délai avant la résolution des dépendances, oui, ce n'est pas optimisé
). L'important, c'est que ça marche, et ça marche bien
.
Vous pouvez liste le contenu de /tmp/setup, et voir qu'il contient usr/bin/vim, et plein d'autres choses.
Félicitations, vous avez créé votre paquet
! Pour l'inclure dans Logram, postez sur le forum votre .src.lpk (on n'a pas besoin des paquets compilés, on les recompilera nous-même). Si votre paquet passe tous les tests nécessaires, et éventuellement après quelques modifications, vous serez peut-être parmis les premiers à voir votre paquet dans Logram. Pour maximiser vos chances, il existe une page Normes et conventions pour la création de paquets Logram.
Ce n'était pas si difficile ? Si ?