Création de paquets Debian

Javier Fernández Sanguino-Peña <jfs@computer.org>

15 avril 1999

Le copyright de cet article est partagé entre son auteur et Open Resources. Cet article est distribué sous licence OR Magazine License. On peut lire cette licence ici  : http ://www.openresources.com/magazine/license/index.html.

Cet article a été produit pour La Espiral et sa version la plus récente est disponible à  : http ://www.laespiral.org.

Adaptation française par Alain Labarthe <a.labarthe@free.fr>. L'auteur de cet article n'est pas responsable de l'oeuvre traduite.

Résumé

Le paquet est le composant fondamental d'une distribution, mais à l'intérieur de celui-ci il y a beaucoup plus de ce que l'on peut imaginer. Dans cet article nous analyserons la distribution Debian GNU/Linux depuis cette perspective.

1. Introduction

Il est important de bien connaître la structure des paquets que les distributions utilisent, parce qu'ainsi seulement nous serons capable de résoudre les problèmes qui pourraient apparaître lors d'une utilisation quotidienne (fichiers corrompus, installation de programmes non proposés par la distribution, etc.).

Bien que les distributions possèdent un grand nombre de programmes (Debian GNU/Linux, par exemple, en a plus de 2500) il est parfois intéressant d'installer des programmes qui ne font pas partie de la distribution elle même, ou qui n'y ont pas été incorporés ; ceci comprend les paquets de programmes que l'on trouve sur Internet ou les paquets commerciaux, de même que ceux créés par l'utilisateur lui-même ; afin de pouvoir le faire, il faudra pouvoir créer ses propres paquets si nous ne voulons pas entrer en conflit avec le système de gestion de paquets. Évidemment si nous voulons contribuer aux différentes distributions avec des programmes, il faudra que ceux-ci soient correctement empaquetés.

Il peut être aussi utile de re-compiler des paquets nouveaux avec des librairies anciennes, c'est le cas par exemple des paquets Hamm de Debian 2.0 compilés pour libc6, que l'on voudrait installer sur un système Bo (Debian 1.3.1), qui lui se sert de libc5, sans rien faire d'autre que de re-compiler le code source et installer le paquet (si la problématique de dépendance était seulement celle là ; la signification de dépendances sera abordé plus tard).

Dans cet article nous verrons en détail le système de paquets de Debian GNU/Linux du point de vue de la forme du paquet (.deb) avec la perspective de préparer le lecteur intéressé par l'introduction faite ci-dessus.

Il faudra tenir compte du fait que le système de paquets est bien plus vaste que le seul format de fichiers qu'il y a derrière la philosophie "comment faire les choses", qui, dans le cas de Debian est une Politique bien définie.

La raison de détailler le système de paquetage Debian est multiple : d'un côté le système de paquets de Debian GNU/Linux est très versatile, avec quelques caractéristiques qui donne une uniformité à la distribution quant à la localisation de programmes et documentations, de même le système Debian GNU/Linux est le plus ouvert en respect à l'incorporation de mainteneurs (en anglais, maintainers) à celui-ci, à la différence d'autres distributions commerciales dans lesquelles cette contribution est limitée. Et finalement, parce que parmi beaucoup d'autres formats de paquets, Debian offre plus que la majorité, comme on pourra le lire dans cet article.

2. Système de paquets et format de paquets.

En premier lieu, il faut faire la différence entre ce qui est un système de paquets et le format des paquets pour qu'il n'y ait pas de confusion possible. Le système de paquets est un ensemble de règles propres à une distribution qui indiquent où se situent les programmes, comment s'installent les démons dans le système, quels fichiers de configuration génériques sont accessibles par les programmes, ainsi que les diverses interactions entre les paquets, en indiquant, par exemple, si deux programmes ont des incompatibilités et ne peuvent coexister dans le même système (conflits) ou, si avant d'installer un programme, il est nécessaire d'en installer un autre (dépendances).

Le format des paquets, par exemple les fichiers .deb dans le cas de Debian ou .rpm dans celui de Red Hat, s'identifient normalement au système de paquets. Mais, si bien sûr le système conditionne la manière dont seront créés et distribués les paquets (les règles à suivre pour s'installer), il est possible d'installer des paquets d'autres distributions dans notre système, nous pourrons même trouver des outils pour le faire. Par exemple alien est un programme (disponible en paquet Debian) qui, une fois installé, permet d'introduire des paquets qui n'appartiennent pas à la distribution Debian (comme rpms) puisqu'il "connaît" divers formats et est capable de les "traduire" pour notre distribution. Le format, même lié au système, n'est pas beaucoup plus que cela. Les différences entre un .deb et un .rpm sont pratiquement les mêmes qu'entre un .zip et un .arj.

N'empêche qu'il y a un risque lorsque l'on mélange les paquets de diverses distributions, puisque leur politique, le système de paquets, est différente. Pour l'illustrer avec un exemple : Debian et Red Hat ont une politique différente pour ce qui est de la localisation des programmes qu'exécutent les démons de démarrage, même si les deux suivent le modèle System V (Slackware suit elle le modèle BSD et les placent donc ailleurs), Red Hat place les démons dans l'archive /etc/rc.d/init.d avec les liens symboliques dans /etc/rc.d/rcX.d alors que Debian le fait dans /etc/init.d avec les liens symboliques dans /etc/rcX.d ; et ce n'est pas la seule différence. Il est évident que si nous installons un paquet d'une distribution qui fournit des démons devant s'exécuter dans le démarrage d'une autre, il est possible que cela ne fonctionnera pas.

Cela fait un moment déjà qu'un débat existe sur une possible standardisation des systèmes de paquets, qui peut être se fera comme s'est déjà faite l'homogéinisation de la structure des répertoires au travers du Linux Filesystem Structure. Dans le futur, il y aura donc, peut-être, une meilleure compatibilité entre les distributions.

3. Construction de notre premier paquet.

Nous allons voir, dans ce qui suit, les démarches et les outils nécessaires à la création d'un paquet dans un système Debian GNU/Linux. Nous allons choisir le paquet hello puisque c'est celui qu'offre Debian pour montrer le système de construction de paquets, ce n'est rien de plus que la version GNU de hello, un simple programme bien connu des programmeurs qui écrit "Hello world" sur la sortie standard.

Premièrement nous récupérons les trois fichiers du paquet Debian hello, c'est à dire  : hello_x.x.orig.tar.gz, hello_x.x-xx.diff.gz y hello_x.x-xx.dsc (où x est le numéro de version). Tous ces paquets peuvent se retrouver dans une distribution de Debian à  : stable/main/source/misc.

Le premier d'entre eux est le code source original, le second est un fichier indiquant les différences entre l'arborescence du code source (le répertoire où se trouve le code source) et l'arborescence source Debian, et le troisième est une brève description du paquet, qui comme nous le verrons plus tard est signé avec PGP (Pretty Good Privacy, voir plus bas) par la personne qui l'a empaqueté et a donc une valeur de contrôle (fonction hash MD5) des deux fichiers antérieurs afin de pouvoir détecter s'ils ont été modifiés par quelqu'un d'étranger au mainteneur (utile pour détecter les "chevaux de Troie").

Pour commencer nous exécuterons, avec les trois fichiers dans un même répertoire, dpkg-source -x hello_x.x-xxx.dsc, qui fabriquera un untar du fichier initial (générant la structure de répertoires de l'arborescence source original) et, par la suite, nous appliquerons le programme patch pour incorporer les modifications qui ont été faites sur le paquet dans Debian. A l'intérieur du répertoire généré, qui sera de la forme nom_du_paquet-version, nous exécuterons dpkg-buildpackage , qui, si tout va bien laissera dans le répertoire antérieur, un fichier hello_xxx.deb qui sera le paquet prêt à être installer.

Le processus de construction du paquet est réalisé par la commande dpkg-buildpackage qui exécute dans l'ordre : dpkg-source, debian/rules (avec les méthodes clean, build et binary), dpkg-shlibdeps, dpkg-gencontrol, dpkg-genchanges, et PGP; plus avant nous en verrons la signification bien que l'on puisse voir la démarche suivie à l'aide de la figure1.

Fig. 1

Fig. 1 : Démarches suivies pour construire un paquet

Il faut être root (super-utilisateur) pour faire tout cela étant donné qu'une série des opérations ont besoin des privilèges de cet utilisateur, comme le changement de propriétaire des fichiers (qui deviennent propriété du super-utilisateur et de son groupe en règle générale). Ce qui peut devenir un problème lorsqu'un utilisateur veut générer un paquet et qu'il n'a pas ces droits. Il existe pour y remédier le programme fakeroot qui fait croire au système que l'utilisateur est le super-utilisateur, ceci ne suppose aucun problème de sécurité puisqu'en réalité il ne s'agit que d'une tromperie pour l'utilisateur et ses applications, qui de toute façon, n'acquièrent aucun des droits du super-utilisateur).

Debian se sert de PGP (bien que cela changera rapidement vers GPG) pour certifier de l'authenticité et de l'intégrité des paquets, étant donné que le système d'insertions de paquets faits par les mainteneurs de Debian est semi-automatique (via divers serveurs ftp anonymes et les machines Debian) et, il est aussi possible que des personnes étrangères à Debian (ou d'autres développeurs de Debian) envoient des changements, par exemple pour arranger certaines erreurs critiques. Il est donc important que ces paquets soient signés par celui qui a fait ces modifications (dpkg-buildpackage appelle PGP lorsqu'il termine) et les protéger contre des modifications après que le mainteneur ait donné sa version. Ainsi, le fichier .dsc qui contient une description du paquet et une "trace" des fichiers vus antérieurement, est signé au moyen d'une fonction "hash" très connue  : MD5. Le fichier .changes qui contient les modifications effectuées sur cette version devra être signé s'il existe.

4. Les outils dpkg-xxxxx.

Comme nous avons vu lors de l'exemple précédent, Debian possède une série d'outils dont il faudra se servir. Les voici  :

5. Le répertoire debian.

Debian contrôle les caractéristiques et l'évolution du paquet au travers d'une série de fichiers. Comme la description du paquet, les dépendances avec d'autres paquets, les bibliothèques installées, les changements produits dans le paquet, règles pour construire et compiler les binaires du paquet, etc.

Ceci s'obtient avec le répertoire debian/ , qui en règle générale es le seul rajouté par Debian au code source original d'un paquet. Dans ce répertoire se trouve un ensemble de fichiers (voir la figure 1) qui doivent suivre les règles définies par la charte Debian dans laquelle est expliqué le contenu de ceux-ci ainsi que leur format.

Dans le fichier control les caractéristiques du paquet sont décrites , il s'agit simplement de ce qui s'observe lorsqu'on exécute dpkg --status sur un paquet déjà installé ou dpkg --info sur un qui n'est pas installé (sur le fichier .deb). Les champs sont  :

Le fichier rules contient lui les règles pour construire le paquet et qui seront celles appelées par les programmes de construction de paquets. Il s'agit d'un "Makefile", un fichier usuel pour ceux qui sont habitués à compiler des programmes dans un environnement UNIX. Dans ce fichier nous trouverons une série de règles et d'objectifs à accomplir. Dans ces objectifs nous pouvons en souligner certains importants :

Le fichier changelog documente les changements fait lors de la débianisation du programme, ces changements se réfèrent aux particularités de Debian et non pas à ceux qui peuvent se faire dans le code source ; à la racine il y aura généralement un fichier changelog qui documentera les changements apportés au programme. Il suit un format spécifique, bien qu'on puisse utiliser dch ou debchange pour le modifier. Il faut se rappeler qu'en général la personne qui maintient le paquet (et qui le construit) est distincte de l'auteur du programme lui-même. Bien que Debian ait des paquets faits expressément pour son système et élaborés par ses mainteneurs, ce n'est pas la règle générale, le contrat social de Debian a pour but de rendre disponible les programmes de libre distribution sur un système stable et homogène.

Dans conffiles sont listés les fichiers de configuration qui installent le paquet. Ceci est nécessaire pour que Debian ne ré-écrive pas les fichiers de configuration que l'utilisateur auraient modifiés. Au moment d'installer un programme, s'il y a des fichiers de configuration, Debian indiquera qu'ils sont différents et donnera l'opportunité d'installer le nouveau ou laisser l'ancien, solutionnant alors le problème que pourrait poser une installation d'une nouvelle version d'un paquet qui détruirait le travail réalisé lors de la configuration.

Les scripts preinst, postinst, prerm et postrm sont des scripts exécutés par l'installateur de paquets lors des diverses phases de l'installation, respectivement avant (pre) et après (post) d'être installés (dpkg--install) ou retirés (dpkg--remove) du système.

Enfin, le fichier README.debian contient les détails ou les différences entre le paquet original et la version de Debian. Ce fichier se trouvera, une fois installé le paquet, dans /usr/doc/nom_du_paquet, avec toute la documentation, le copyright et le fichier de changement (de la version originale et de celle de Debian).

Il existe d'autres fichiers : menu, init.d, crontab... qui peuvent être utilisés pour intégrer encore plus le paquet dans le système.

6. Quelques outils utiles.

Il y a certains outils qui ne font pas partie des "standards" de Debian, mais qui peuvent être utiles à la création de paquets, vu qu'ils simplifient certaines tâches courantes à réaliser lors de la construction d'un paquet.

L'un d'entre eux est debmake, bien qu'il soit désuet et peu recommandé, qui contient un bon nombres d'utilitaires pour la création de paquets. Par exemple en exécutant debmake sur l'arborescence racine originale, il va se générer un répertoire debian ainsi que tous ses fichiers, prêts pour que l'utilisateur puisse les modifier convenablement.

Beaucoup de ces utilitaires de debmake ont été retirés, puisque certainement cet outil disparaîtra, mais ils ont été incorporés, ainsi que d'autres, au paquet devscripts qui contient  : debchange, debclean, release, build, depkg, debi, debc, dch, uupdate, uscan, ainsi que deblint, un outil très utile pour vérifier que le paquet remplit strictement toutes les conditions de la charte Debian. L'usage de ces outils est très simple, par exemple  : pour incorporer les changements au fichier debian/changelog on peut exécuter dch texte_du_changement, et si en plus on veut que ce soit une nouvelle version dch -n texte_du_changement, le programme ajoutera automatiquement l'en-tête et le pied de lettre suivant le format définit (indiquant la date, l'heure et le développeur).

Le paquet debhelper contient un bon nombre d'outils utilisables pour construire, de manière très simple, le fichier debian/rules, en automatisant les tâches habituelles  : installer les fichiers, les comprimer, arranger les permissions, intégrer le paquet avec le système de menu Debian, etc. Tous les utilitaires fournis dans ce paquet commencent par dh_, nous avons ainsi  : dh_installdocs, dh_installexamples, dh_checkroot...

Et n'oublions pas de mentionner cvs-buildpackage qui permet lui de créer des paquets à partir d'un CVS ("Concurrent Versions System", un système de contrôle de versions très souple et employé couramment).

7. Le format .deb.

les fichiers .deb générés par le processus antérieurement décrit ne sont rien de plus qu'une série de fichiers encaténés par le programme ar, au total de trois  : data.tar.gz, control.tar.gz et debian-binary. Les deux premiers sont, d'un côté un tar.gz (data.tar.gz) avec l'arborescence de répertoires qui se créé dans et qui se désempaquète directement à la racine du disque dur au moment d'installer, et de l'autre côté le répertoire DEBIAN (control.tar.gz) qui contient beaucoup des fichiers vus dans debian/, bien que certains seront modifiés.

Il est possible d'extraire séparément certains fichiers, le tar.gz avec la commande dpkg -x fichier.deb répertoire_cible et le DEBIAN avec la commande dpkg -c fichier.deb répertoire_cible. En réalité cela peut aussi être fait avec ar -x fichier.deb, ce qui rend possible d'installer un paquet Debian et ce même sur un système qui ne connaît pas de distribution, en ayant simplement l'utilitaire ar installé. On peut aussi construire un fichier .deb (c'est à dire faire le processus inverse) avec le programme ar ou avec dpkg --build répertoire qui créera le fichier répertoire.deb.

8. Différences avec d'autres systèmes.

Nous n'avons pas parlé de la charte Debian par rapport à l'installation des paquets, qui définit depuis où doivent se situer les fichiers jusqu'à quelles modifications peuvent se faire sur un paquet ou un système, ou bien grâce à quelles méthode cela peut se faire (en utilisant par exemple le système menu pour inclure des applications dans les menus de tous les gestionnaires de fenêtres X). Nous recommandons au lecteur de consulter l'appendice "plus d'informations" pour rentrer dans les détails, il n'empêche qu'il est intéressant de commenter quelques unes des différences qui font que Debian soit supérieur à d'autres systèmes :

Aussi, un travail se fait sur l'éventuelle utilisation de linuxconf. Diverses sélections préfabriquées de paquets sont déterminées afin que l'utilisateur puisse choisir parmi un éventail générique (développement ouaibe, jeux, développement de logiciels...) à l'installation et obtenir une sélection de paquets conformes, n'ayant pas ainsi à naviguer parmi les 2500 paquets disponibles avec la Debian 2.1.

Avec ceci et plus, Debian démontre que son système de paquets est robuste et fiable, plus encore que les autres distributions. Conjugué à la qualité et la variété des logiciels qui accompagnent la distribution, le fait d'être un système ouvert à ceux qui désirent y collaborer (peut-être le lecteur, après avoir lu cet article, voudra en faire partie) le place comme un système à prendre en considération dans le monde GNU/Linux.

9. Appendices

Construction du paquet hello

templar@root :/tmp/hello-1.3$ dpkg-buildpackage
dpkg-buildpackage : source package is hello
dpkg-buildpackage : source version is 1.3-13
dpkg-buildpackage : build architecture is i386
debian/rules clean
test -f hello.c -a -f debian/rules
rm -f build make -i distclean || make -f Makefile.in distclean
make[1] : Entering directory `/tmp/hello-1.3'
rm -f hello *.o core test.out hello.dvi hello.?? hello.??s rm -f
Makefile config.status
make[1] : Leaving directory `/tmp/hello-1.3'
rm -rf *~  debian/*~ debian/files*
dpkg-source -b hello-1.3
dpkg-source : building hello using existing hello_1.3.orig.tar.gz
dpkg-source : building hello in hello_1.3-13.diff.gz
dpkg-source : building hello using existing hello_1.3.orig.tar.gz
dpkg-source : building hello in hello_1.3-13.diff.gz
dpkg-source : building hello in hello_1.3-13.dsc
debian/rules build
test -f hello.c -a -f debian/rules
./configure --prefix=/usr checking for gcc (...)
make[1] : Entering directory `/tmp/hello-1.3' (...)
gcc -o hello hello.o version.o getopt.o getopt1.o
make[1] : Leaving directory `/tmp/hello-1.3'
touch build
debian/rules binary 
test -f hello.c -a -f debian/rules 
test root ="`whoami`" 
test -f hello.c -a -f debian/rules
test -f hello.c -a -f debian/rules 
rm -rf  install -d  /DEBIAN
install -d /usr/doc/hello 
cp debian/{postinst,prerm} /DEBIAN/.  
chmod +x /DEBIAN/{postinst,prerm} 
make CFLAGS=-O2 LDFLAGS=-s INSTALL_PROGRAM='install -c -s' \
        prefix=/usr install 
make[1] : Entering directory `/tmp/hello-1.3' ./mkinstalldirs /usr/bin
/usr/info install -c -s hello /usr/bin/hello
/usr/bin/install -c -m 644 ./hello.info /usr/info/hello.info
make[1] : Leaving directory `/tmp/hello-1.3' g
zip -9v /usr/info/* 
cp debian/copyright /usr/doc/hello/.
cp debian/changelog /usr/doc/hello/changelog.Debian 
cp ChangeLog
/usr/doc/hello/changelog 
gzip -9v /usr/doc/hello/changelog{,.Debian} 
dpkg-shlibdeps hello
dpkg-gencontrol chown -R root.root  
chmod -R g-ws 
dpkg --build  ..  d
pkg-deb : building package `hello' in `../hello_1.3-13_i386.deb'.  
signfile hello_1.3-13.dsc 
Pretty Good Privacy(tm) 2.6.2i - Public-key encryption for the masses.  (c)
1990-1995 Philip Zimmermann, Phil's Pretty Good Software. 7 May 95
(...) 
 dpkg-genchanges 
dpkg-genchanges : not including original source code in upload
signfile hello_1.3-13_i386.changes 
Pretty Good Privacy(tm) 2.6.2i - Public-key encryption for the masses.  
(c) 1990-1995 Philip Zimmermann, Phil's Pretty Good Software. 7 May 95 (...)
dpkg-buildpackage : diff-only upload (original source NOT included) ***

Appendice  : Le nom des paquets Debian

Avec Debian, les noms des paquets suivent une structure standard qui est  : nom+version+architecture.deb. L'architecture pourra être i386 (PCs avec processeur 386 ou supérieur), alpha, sparc ou m68k, mais des efforts sont faits pour porter Debian sur d'autres architectures comme PowerPC ou ARM. Le numéro de version est du type  :[époque]version-upstream[-revision-debian]

Suivre ce schéma est important parce que Debian s'en sert pour résoudre les conflits et les dépendances, qui dépendent souvent d'une version déterminée. Seulement grâce à un schéma fixe dpkg pourra savoir si une version est nouvelle ou plus ancienne qu'une autre.

Appendice  : Fichier rules du paquet hello (traduit)

#!/usr/bin/make -f 
# Exemple de fichier debian-rules - pour GNU Hello (1.3)
# Copyright 1994,1995 pour Ian Jackson.  
# Je te donne la permission perpétuelle et illimitée pour copier, modifier et
# re-licencer ce fichier, à la condition de ne pas effacer mon nom de ce fichier
# (J'assure mon droit moral à la paternité à l'aide du Copyright, Design et brevets
# de 1988) 
# Ce fichier peut avoir besoin de modifications étendues.
# Il y avait des objectifs appelés 'source' et 'diff' dans ce fichier et 
# beaucoup de paquets qui ont eu 'changes' et 'dist'. Ces fonctions ont été 
# réunies dans dpkg-source, dpkg-genchanges et dpkg-buildpackage de façon 
# indépendante au paquet, ces objectifs sont alors obsolètes.

package=hello
 
build :
        $(checkdir)
        ./configure --prefix=/usr
        $(MAKE) CFLAGS=-O2 LDFLAGS=
        touch build clean :
        $(checkdir)
        -rm -f build
        -$(MAKE) -i distclean || $(MAKE) -f Makefile.in distclean
        -rm -rf *~  debian/*~ debian/files*
 
binary-indep : checkroot build
        $(checkdir) 
# No hay ningun fichero independiente de arquitectura generado por
# este paquete.  Si lo hubiera se haría aquí.
 
binary-arch : checkroot build
        $(checkdir)
        -rm -rf 
        install -d  /DEBIAN
        install -d /usr/doc/$(package)
        cp debian/{postinst,prerm} /DEBIAN/.
        chmod +x /DEBIAN/{postinst,prerm}
        $(MAKE) CFLAGS=-O2 LDFLAGS=-s INSTALL_PROGRAM='install -c -s' \
                prefix=/usr install
        gzip -9v /usr/info/*
        cp debian/copyright /usr/doc/$(package)/.
        cp debian/changelog
/usr/doc/$(package)/changelog.Debian
        cp ChangeLog /usr/doc/$(package)/changelog
        gzip -9v /usr/doc/$(package)/changelog{,.Debian}
        dpkg-shlibdeps hello
        dpkg-gencontrol
        chown -R root.root 
        chmod -R g-ws 
        dpkg --build  ..
 
define checkdir
        test -f $(package).c -a -f debian/rules endef
 
# Esto de aquí abajo es bastante genérico
 
binary : binary-indep binary-arch
 
source diff :
        @echo >&2 'source and diff are obsolete - use dpkg-source -b';
false
 
checkroot :
        $(checkdir)
        test root = "`whoami`"
 
.PHONY : binary binary-arch binary-indep clean checkroot

Appendice  : Plus d'information

On peut trouver plus d'informations sur le système de paquets Debian sur le site officiel du projet, http ://www.debian.org (le miroir français est http ://www.fr.debian.org) où il y a une série de paquets qui fournissent de la documentation détaillée sur le fonctionnement du système de paquets Debian, et qui sont  : debian-policy (la charte à suivre pour créer des paquets Debian), et developers-reference (information pour ceux qui veulent devenir des développeurs officiels de Debian), bien que l'on puisse aussi trouver beaucoup d'informations dans un système Debian, installées dans /usr/doc/dpkg et /usr/doc/debian. Les listes de diffusion sont aussi une source importante d'information, on les trouve indexées sur le site de Debian ; en général, la liste debian-devel@lists.debian.org traite de tous les sujets d'importance pour les développeurs Debian, il existe aussi une liste pour les utilisateurs courants anglophones (debian-user) ainsi que pour ceux espagnols (debian-user-spanish). (Ndt  : et pour les francophones, il s'agit de la fameuse "debian-french")

Dans les copies de la distribution Debian on peut aussi trouver plus d'information dans le sous-répertoire projects.

A propos de cet article

La version originale de cet article est disponible à http ://www.openresources.com/es/magazine/making-debian-packages/, dans la revue Open Resources.