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 ».
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 :
L'archive tar source de xcdroast utilisée par toutes les versions :
Les fichiers du paquet source d'Ubuntu Breezy :
Les fichiers du paquet source de Debian sur lesquels le paquet de Breezy est construit :
Les fichiers des sources du nouveau paquet Debian sur lequel le paquet Dapper sera construit :
Ces étapes peuvent également être effectuées en recherchant les paquets Debian sur packages.debian.org et les paquets Ubuntu sur packages.ubuntu.com.
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