- Debian packaging pour EOLE 2.4
Debian packaging pour EOLE 2.4¶
Introduction¶
Nous ne décrirons pas ici comment créer un paquet debian, mais
quelques règles utiles lors de la création d’un paquet debian pour
EOLE.
La principale cible de cette documentation est le packaging pour Ubuntu Precise Pangolin.
Le nouveau système de build des paquets apporte plus de souplesse :
- Possibilité de builder des paquets pour des architectures autre que i386 et all
- Utilisation du système de build pour construire des paquets de correctif pour les versions stables (plus besoin de télécharger l’ancien paquet, appliquer un patch, incrémenter le numéro de version et compiler à la main)
- Choix de la politique de numérotation des paquets
debian/changelog¶
La grande nouveauté du système de build pour EOLE 2.4 est l’absence de fichier debian/changelog
dans la branche de packaging.
Ce dernier n’est créé et mis à jour que par le système de build lui-même et n’est jamais directement accessible aux développeurs/packageurs.
Numérotation des paquets¶
L’absence du debian/changelog
impose une chose pour le premier paquet construit :
- Le premier paquet généré ne peut pas connaître son numéro de version par
debian/changelog
, il faut donc utiliser les mécanismes de git-buildpackage et se reposer sur l’utilisation de tag pour déclarer les versionsupstream
Le moyen mnémotechnique pour s’en souvenir est de connaître la forme d’un numéro de paquet Debian:
<UPSTREAM VERSION>-<DEBIAN PACKAGE RELEASE>
- Toute modification du code nécessite une modification de la partie
<UPSTREAM VERSION>
; - Toute modification sur la branche de packaging qui n’implique aucun
merge
de la brancheupstream
(master
chez EOLE), modifie la partie<DEBIAN PACKAGE RELEASE>
.
En français on pourrait le décrire par: on publie la version <DEBIAN PACKAGE RELEASE>
du paquet debian de la version <UPSTREAM VERSION>
du logiciel.
debian/source/format¶
La valeur de ce paramètre découle des réponses à ces trois questions :
- Qui a la responsabilité de l’incrémentation du numéro de version ;
- Est-il permis que la branche dite
upstream
(chez EOLE, la branchemaster
) soit vide ; - Est-il possible qu’entre deux paquets debian, il y ait des modifications de fichiers en dehors du répertoire
debian/
sans nouveau tag de versionupstream
.
Il est interdit de modifier les sources dans le packaging¶
Cela s’applique, chez Debian, aux paquets de logiciels « externes ».
Le paquet Debian ne doit pas contenir de modification du code source (tout ce qui est en dehors du répertoire debian/
), sans qu’il y ait eu un nouveau numéro de version par les développeurs upstream
.
La seul possibilité pour adapter le code source à la distribution est de faire un patch et de le disposer dans le répertoire debian/patches/
.
Cas d’utilisation typique:
# Mise à jour upstream user:~/src/paquet (master)$ $EDITOR source_file.txt user:~/src/paquet (master)$ git add source_file.txt user:~/src/paquet (master)$ git commit -m "New source file" user:~/src/paquet (master)$ git tag -s -m "New release 1.6" release/1.6 user:~/src/paquet (master)$ git push origin master release/1.6 # Mise à jour du packaging user:~/src/paquet (master)$ git checkout dist/ubuntu/precise/master user:~/src/paquet (dist/ubuntu/precise/master)$ git merge -m "New upstream release" release/1.6 user:~/src/paquet (dist/ubuntu/precise/master)$ $EDITOR debian/control # Par exemple mise à jour des dépendences user:~/src/paquet (dist/ubuntu/precise/master)$ git add debian/conrol user:~/src/paquet (dist/ubuntu/precise/master)$ git commit -m "Update of dependencies" user:~/src/paquet (dist/ubuntu/precise/master)$ git tag -s -m "New build request for experimental" build/eole/eole-2.4/experimental user:~/src/paquet (dist/ubuntu/precise/master)$ git push origin build/eole/eole-2.4/experimental # Produit un paquet numéroté 1.6-1~1.gbpXXXX # TOUT EST OK, on sort un nouveau paquet. user:~/src/paquet (dist/ubuntu/precise/master)$ git tag -s -m "New build request for unstable" build/eole/eole-2.4/unstable user:~/src/paquet (dist/ubuntu/precise/master)$ git push origin build/eole/eole-2.4/unstable # Produit un paquet numéroté 1.6-1
Les builds successifs de paquet sans merge d’une nouvelle version upstream
1.6-2
pour le second build qui ne doit corriger que des erreurs de packaging ou avoir un patch pourupstream
dansdebian/patches
;1.6-3
pour le troisième build qui ne doit corriger que des erreurs de packaging ou avoir un patch pourupstream
dansdebian/patches
;
Ce comportement est celui part défaut avec la valeur de debian/source/format
:
3.0 (quilt)
Il est possible de modifier les sources dans le packaging ou il n’y a pas de sources upstream¶
Les modifications de code source sont autorisées sur la branche de packaging sans nouveau tag upstream.
La branche upstream peut être complètement vide (cas des métapaquets de dépendances *-pkg
)
Cas d’utilisation typique:
# Premier tag upstream pour créer le fichier debian/changelog automatiquement user:~/src/paquet (master)$ git tag -s -m "First release 1.0" release/1.0 # Premier paquet user:~/src/paquet (master)$ git checkout -b dist/ubuntu/precise/master user:~/src/paquet (dist/ubuntu/precise/master)$ $EDITOR debian/* # Création du packaging user:~/src/paquet (dist/ubuntu/precise/master)$ git add debian/conrol user:~/src/paquet (dist/ubuntu/precise/master)$ git commit -m "First package" user:~/src/paquet (dist/ubuntu/precise/master)$ git tag -s -m "New build request for experimental" build/eole/eole-2.4/experimental user:~/src/paquet (dist/ubuntu/precise/master)$ git push origin build/eole/eole-2.4/experimental # Produit un paquet numéroté 1.6-1~1.gbpXXXX # TOUT EST OK, on sort un nouveau paquet. user:~/src/paquet (dist/ubuntu/precise/master)$ git tag -s -m "New build request for unstable" build/eole/eole-2.4/unstable user:~/src/paquet (dist/ubuntu/precise/master)$ git push origin build/eole/eole-2.4/unstable # Produit un paquet numéroté 1.6-1 # Mise à jour upstream user:~/src/paquet (master)$ $EDITOR source_file.txt user:~/src/paquet (master)$ git add source_file.txt user:~/src/paquet (master)$ git commit -m "New source file" user:~/src/paquet (master)$ git push origin master # Mise à jour du packaging user:~/src/paquet (master)$ git checkout dist/ubuntu/precise/master user:~/src/paquet (dist/ubuntu/precise/master)$ git merge -m "New upstream release" master user:~/src/paquet (dist/ubuntu/precise/master)$ $EDITOR debian/control # Par exemple mise à jour des dépendences user:~/src/paquet (dist/ubuntu/precise/master)$ git add debian/conrol user:~/src/paquet (dist/ubuntu/precise/master)$ git commit -m "Update of dependencies" user:~/src/paquet (dist/ubuntu/precise/master)$ git tag -s -m "New build request for experimental" build/eole/eole-2.4/experimental user:~/src/paquet (dist/ubuntu/precise/master)$ git push origin build/eole/eole-2.4/experimental # Produit un paquet numéroté 1.6-2~1.gbpXXXX # TOUT EST OK, on sort un nouveau paquet. user:~/src/paquet (dist/ubuntu/precise/master)$ git tag -s -m "New build request for unstable" build/eole/eole-2.4/unstable user:~/src/paquet (dist/ubuntu/precise/master)$ git push origin build/eole/eole-2.4/unstable # Produit un paquet numéroté 1.6-2
Ce comportement est possible avec la valeur de debian/source/format
:
3.0 (native)
debian/gbp.conf¶
Si ce n’est pas déjà fait, il faut créer le fichier de configuration de git-buildpackage afin de déterminer le format des tags de version debian:
[DEFAULT] debian-tag = debian/eole/2.4/%(version)s
Cela évite qu’une même version upstream compilée pour plusieurs distributions se marche sur les pieds.
debian/control¶
Source: <package> Section: <(admin|web|metapackages|...)> Priority: optional Maintainer: Équipe Eole <eole@ac-dijon.fr> Build-Depends: debhelper (>= 9) Standards-Version: 3.9.3 Homepage: http://eole.orion.education.fr/diff/ Vcs-Git: http://dev-eole.ac-dijon.fr/git/<package> Vcs-Browser: http://dev-eole.ac-dijon.fr/projects/<package>/repository Package: <package> Architecture: all Depends: ${misc:Depends} Description: <MAX 72 CHARS> <DESCRIPTION> . <PARAGRAPHE SEPARATED BY DOT> Package: <package>-pkg Section: metapackages Architecture: all Depends: <A PACKAGE>, <ANOTHER PACKAGE>, ${misc:Depends} Description: <MAX 72 CHARS> <DESCRIPTION> . <PARAGRAPHE SEPARATED BY DOT> Package: <package>-doc Architecture: all Description: <MAX 72 CHARS> <DESCRIPTION> . <PARAGRAPHE SEPARATED BY DOT> Package: <package>-tests Architecture: all Depends: <package> Description: <MAX 72 CHARS> <DESCRIPTION> . <PARAGRAPHE SEPARATED BY DOT>
L’attribut Section défini pour le paquet source est utilisé pour tous les paquets binaires ne définissant pas cet attribut.
Il est ainsi possible de spécifier qu’un paquet binaire est un méta-paquet (utilisé uniquement pour ces dépendances) en définissant Section: metapackages
comme pour <package>-pkg
dans l’exemple ci-dessus.
Paquets sources et binaires python¶
Il faut ajouter :
Build-Depends
du paquet source:python-all
pour les modules pure pythonpython-all-dev
pour les modules nécessitant une compilation C.
Depends
du/des paquet(s) binaire(s):${python:Depends}
debian/rules¶
Pour tous¶
#!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. # This file was originally written by Joey Hess and Craig Small. # As a special exception, when this file is copied by dh-make into a # dh-make output file, you may use that output file without restriction. # This special exception was added by Craig Small in version 0.37 of dh-make. # Uncomment this to turn on verbose mode. # export DH_VERBOSE=1 # export DH_OPTIONS=-v %: dh $@
Pour paquet python¶
#!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. # This file was originally written by Joey Hess and Craig Small. # As a special exception, when this file is copied by dh-make into a # dh-make output file, you may use that output file without restriction. # This special exception was added by Craig Small in version 0.37 of dh-make. # Uncomment this to turn on verbose mode. # export DH_VERBOSE=1 # export DH_OPTIONS=-v %: dh $@ --with python2
Outrepasser le comportement par défaut des debhelpers¶
L’utilisation de la cible implicite %
dans le fichier makefile debian/rules
ne permet pas de prendre en compte certains cas spécifiques comme passer des options aux commandes dh_*
.
Pour outrepasser le comportement par défaut, il faut définir en plus des cibles d’écrasement :
override_dh_<COMMAND>: dh_<COMMAND> --opt1 --opt2 .PHONY: dh_<COMMAND>
Cela permet, par exemple, de nommer un script d’init installé automatiquement différemment du paquet qui le fourni, comme pour zephir-client (voir zephir-client:source:debian/rules?rev=dist/ubuntu/lucid/master#L19)
Plus d’informations sont disponibles dans la page de manuel de dh.
debian/compat¶
9
debian/copyright¶
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: <package Source: <UPSTREAM URL> Files: * Copyright: <YEAR1>,<YEAR2>,<YEAR3> <UPSTREAM AUTHOR NAME> <UPSTREAM AUTHOR EMAIL> Copyright: <YEAR1>,<YEAR2>,<YEAR3> <UPSTREAM AUTHOR NAME> <UPSTREAM AUTHOR EMAIL> License: GPL-3+ Files: debian/* Copyright: <YEAR1>,<YEAR2>,<YEAR3> Équipe EOLE <eole@ac-dijon.fr> License: CeCILL-2 License: CeCILL-2 This software is governed by the CeCILL-2 license under French law and abiding by the rules of distribution of free software. You can use, modify and or redistribute the software under the terms of the CeCILL-2 license as circulated by CEA, CNRS and INRIA at the following URL "http://www.cecill.info";. . As a counterpart to the access to the source code and rights to copy, modify and redistribute granted by the license, users are provided only with a limited warranty and the software's author, the holder of the economic rights, and the successive licensors have only limited liability. . In this respect, the user's attention is drawn to the risks associated with loading, using, modifying and/or developing or reproducing the software by the user in light of its specific status of free software, that may mean that it is complicated to manipulate, and that also therefore means that it is reserved for developers and experienced professionals having in-depth computer knowledge. Users are therefore encouraged to load and test the software's suitability as regards their requirements in conditions enabling the security of their systems and/or data to be ensured and, more generally, to use and operate it in the same conditions as regards security. . The fact that you are presently reading this means that you have had knowledge of the CeCILL-2 license and that you accept its terms. . On EOLE systems, the complete text of the CeCILL-2 License can be found in '/usr/share/common-licenses/CeCILL-2-en'.