You are here -> Home » Wiki » Créer un paquet Setup

Créer un paquet Setup

Other languages : fr

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.

Introduction

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

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 :) .

Squelette du fichier metadata.xml

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.

Peuplement des métadonnées

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 :

  • Titre : titre affiché dans le gestionnaire de paquet graphique, comme par exemple «Navigateur web FireFox». Si votre programme est graphique et qu'il comporte une entrée dans le menu, prenez ce titre (de plus, ces entrées sont traduites et il est simple de récupérer toutes les traductions : ouvrez /usr/share/applications/votre-application.desktop et prenez tous les "Name[langue]="). Ici, ce sera «Éditeur de texte Vim»
  • Description courte : simple ligne affichée en italique sous le titre, ou dans la console quand on utilise "setup search". Elle doit commencer par une majuscule, ne pas citer le nom du paquet, et être la plus descriptive possible. Par exemple : «Navigateur web graphique complet avec support d'extensions». Ici, ce sera «Éditeur de texte console riche en fonctionnalités».
  • Description longue : plusieurs lignes, très détaillée. Plus vous savez en mettre, mieux c'est. Vous pouvez utiliser le formatage Markdown dedans. Quand vous cliquez sur l'onglet «Téléchargements» de ce site web, puis sur un paquet, c'est la description qui est affichée.

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 !

Téléchargement

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.

La compilation

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 ? o_O 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

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 :

  • Vous ne savez absolument pas décider pour l'utilisateur
  • Vous avez un message très important à faire passer (comme le fait que vous avez cassé un autre paquet sans pouvoir faire autrement)
  • Votre paquet est d'une monstruosité jamais atteinte à configurer, et vous créez un joli assistant de configuration à base de questions. Les utilisateurs aiment ça (si vous avez déjà configuré Postfix, vous savez de quoi je parle)

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 :

  • preinst : lancé juste avant l'installation. Aucun fichier du paquet n'a déjà été copié dans le système de fichier
  • postinst : lancé juste après l'installation, une fois les fichiers copiés et le paquet configuré et enregistré dans la base de donnée Setup
  • prerm : lancé juste avant la suppression, avant que le moindre fichier ne soit supprimé
  • postrm : lancé juste après la suppression, une fois la base de donnée mise à jour et les fichiers supprimés
  • preupd : lancé juste avant la mise à jour, depuis le paquet le plus récent. Vous pouvez vous servir de ce script pour mettre à jour une configuration, etc.
  • postupd : lancé juste après la mise à jour, à nouveau depuis le paquet le plus récent (l'ancien n'aura jamais son preupd ou postupd lancé)

Ces scripts peuvent utiliser des templates, et voici les variables disponibles :

  • instroot : racine d'installation (/, ou /tmp/setup, ou /my/chroot, etc)
  • varroot : racine des données Setup, qui contient /var/cache/lgrpkg. Vous n'en n'avez pas besoin
  • confroot : racine de la configuration Setup. Ignorez également cette fonction (à vrai dire elles ne servent que pour le paquet setup lui-même)
  • package : nom du paquet installé, supprimé ou mis à jour
  • version : sa version
  • arch : son architecture
  • oldpackage : en cas de mise à jour, nom de l'ancien paquet (normalement la même chose que package, mais tout n'est pas certain si un provide s'est mis sur la route)
  • oldversion : version du paquet avant mise à jour
  • oldarch : architecture du paquet avant mise à jour (all vers i686, x86_64 vers all, etc)

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.

Compilation et création du paquet

Voilà, notre metadata.xml est complet :D ! 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 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 :D ! 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 ?