Fusion et Synchronisations de paquets
Précédent
Suivant

Fusion et Synchronisations de paquets

Important

Requis : build-essential, automake, gnupg, lintian, fakeroot, patchutils, debhelper et pbuilder.

Ubuntu est basé sur la distribution Linux Debian et utilise le même système de gestion de paquets (APT). Au début de chaque cycle de développement d'Ubuntu, les paquets dans Ubuntu sont mis à jour en utilisant ceux de la branche instable de Debian. Cependant, du fait de la différence entre Ubuntu et Debian, certains paquets doivent être modifiés pour fonctionner dans Ubuntu. Il est également possible que des bogues aient été corrigés par les développeurs d'Ubuntu dans les paquets. Vous pouvez déterminer si c'est le cas en notant la version du paquet. Si la version du paquet inclus le mot « ubuntu » (par exemple gimp-2.2.9-3ubuntu2), cela signifie que les développeurs d'Ubuntu l'ont modifié, et qu'il ne s'agit donc plus du paquet Debian d'origine. Il y a plus de 1000 paquets dans ce cas dans le dépôt Univers.

Au début de chaque cycle de développement d'Ubuntu, une décision est prise au sujet de ces paquets utilisant un numéro de version propre à Ubuntu. Bien entendu, si la version dans Debian n'a pas changé depuis la dernière sortie d'Ubuntu, il n'y a rien besoin de modifier. Par contre, si une nouvelle version du paquet dans présente dans Debian, alors deux options se présentent. Si toutes les raisons qui ont motivé les modifications du paquet dans Ubuntu (correction de bogues, dépendances, etc.) ont été corrigées dans le nouveau paquet Debian, alors on peut simplement utiliser le paquet Debian. Cette décision est appelée synchronisation, ou « sync ». Au contraire, si le nouveau paquet Debian possède encore les problèmes qui ont motivé la création de la version spécifique à Ubuntu, alors ces changements doivent être appliqués à nouveau au nouveau paquet Debian. On appelle cela une fusion, en anglais « merge ».

Guide de fusion de paquets

Le processus de fusion de paquets implique d'inspecter les modifications apportées aux paquets sources de Debian et d'Ubuntu et de déterminer ce qui a été modifié et quels sont les modifications spécifiques à Ubuntu. Prenons un exemple, avec le programme populaire de création de CDs xcdroast.

Pour commencer, créez un dossier pour héberger le projet, et entrez-y :

mkdir ~/xcdroast
cd ~/xcdroast

Téléchargez maintenant tous les paquets source concernés dans ce répertoire :

Note

Ces étapes peuvent également être effectuées en recherchant les paquets Debian sur packages.debian.org et les paquets Ubuntu sur packages.ubuntu.com.

Astuce

Lorsque vous fusionnez des paquets (ou que vous créez des paquets pour Ubuntu), devscripts est un paquet qui peut grandement faciliter votre travail. Si vous ne l'avez pas encore installé, vous pouvez le faire avant de commencer.

En regardant le fichier de modifications (changelog) du paquet d'Ubuntu, vous devriez voir les différences que l'on peut s'attendre à trouver entre le paquet Ubuntu et le paquet Debian dont il est dérivé. Dans le cas de xcdroast, le fichier de modifications d'Ubuntu peut être trouvé sur changelogs.ubuntu.com. On y apprend qu'un fichier .desktop a été corrigé et installé correctement pour clore un bogue rapporté sur Malone.

Jetez maintenant un oeil aux modifications dans les paquets source :

debdiff xcdroast_0.98+0alpha15-1.1.dsc xcdroast_0.98+0alpha15-1.1ubuntu1.dsc | \
	ubuntu.debdiff | less ubuntu.debdiff

Les lignes commençant par « - » ont été supprimées du paquet Debian, et celles commençant par « + » ont été ajoutées au paquet Ubuntu.

Voici ce qu'on peut lire :

  • Dans debian/rules, install est utilisé à la place de cp pour installer l'icône de xcdroast. Il y a également une nouvelle ligne pour installer le fichier .desktop.

  • Les changements effectuées donnent lieu à une nouvelle entrée dans debian/changelog.

  • On ajouté /usr/share/applications dans debian/dirs afin que les lignes d'installation fonctionnent correctement.

  • le fichier xcdroast.desktop a été ajouté.

Maintenant que nous savons comment les sources d'Ubuntu a été modifiée, il nous faut déterminer ce qui a été modifié dans les sources de Debian.

debdiff xcdroast_0.98+0alpha15-1.1.dsc xcdroast_0.98+0alpha15-3.dsc > debian.debdiff
less debian.debdiff

Il a beaucoup plus de modifications dans ce debdiff que dans le précédent. Un moyen d'avoir une idée plus claire de ce qui a été modifié et de regarder les fichiers modifiés dans le debdiff :

grep diff debian.debdiff

Cela nous indique que debian/postinst, debian/rules, debian/changelog, debian/doc-base.manual, debian/control et debian/menu ont été modifiés dans la nouvelle version de Debian.

Nous voyons ainsi que nous avons besoin de vérifier debian/rules pour voir si les modifications apportées dans Ubuntu ont été effectuées. On voit aussi que debian/dirs n'a pas été modifié par rapport à l'ancienne version de Debian. Regardons maintenant les fichiers. dpkg-source peut être utilisé pour extraire le paquet source :

dpkg-source -x xcdroast_0.98+0alpha15-3.dsc

Cela va décompresser le fichier xcdroast_0.98+0alpha15.orig.tar.gz file, créer le répertoire xcdroast-0.98+0alpha15 et y appliquer les modifications trouvées dans xcdroast_0.98+0alpha15-3.diff.gz.

Déplaçons-nous maintenant dans le répertoire debian :

cd xcdroast-0.98+0alpha15/debian

On peut voir dans le fichier rules que les modifications effectuées dans Ubuntu n'ont pas été appliquées au nouveau paquet Debian. Cela signifie que :

cp debian/xcdroast.xpm `pwd`/debian/$(PACKAGE)/usr/share/pixmaps

... devrait être changé en :

#cp debian/xcdroast.xpm `pwd`/debian/$(PACKAGE)/usr/share/pixmaps

#install desktop and icon
install -D -m 644 $(CURDIR)/debian/xcdroast.desktop \
	$(CURDIR)/debian/xcdroast/usr/share/applications/xcdroast.desktop
install -D -m 644 $(CURDIR)/debian/xcdroast.xpm \
	$(CURDIR)/debian/xcdroast/usr/share/pixmaps/xcdroast.xpm

Il faut maintenant ajouter les lignes suivantes dans le fichier dirs afin que le fichier .desktop soit installé :

usr/share/applications

Maintenant il faut récupérer le fichier .desktop en question (enregistré dans debian/xcdroast.desktop). En regardant dans ubuntu.debdiff (ou dans le paquet source Ubuntu), on voit qu'il s'agit de :

[Desktop Entry]
Encoding=UTF-8
Name=X-CD-Roast
Comment=Create a CD
Exec=xcdroast
Icon=xcdroast.xpm
Type=Application
Categories=Application;AudioVideo;

La dernière modification à effectuer est dans le fichier changelog. Il faut non seulement ajouter ce qu'on vient de faire (fusion avec Debian), mais il nous faut également les précédentes entrées de modifications d'Ubuntu. Pour faire cela, exécutez dch -i -D dapper et entrez quelquechose comme :

xcdroast (0.98+0alpha15-3ubuntu1) dapper; urgency=low
  * Resynchronise with Debian.

Assurez-vous de modifier le numéro de version pour avoir une version Ubuntu correcte. Ajoutez également :

xcdroast (0.98+0alpha15-1.1ubuntu1) breezy; urgency=low

  * Fix and install existing .desktop file. (Closes Malone #2698)
				
  -- Captain Packager 

entre les entrées 0.98+0alpha15-1.1 et 0.98+0alpha15-2.

Vous pouvez maintenant construire et tester le nouveau paquet source. Il y a différentes manière de le faire, par exemple :

cd ..
debuild -S
cd ..
sudo pbuilder build xcdroast_0.98+0alpha15-3ubuntu1.dsc

Ceci va recréer le paquet source, le signer avec votre clef GPG par défaut, et construire le paquet dans un environnement pbuilder pour s'assurer qu'il se construit correctement. Assurez-vous de toujours tester vos paquets avant de soumettre des patches. La dernière étape est de faire un debdiff qui puisse être attaché à un rapport de bug existant ou envoyé aux MOTUs via le salon IRC #ubuntu-motu. Pour ce faire, nous prenons les différences entre le paquet source Debian unstable et la nouvelle version Ubuntu :

debdiff xcdroast_0.98+0alpha15-3.dsc xcdroast_0.98+0alpha15-3ubuntu1.dsc > \
	xcdroast_0.98+0alpha15-3ubuntu1.debdiff
Précédent
Suivant
Sommaire