Chapitre 1. Partir du bon pied

# Chapitre 1. Partir du bon pied

La réécriture de ce tutoriel avec des contenus à jour et des exemples pratiques supplémentaires est disponible sur Guide du responsable Debian. Veuillez utiliser ce nouveau tutoriel comme document principal.

Ce document essaie de décrire aux utilisateurs Debian moyens, et aux développeurs en devenir, la construction d'un paquet Debian. Il utilise un langage pas trop technique et est complété par des exemples, selon le vieux proverbe latin : « Longum iter est per praecepta, breve et efficax per exempla » (c'est long par la règle, court et efficace par l'exemple).

This document is made available for the Debian `Buster` release since this offers many translations. This document will be dropped in the following releases since contents are getting outdated. [1]

Une des choses qui font de Debian une distribution de si haut niveau est son système de paquets. Bien qu'il existe une grande quantité de logiciels au format Debian, vous devrez parfois installer un logiciel qui ne l'est pas. Vous pouvez vous demander comment faire vos propres paquets et peut-être pensez-vous que c'est une tâche très difficile. Eh bien, si vous êtes vraiment un débutant sous Linux, c'est dur, mais si vous étiez un débutant, vous ne seriez pas en train de lire ce document. :-) Vous devez en savoir un peu sur la programmation UNIX, mais vous n'avez certainement pas besoin d'être un magicien. [2]

Une chose est sûre, cependant : créer et maintenir correctement des paquets Debian prend beaucoup de temps. Ne vous faites pas d'illusion, pour que votre système fonctionne, les responsables doivent à la fois être techniquement compétents et consciencieux.

Si vous avez besoin d'aide sur l'empaquetage, veuillez consulter Section 1.4, « Où demander de l'aide ».

Les nouvelles versions de ce document devraient toujours être disponibles en ligne sur http://www.debian.org/doc/maint-guide/. La version de référence en anglais est disponible sur http://www.debian.org/doc/maint-guide/index.en.html et dans le paquet maint-guide. La traduction en français est également disponible dans le paquet maint-guide-fr.

Puisqu'il s'agit d'un tutoriel, il a été choisi d'expliquer de façon détaillée chaque étape pour certains sujets importants. Certains d'entre eux pourraient vous sembler hors sujet. Veuillez être patient. Certains cas particuliers ont été sautés, et seuls des liens ont été fournis pour conserver la simplicité de ce document.

## 1.1. Dynamique sociale de Debian

Voici quelques observations sur la dynamique sociale de Debian, en espérant qu'elles puissent vous préparer à interagir avec Debian :

- Nous sommes tous bénévoles.

  - Vous ne pouvez pas forcer les autres à faire quoi que ce soit.

  - Vous devriez être motivé à faire des choses vous-même.

- La coopération amicale est la force motrice.

  - Vos contributions ne devraient pas surmener les autres.

  - Vos contributions n'ont de sens que si les autres les apprécient.

- Debian n'est pas une école où vous attirez automatiquement l'attention des professeurs.

  - Vous devriez être capable d'apprendre la plupart des choses par vous-même.

  - L'attention des autres bénévoles est une ressource très rare.

- Debian s'améliore sans cesse.

  - On s'attend à ce que vous fassiez des paquets de haute qualité.

  - Vous devrez vous adapter vous-même aux modifications.

Plusieurs sortes de personnes ont rapport à Debian avec différent rôles :

- auteur amont : la personne qui a créé le programme à l'origine ;

- responsable amont : la personne qui maintient actuellement le programme ;

- responsable : la personne qui maintient le paquet Debian du programme ;

- parrain : une personne qui aide les responsables à envoyer des paquets dans l'archive officielle de paquets Debian (après en avoir vérifié le contenu) ;

- mentor : une personne qui aide les responsables débutants pour l'empaquetage, etc. ;

- développeur Debian (DD) : un membre du projet Debian avec tous les droits d'envoi vers l'archive officielle de paquets Debian ;

- responsable Debian (DM) : une personne avec des droits d'envoi limités vers l'archive officielle de paquets Debian.

Veuillez remarquer qu'il n'est pas possible de devenir développeur Debian (DD) en une nuit car il ne suffit pas de compétences techniques. Veuillez ne pas vous décourager. Si c'est utile à d'autres, vous pouvez toujours envoyer vos paquets, soit en tant que responsable à l’aide d’un parrain, soit comme un responsable Debian.

Remarquez qu'il n'est pas nécessaire de créer de nouveau paquet pour devenir un développeur Debian officiel. Contribuer aux paquets existants peut aussi fournir une voie pour devenir un développeur Debian. Beaucoup de paquets sont en attente de bons responsables (consultez Section 2.2, « Choix du programme »).

Puisque nous nous concentrons dans ce document exclusivement sur les aspects techniques de l'empaquetage, veuillez consulter les documents suivants pour apprendre comment Debian fonctionne et comment vous investir :

- Debian : 17 ans de logiciel libre, « do-ocracy » et démocratie (diapositives introductives en anglais)

- Comment pouvez-vous aider Debian ? (officiel)

- La FAQ Debian GNU/Linux, Chapitre 13 — Participer au projet Debian (semi-officiel)

- Wiki Debian, HelpDebian (supplémentaire)

- Site du nouveau membre Debian (officiel)

- FAQ de Debian Mentors (supplémentaire)

## 1.2. Programmes nécessaires au développement

Avant de commencer quoi que ce soit, vous devriez vous assurer d'avoir correctement installé certains paquets nécessaires au développement. Notez que la liste ne contient aucun paquet marqué `essential` ou `required` (essentiel ou requis) — nous supposons que ceux-ci sont déjà installés.

Les paquets suivants sont fournis dans l'installation standard de Debian, de sorte que vous les avez probablement déjà (ainsi que les paquets supplémentaires dont ils dépendent). Néanmoins, vous devriez le vérifier avec `aptitude show `paquet`` ou avec `dpkg -s `paquet``.

Le paquet le plus important à installer sur un système de développement est `build-essential`. Lors de son installation, il tirera avec lui d'autres paquets nécessaires à un environnement de compilation de base.

Pour certaines catégories de paquets, c'est tout ce dont vous aurez besoin. Cependant d'autres paquets, bien que non essentiels à toutes les constructions de paquet, sont utiles ou peuvent être nécessaires pour votre paquet :

- `autoconf`, `automake` et `autotools-dev` — beaucoup de nouveaux programmes utilisent des scripts de configuration et des fichiers `Makefile` prétraités à l'aide de programmes comme ceux-ci (consultez `info autoconf` et `info automake`). `autotools-dev` conserve les versions à jour de certains de ces fichiers automatiques et fournit une documentation sur la meilleure façon d'utiliser ces fichiers ;

- `debhelper` et `dh-make` — `dh-make` est nécessaire pour créer le squelette de notre exemple de paquet et il utilise certains outils de `debhelper` pour créer les paquets. Ils ne sont pas indispensables pour cela, mais sont fortement recommandés pour les nouveaux responsables. Ils rendent le processus complet bien plus facile à démarrer et à contrôler par la suite (consultez dh_make(8) et debhelper(1)) [3] ;

  Le nouveau paquet `debmake` peut être utilisé comme alternative au paquet standard `dh-make`. Il est plus puissant et fourni avec une documentation HTML incluant des exemples complets d’empaquetage dans `debmake-doc`.

- `devscripts` — ce paquet contient des scripts utiles pouvant aider les responsables, mais ils ne sont pas indispensables pour la création de paquets. Les paquets recommandés et suggérés par celui-ci valent le coup d'œil (consultez `/usr/share/doc/devscripts/README.gz`) ;

- `fakeroot` — cet utilitaire vous laisse prétendre être le superutilisateur, ce qui est nécessaire pour certaines parties du processus de construction (consultez fakeroot(1)) ;

- `file` — ce programme pratique peut déterminer la nature d'un fichier (consultez file(1)) ;

- `gfortran` — le compilateur Fortran 95 de GNU, nécessaire si votre programme est écrit en Fortran (consultez gfortran(1)) ;

- `git` — ce paquet fournit un système populaire de gestion de versions conçu pour manipuler de très gros projets rapidement et efficacement ; il est utilisé pour des projets libres de grande envergure, en particulier le noyau Linux (consultez git(1) et le manuel de Git, `/usr/share/doc/git-doc/index.html`).

- `gnupg` — un outil qui vous permet de signer numériquement les paquets. Cela est spécialement important si vous comptez les distribuer à d'autres personnes, et c'est certainement ce que vous ferez quand votre travail sera inclus dans la distribution Debian (consultez gpg(1)) ;

- `gpc` — le compilateur Pascal de GNU, nécessaire si votre programme est écrit en Pascal. Méritant d'être mentionné ici, `fp-compiler`, le compilateur Pascal libre, convient également (consultez gpc(1), ppc386(1)) ;

- `lintian` — c'est le vérificateur de paquet Debian, qui peut indiquer de nombreuses erreurs courantes après la construction du paquet et expliquer les erreurs trouvées (consultez lintian(1) et le manuel utilisateur de Lintian) ;

- `patch` — ce programme très utile prend un fichier contenant une liste de différences (produite par le programme diff) et l'applique au fichier original, produisant une version modifiée (consultez patch(1)) ;

- `patchutils` — ce paquet contient certains utilitaires pour travailler avec les correctifs comme les commandes lsdiff, interdiff et filterdiff ;

- `pbuilder` — ce paquet contient des programmes utilisés pour créer et maintenir un environnement « chrooté ». Construire un paquet Debian dans cet environnement permet de vérifier les dépendances correctes de construction et évite les bogues FTBFS (« Fails To Build From Source » pour les échecs de construction à partir du paquet source) (consultez pbuilder(8) et pdebuild(1)) ;

- `perl` — Perl est un des langages de script les plus utilisés sur les systèmes modernes similaires à UNIX, souvent qualifié de « tronçonneuse suisse d'UNIX » (consultez perl(1)) ;

- `python` — Python fait aussi partie des langages de script les plus utilisés sur le système Debian, combinant une remarquable puissance et une syntaxe très claire (consultez python(1)) ;

- `quilt` — ce paquet aide à gérer un grand nombre de correctifs en gardant une trace du rôle de chacun. Les correctifs peuvent être appliqués, enlevés, rafraîchis, etc. (consultez quilt(1) et `/usr/share/doc/quilt/quilt.pdf.gz`) ;

- `xutils-dev` — certains programmes, d'ordinaire ceux conçus pour X11, utilisent aussi ces programmes pour générer les fichiers `Makefile` à partir d'un ensemble de fonctions macros (consultez imake(1), xmkmf(1)) ;

Les courtes descriptions données ci-dessus ne servent qu’à vous présenter ce que fait chaque paquet. Avant de continuer, veuillez lire la documentation de chaque programme pertinent, y compris ceux installés par les dépendances du paquet comme make, au moins celle concernant l'utilisation standard. Cela peut vous sembler fastidieux maintenant, mais plus tard vous serez très content de l'avoir fait. Si vous avez des questions particulières par la suite, vous devriez relire les documents mentionnés ci-dessus.

## 1.3. Documentation nécessaire au développement

Les documents suivants sont très importants et doivent être lus en parallèle à ce document :

- `debian-policy` — la Charte Debian inclut des explications sur la structure et le contenu de l'archive Debian, plusieurs considérations sur l'architecture du système d'exploitation, la norme de hiérarchie des fichiers (« Filesystem Hierarchy Standard » ou FHS, qui définit où chaque fichier et répertoire doivent se trouver), etc. Le plus important pour vous est qu'elle décrive les critères que chaque paquet doit vérifier pour être inclus dans la distribution (consultez les copies locales de `/usr/share/doc/debian-policy/policy.pdf.gz` et `/usr/share/doc/debian-policy/fhs/fhs-3.0.pdf.gz`) ;

- `developers-reference` — la Référence du développeur Debian concerne tout ce qui n'est pas spécifique aux détails techniques de la création de paquets, comme la structure des archives, comment renommer, abandonner, adopter les paquets, faire une NMU (« Non-Maintainer Uploads » ou mise à jour indépendante), comment gérer les bogues, les meilleures pratiques d'empaquetage, où et quand faire des envois de paquets, etc. (consultez la copie locale de `/usr/share/doc/developers-reference-fr/developers-reference.pdf`) ;

Les documents suivants sont importants et doivent être lus en parallèle à ce document :

- Le tutoriel des Autotools fournit un très bon tutoriel pour le système de construction GNU connu sous le nom de GNU Autotools dont les composants les plus importants sont Autoconf, Automake, Libtool et gettext ;

- `gnu-standards` — ce paquet contient deux documentations issues du projet GNU : les normes GNU de codage, et les informations pour les responsables de programme GNU. Bien que Debian n'exige pas que ces recommandations soient suivies, elles sont néanmoins utiles en tant que lignes directrices et bon sens (consultez les copies locales de `/usr/share/doc/gnu-standards/standards.pdf.gz` et `/usr/share/doc/gnu-standards/maintain.pdf.gz`).

Si ce document contredit n'importe quelle documentation précédente, celle-ci est prioritaire. Veuillez signaler un bogue sur le paquet `maint-guide` avec reportbug.

Voici un autre tutoriel qui peut être lu en parallèle de ce document :

- tutoriel d'empaquetage Debian ;

## 1.4. Où demander de l'aide

Avant de vous décider à poser publiquement une question, veuillez lire ces excellentes documentations :

- fichiers de `/usr/share/doc/`paquet`` pour tous les paquets appropriés ;

- contenu de `man `commande`` pour tous les paquets appropriés ;

- contenu de `info `commande`` pour tous les paquets appropriés ;

- contenu des archives de la liste de diffusion debian-mentors@lists.debian.org ;

- contenu des archives de la liste de diffusion debian-devel@lists.debian.org.

Vous pouvez utiliser les moteurs de recherche web plus efficacement en indiquant des chaînes de recherche comme `site:lists.debian.org` pour limiter le domaine.

Faire un petit paquet de test est une bonne façon d'apprendre les particularités de l'empaquetage. Examiner les paquets bien maintenus est le meilleur moyen d'apprendre comment les autres font leurs paquets.

Si vous avez encore des questions sur la création de paquets pour lesquelles vous n'avez pas pu trouver de réponse dans la documentation disponible ou sur la toile, vous pouvez les poser de façon interactive :

- liste de diffusion debian-mentors@lists.debian.org (cette liste est pour les débutants) ;

- liste de diffusion debian-devel@lists.debian.org (cette liste est pour les spécialistes) ;

- IRC, par exemple `#debian-mentors` ;

- équipes se concentrant sur un ensemble particulier de paquets (liste complète à https://wiki.debian.org/Teams) ;

- listes de diffusion de certaines langues comme debian-devel-{french,italian,portuguese,spanish}@lists.debian.org ou debian-devel@debian.or.jp (liste complète à https://lists.debian.org/devel.html et https://lists.debian.org/users.html).

Les responsables Debian les plus expérimentés seront heureux de vous aider, si vous demandez correctement après avoir fait les efforts nécessaires.

Quand vous recevrez un rapport de bogue (oui, un vrai rapport de bogue !), vous saurez qu'il est temps de vous plonger dans le système de suivi de bogues Debian et de lire la documentation, pour être à même de gérer les rapports efficacement. La lecture de la référence du développeur Debian, chapitre 5.8. « Manipulation des bogues » est fortement recommandée.

Même si tout fonctionne bien, il est temps de commencer à prier. Pourquoi ? Parce que dans quelques heures (ou jours) les utilisateurs du monde entier vont commencer à utiliser votre paquet, et si vous avez fait des erreurs critiques, vous serez bombardé par les courriers électroniques d'utilisateurs Debian furieux… :-)

Relaxez-vous et soyez prêt pour les rapports de bogues, parce qu'il y aura beaucoup plus de travail à faire avant que votre paquet ne soit parfaitement conforme aux règles Debian (une fois encore, lisez la vraie documentation pour les détails). Bonne chance !

[1] Ce document suppose que vous utilisez un système `Jessie` ou plus récent. Si vous avez l'intention de suivre ce texte avec un système plus ancien (y compris un ancien système Ubuntu par exemple), vous devez au moins installer les paquets `dpkg` et `debhelper` rétroportés.

[2] Vous pouvez apprendre les bases du système Debian à partir de la Référence Debian. Elle contient aussi quelques liens pour apprendre la programmation UNIX.

[3] D'autres paquets plus spécialisés mais similaires existent aussi comme `dh-make-perl`, `dh-make-php`, etc.

Guide du nouveau responsable Debian |  | Chapitre 2. Premiers pas