Chapitre 7. Contrôle des erreurs du paquet

Table des matières

7.1. Modifications suspectes
7.2. Vérification de l'installation d'un paquet
7.3. Vérification des scripts du responsable d'un paquet
7.4. Utilisation de lintian
7.5. Commande debc
7.6. Commande debdiff
7.7. Commande interdiff
7.8. Commande mc

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.

Quelques techniques sont à connaître pour rechercher des erreurs sur le paquet avant de l'envoyer sur les archives publiques.

Il est aussi conseillé d'effectuer des essais sur une machine différente de la vôtre. Vous devez observer de près chaque alerte ou erreur pour tous les tests décrits ici.

Si vous trouvez un nouveau fichier de correctif autocréé comme debian-changes-* dans le répertoire debian/patches après la construction de votre paquet Debian non natif au format 3.0 (quilt), il y a des chances que vous ayez accidentellement modifié quelques fichiers ou que le script de construction ait modifié les sources amont. Si c'est de votre faute, corrigez votre erreur. Si c'est provoqué par le script de construction, corrigez l'erreur à la racine avec dh-autoreconf comme en Section 4.4.3, « Personnalisation du fichier rules » ou contournez-la avec source/options comme en Section 5.24, « source/options ».

Vous devez essayer votre paquet pour vérifier qu'il s'installe sans problème. La commande debi(1) vous permet d'essayer l'installation de tout paquet binaire créé.

$ sudo debi gentoo_0.9.12-1_i386.changes

Pour éviter les problèmes d'installation sur différents systèmes, vous devez vérifier qu'il n'y a pas de nom de fichier en conflit avec ceux existants dans d'autres paquets à l'aide du fichier Contents-i386 téléchargé depuis l'archive Debian. La commande apt-file peut être pratique pour cela. S'il existe des collisions, veuillez prendre les mesures nécessaires pour éviter ces vrais problèmes : en renommant le fichier, en déplaçant le fichier commun dans un paquet différent dont plusieurs paquets peuvent dépendre, en utilisant le mécanisme d'alternatives (consultez update-alternatives(1)) en coordination avec les responsables des autres paquets concernés, ou encore en déclarant une relation de Conflicts dans le fichier debian/control.

Tous les scripts du responsable, (c'est-à-dire les fichiers preinst, prerm, postinst et postrm), sont difficiles à écrire correctement, à moins qu'ils n'aient été générés automatiquement par les programmes debhelper. Ne les utilisez donc pas si vous êtes un responsable débutant (consultez Section 5.18, « {post,pre}{inst,rm} »).

Si le paquet utilise des scripts du responsable non triviaux, veuillez les essayer non seulement pour le processus d'installation, mais aussi les processus de suppression, purge et mise à niveau. De nombreux bogues dans les scripts du responsable surviennent lors de la suppression et de la purge. Utilisez la commande dpkg comme ceci pour les essayer :

$ sudo dpkg -r gentoo
$ sudo dpkg -P gentoo
$ sudo dpkg -i gentoo_version-révision_i386.deb

Les séquences suivantes devraient être essayées :

  • installation de la version précédente (si elle existe) ;

  • mise à niveau depuis la version précédente ;

  • rétrogradation (« downgrade ») à la version précédente (optionnel) ;

  • purge ;

  • installation du nouveau paquet ;

  • suppression (« remove ») du paquet ;

  • nouvelle installation du paquet ;

  • purge ;

Pour votre premier paquet, vous devriez créer des paquets factices avec différentes versions pour essayer votre paquet à l'avance et éviter des problèmes par la suite.

Gardez à l'esprit que si votre paquet a déjà été publié avec Debian, des gens vont mettre à jour ce paquet à partir de la version qui était dans la publication Debian précédente. N’oubliez pas d'essayer aussi les mises à jour à partir de cette version.

Même si la réinstallation vers une version antérieure n'est pas officiellement gérée, il est préférable de la permettre.

Exécutez lintian(1) sur le fichier .changes. La commande lintian exécute de nombreux scripts de tests pour vérifier la plupart des erreurs habituelles d'empaquetage. [75]

$ lintian -i -I --show-overrides gentoo_0.9.12-1_i386.changes

Bien sûr, remplacez le nom de fichier par celui du fichier .changes créé pour votre paquet. La sortie de la commande lintian utilise les balises suivants :

  • E: pour erreur ; une violation certaine de la Charte ou erreur d'empaquetage ;

  • W: pour avertissement ; une violation possible de la Charte ou erreur d'empaquetage ;

  • I: pour information ; une information sur certains aspects d'empaquetage ;

  • N: pour note ; un message détaillé pour vous aider à déboguer ;

  • O: pour ignoré ; un message ignoré par le fichier lintian-overrides mais affiché avec le paramètre --show-overrides.

En cas d'avertissements, mettez au point le paquet pour les éviter ou vérifiez qu'ils sont infondés. S'ils sont infondés, configurez les fichiers lintian-overrides comme décrit en Section 5.14, « {paquet.,source/}lintian-overrides ».

Vous pouvez reconstruire le paquet avec dpkg-buildpackage et lancer lintian en une seule commande, si vous utilisez debuild(1) ou pdebuild(1).

La commande debc(1) permet d'énumérer les fichiers du paquet Debian binaire.

$ debc paquet.changes

La commande debdiff(1) peut comparer les contenus de fichiers entre deux paquets Debian source

$ debdiff ancien-paquet.dsc nouveau-paquet.dsc

La commande debdiff(1) permet aussi de comparer les listes de fichiers entre deux ensembles de paquets Debian binaires.

$ debdiff ancien-paquet.changes nouveau-paquet.changes

Ces commandes sont utiles pour identifier ce qui a été modifié dans les paquets source et pour vérifier d'éventuelles modifications faites par inadvertance lors de la mise à jour des paquets binaires, comme par exemple des fichiers déplacés ou enlevés involontairement.

Vous pouvez comparer deux fichiers diff.gz avec la commande interdiff(1). C'est utile pour vérifier qu'aucune modification involontaire n'a été effectuée sur les sources par le responsable en mettant à jour les paquets à l'ancien format source 1.0.

$ interdiff -z ancien-paquet.diff.gz nouveau-paquet.diff.gz

Le nouveau format source 3.0 garde les modifications dans plusieurs fichiers de correctifs comme décrit en Section 5.25, « patches/* ». Vous pouvez aussi suivre les modifications de tous les fichiers debian/patches/* en utilisant interdiff.

Toutes ces opérations d'inspection de fichier peuvent être transformées en un processus intuitif avec un gestionnaire de fichiers comme mc(1) qui vous permet de consulter non seulement le contenu des fichiers paquet *.deb, mais aussi les fichiers *.udeb, *.debian.tar.gz, *.diff.gz et *.orig.tar.gz.

Soyez attentif aux fichiers inutiles ou de taille nulle, dans les paquets binaires et source. Souvent les fichiers inutiles ne sont pas nettoyés correctement ; adaptez le fichier rules pour compenser.



[75] Il n'est pas nécessaire d'ajouter le paramètre -i -I --show-overrides à lintian si vous avez personnalisé /etc/devscripts.conf ou ~/.devscripts comme décrit en Section 6.3, « Commande debuild ».