Ubuntu logo

Packaging Guide

4. Correction d’un bogue dans Ubuntu

4.1. Introduction

Si vous avez suivi les instructions pour obtenir la configuration de Ubuntu Développement, vous devriez être configuré et prêt à commencer.

./_images/fixing-a-bug.png

Comme vous pouvez le constater dans l’image ci-dessus, il n’y a pas de surprises dans le processus de correction des bogues dans Ubuntu : vous découvrez un problème, vous obtenez le code, vous travaillez sur le correctif, le testez, soumettez vos modifications dans Launchpad et demandez à ce qu’elles soient examinées puis fusionnées. Dans ce guide, nous allons passer toutes les étapes nécessaires une par une.

4.2. Trouver le problème

Il existe de nombreuses façons de trouver des choses sur lesquelles travailler. Ce sera peut-être un rapport de bogue que vous-même pouvez rencontrer (ce qui vous donne une bonne occasion de tester le correctif), ou un problème relevé par ailleurs, éventuellement dans un rapport de bogue.

Harvest est l’endroit où nous gardons la trace des différentes listes de choses à faire en matière de développement Ubuntu. Harvest répertorie les bogues déjà résolus en amont ou dans Debian, ainsi que les petits bogues (que nous appelons « bitesize »), etc. Regardez cela et trouvez votre premier bogue à corriger.

4.3. Déterminer ce qu’il faut corriger

Si vous ne connaissez pas le paquet source contenant le code problématique, mais que vous connaissez le chemin du programme concerné sur votre système, vous pouvez découvrir sur quel paquet source vous pourrez travailler.

Admettons que vous ayez trouvé un bogue dans Tomboy, une application de prise de notes sur le bureau. L’application Tomboy peut être démarrée en exécutant /usr/bin/tomboy en ligne de commande. Pour trouver le paquet binaire contenant cette application, utilisez la commande :

$ apt-file find /usr/bin/tomboy

Cela affichera :

tomboy: /usr/bin/tomboy

Notez que la partie précédant les deux points est le nom du paquet binaire. Il arrive souvent que le paquet source et le paquet binaire aient des noms différents. Ceci est généralisé lorsqu’un paquet source unique est utilisé pour construire plusieurs paquets binaires différents. Pour trouver le paquet source d’un paquet binaire particulier, tapez :

$ apt-cache showsrc tomboy | grep ^Package:
Package: tomboy
$ apt-cache showsrc python-vigra | grep ^Package:
Package: libvigraimpex

apt-cache fait partie de l’installation standard d’Ubuntu.

4.4. Obtenir le code

Une fois que vous connaissez le paquet source à corriger, vous souhaiterez obtenir une copie du code sur votre système, de sorte que vous puissiez le déboguer. Dans le développement de la distribution Ubuntu, on y arrive par ramification du paquet source vers une branche correspondant au paquet source. Launchpad gère les branches de paquets source pour tous les paquets dans Ubuntu.

Une fois que vous avez obtenu une branche locale du paquet source, vous pouvez étudier le bogue, créer un correctif et télécharger votre proposition de correction vers Launchpad sous la forme d’une branche Bazaar. Lorsque vous êtes satisfait de votre solution, vous pouvez soumettre une proposition de fusion, qui demande à d’autres développeurs d’Ubuntu d’examiner et approuver la modification. S’ils sont d’accord avec vos modifications, un développeur Ubuntu téléchargera la nouvelle version du paquet vers Ubuntu afin que chacun obtienne le bénéfice de votre excellente solution - et vous gagnez un peu en crédit. Vous êtes désormais sur la bonne voie pour devenir un développeur Ubuntu !

Nous allons décrire en détail la façon de ramifier le code, de soumettre votre solution et d’en demander un examen dans les sections suivantes.

4.5. Travailler sur un correctif

Il existe des livres entiers sur la façon de trouver des bogues, de les corriger, de les tester, etc. Si vous êtes complètement novice en programmation, essayez en premier lieu de corriger les bogues simples comme les fautes de frappe évidentes. Essayez de minimiser les changements autant que possible et documentez clairement vos modifications et hypothèses.

Avant de travailler sur un correctif vous-même, assurez-vous de vérifier que personne d’autre ne l’a déjà corrigé ou est en train de le faire. Les bonnes sources à vérifier sont :

  • Traceur de bogues en amont (et dans Debian) (bogues ouverts et fermés),

  • Historique des révisions en amont (ou version plus récente) pourrait avoir résolu le problème,

  • des bogues ou des ajouts de paquets de distributions Debian ou autres.

Vous souhaitez maintenant créer un correctif incluant la solution. La commande edit-patch est une façon simple d’ajouter un correctif à un paquet. Lancez :

$ edit-patch 99-new-patch

Cela va copier l’empaquetage dans un répertoire temporaire. Vous pouvez maintenant éditer les fichiers avec un éditeur de texte ou appliquer des correctifs en amont, par exemple:

$ patch -p1 < ../bugfix.patch

Après avoir modifié le fichier, saisissez exit ou appuyez sur ctrl-d pour quitter l’environnement temporaire. Le nouveau correctif a été ajouté dans debian/patches.

4.6. Tester le correctif

Pour construire un paquet de test avec vos modifications, exécutez ces commandes:

$ bzr builddeb -- -S -us -uc
$ pbuilder-dist <release> build ../<package>_<version>.dsc

Cela créera un paquet source à partir des contenus de la ramification (-us -uc permettra de s’affranchir de l’étape de signature du paquet source) et pbuilder-dist construira le paquet à partir des sources de la version de votre choix.

Une fois la construction réussie, installez le paquet depuis ~/pbuilder/<release>_result/ (en utilisant sudo dpkg -i <paquet>_<version>.deb). Puis testez pour vérifier si le bogue est corrigé.

4.6.1. Documenter le correctif

Il est très important de documenter abondamment vos modifications afin que les développeurs qui reliront votre code dans le futur n’aient pas à deviner ce qu’étaient votre raisonnement et vos hypothèses. Chaque paquet source Debian et Ubuntu inclut debian/changelog, où les modifications de chaque paquet téléchargé sont suivies.

Le moyen le plus simple de mettre à jour est d’exécuter :

$ dch -i

Cela vous ajoute une entrée passe-partout du changelog et lance un éditeur dans lequel vous pourrez remplir les blancs. Un exemple de ceci pourrait être :

specialpackage (1.2-3ubuntu4) trusty; urgency=low

  * debian/control: updated description to include frobnicator (LP: #123456)

 -- Emma Adams <emma.adams@isp.com>  Sat, 17 Jul 2010 02:53:39 +0200

dch doit déjà remplir pour vous la première et la dernière ligne d’une telle entrée du changelog. La ligne 1 se compose du nom du paquet source, du numéro de version, de la version d’Ubuntu vers laquelle le paquet est transféré, du niveau d’urgence (qui est presque toujours «{nbsp]faible »). La dernière ligne contient toujours le nom, l’adresse électronique et l’horodatage du changement (au format RFC 5322).

Ces préoccupations en moins, concentrons-nous sur l’entrée effective du changelog elle-même : il est très important de renseigner :

  1. où la modification a été apportée

  2. ce qui a été modifié

  3. où le débat sur la modification s’est passé

Dans notre (très rare) exemple, le dernier point est couvert par (LP: #123456) se référant au bogue Launchpad 123456. Les rapports de bogues ou des fils de listes de diffusion ou les spécifications sont généralement de bonnes informations à fournir comme justification d’un changement. En prime, si vous utilisez la notation LP: #<numéro> pour les bogues sur Launchpad, le bogue sera automatiquement fermé quand le paquet correctif sera téléchargé vers Ubuntu.

4.6.2. Soumettre le correctif

Avec l’entrée du changelog écrite et enregistrée, il vous suffit de lancer :

debcommit

et la modification sera soumise (localement) avec votre entrée changelog comme message de soumission.

Pour le soumettre à Launchpad, en tant que nom de la branche distante, vous devez vous conformer à la nomenclature suivante :

lp:~<yourlpid>/ubuntu/<release>/<package>/<branchname>

Cela pourrait être, par exemple :

lp:~emmaadams/ubuntu/trusty/specialpackage/fix-for-123456

Donc, si vous lancez simplement :

bzr push lp:~emmaadams/ubuntu/trusty/specialpackage/fix-for-123456
bzr lp-propose

vous devriez être entièrement configuré. La commande push doit le soumettre à Launchpad et la seconde commande ouvre la page Launchpad de la branche distante dans votre navigateur. Trouvez alors le lien « (+) Proposer à la fusion », cliquez dessus afin que quelqu’un examine les modifications et qu’elles soient incluses dans Ubuntu.

Notre article sur la recherche de sponsors explique plus en détail comment obtenir des commentaires sur vos modifications proposées.

Si votre branche résout des problèmes dans les versions stables ou s’il s’agit d’un correctif de sécurité, vous pouvez jeter un œil à notre article sur mises à jour de sécurité et versions stables.