Krav: build-essential, automake, gnupg, lintian, fakeroot, patchutils, debhelper och pbuilder.
Ubuntu är baserat på distributionen Debian Linux och använder samma pakethanteringssystem (APT). I början av varje utvecklingscykel av Ubuntu uppdateras paketen i Ubuntu till de i Debians unstable-gren. Eftersom Ubuntu inte är Debian måste vissa paket modifieras för att fungera i Ubuntu. Det kan också finnas buggfixar som Ubuntuutvecklare har lagt till sina paket. Du kan undersöka om det här har hänt genom att titta på paketets versionsnummer. Om paketets versionsnummer innehåller ubuntu (ett exempel skulle vara gimp-2.2.9-3ubuntu2) så har Ubuntu-utvecklare gjort ändringar, och paketet är inte längre samma som i Debian. Det finns över 1 000 modifierade paket i förrådet Universe.
I början av varje utvecklingscykel fattas ett beslut om dessa Ubuntu-specifika paket. Om Debianversionen inte har ändrats sedan senaste utgåva av Ubuntu så behöver inget ändras. Om det däremot finns en nyare version av paketet i Debian så måste en av följande två saker hända. Om alla skäl för att Ubuntu har gjort ändringar (buggfixar, beroenden, mm) är fixade i det nya Debian-paketet så kan vi ta Debian-paketet direkt. Det här beslutet kallas sync. Om den nya Debianversionen har samma problem som var orsaken till att Ubuntu skapade ett eget paket så måste de här ändringarna appliceras till den nya Debian-versionen också. Det här beslutet kallas merging.
Mergningsprocessen går ut på att titta på ändringarna i källpaketen för både Debian och Ubuntu och avgöra vad som har ändrats och vilka ändringar som är Ubuntu-specifika. Vi kan titta på ett exempel, ett populärt CD-skapningsprogram som heter xcdroast.
För att börja, skapa en mapp för vårt projekt och gå dit:
mkdir ~/xcdroast cd ~/xcdroast
Ladda nu ner alla källpaket som är inblandade till den här katalogen:
Källkodstarbollen av xcdroast som används av alla versioner:
Källpaketfilerna för Ubuntu Breezy:
Källpaketfilerna för det Debian-paket som Breezy-versionen är baserad på:
Källpaketfilerna för det nya Debian-paketet som Dapper-paketet kommer att baseras på:
Du kan genomföra de här stegen genom att söka efter Debianpaketen på packages.debian.org och efter Ubuntupaketen på packages.ubuntu.com.
Ett väldigt användbart paket att ha installerat när du mergar (eller utför någon form av paketering i Ubuntu) är devscripts. Om du inte har det installerat redan, se till installera det innan du fortsätter.
Genom att kolla på ändringsloggen för Ubuntu bör du kunna se vilka skillnader du bör se mellan Ubuntupaketet och Debianpaketet det är baserat på. För xcdroast går ändringsloggen för Ubuntu att hitta på changelogs.ubuntu.com. Där står det att en .desktop-fil fixades och installerades korrekt för att stänga en bugg i Malone.
Inspektera nu de faktiska skillnaderna i källpakten:
debdiff xcdroast_0.98+0alpha15-1.1.dsc xcdroast_0.98+0alpha15-1.1ubuntu1.dsc | \ ubuntu.debdiff | less ubuntu.debdiff
Alla rader som börjar med - har tagits bort från Debianpaketet, och de som börjar med + har lagts till i Ubuntu-paketet.
Det här är vad vi ser:
I debian/rules används install istället för cp för att installera xcdroast-ikonen. Det finns även en ny rad som installerar .desktop-filen.
I debian/changelog består ändringarna av den tillagda ändringsloggsposten.
I debian/dirs har usr/share/applications lagts till för att install-raderna ovan ska fungera som de ska.
xcdroast.desktop lägs till
Nu vet vi hur Ubuntu-källkoden ändrades. Nu behöver vi se vad som har ändrats i Debian-källkoden.
debdiff xcdroast_0.98+0alpha15-1.1.dsc xcdroast_0.98+0alpha15-3.dsc > debian.debdiff less debian.debdiff
Vi får mycket mer text i den här debdiff:en än i den förra. Ett sätt att få bättre grepp om vad som har ändrats är att titta på vilka filer som har ändrats i debdiff:en:
grep diff debian.debdiff
Det här visar att debian/postinst, debian/rules, debian/changelog, debian/doc-base.manual, debian/control och debian/menu ändrades i den nya Debian-versionen.
Vi kan därför se att vi behöver kontrollera debian/rules för att se om ändringarna från Ubuntu finns med. Vi kan också se att debian/dirs inte har ändrats från den förra Debian-versionen. Men låt oss nu titta på filerna. Vi kan packa upp källpaketen genom att använda dpkg-source:
dpkg-source -x xcdroast_0.98+0alpha15-3.dsc
Det här kommer att packa upp filen xcdroast_0.98+0alpha15.orig.tar.gz, skapa en katalog med namnet xcdroast-0.98+0alpha15, och applicera alla ändringar från xcdroast_0.98+0alpha15-3.diff.gz.
Gå nu till debian-katalogen:
cd xcdroast-0.98+0alpha15/debian
Vi kan se i rules
att de ändringar Ubuntu gjorde inte har applicerats till den nya Debian-versionen. Det här betyder att:
cp debian/xcdroast.xpm `pwd`/debian/$(PACKAGE)/usr/share/pixmaps
...ska bytas ut mot:
#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
I dirs
måste du nu lägga till följande rad för att .desktop-filen ska installeras:
usr/share/applications
Nu behöver vi den riktiga .desktop-filen (sparad som debian/xcdroast.desktop). Från ubuntu.debdiff (eller Ubuntus källpaket) ser vi att den är:
[Desktop Entry] Encoding=UTF-8 Name=X-CD-Roast Comment=Create a CD Exec=xcdroast Icon=xcdroast.xpm Type=Application Categories=Application;AudioVideo;
Den sista ändringen som vi behöver göra är i changelog
. Vi behöver inte bara göra det för att lägga till vad vi precis gjorde (merge:a med Debian), men vi bör också lägga till de tidigare ändringsloggsposterna från Ubuntu. För att göra det, kör dch -i -D dapper och skriv något i stil med:
xcdroast (0.98+0alpha15-3ubuntu1) dapper; urgency=low
* Resynchronise with Debian.
Se till att ändra versionsnumret så att det gäller rätt Ubuntu-version. Lägg även till:
xcdroast (0.98+0alpha15-1.1ubuntu1) breezy; urgency=low * Fix and install existing .desktop file. (Closes Malone #2698) -- Captain Packager
Mellan posterna för 0.98+0alpha15-1.1 och 0.98+0alpha15-2.
Nu kan du bygga och testa det nya källpaketet. Det finns olika sätt att göra det här, men ett exempel är:
cd .. debuild -S cd .. sudo pbuilder build xcdroast_0.98+0alpha15-3ubuntu1.dsc
Det här kommer att bygga om källpaketet, signera det med din GPG-nyckel, och bygga paketet i en pbuilder-miljö för att se till att det går att bygga som det ska. Se alltid till att testa dina paket innan du skickar in patchar. Det sista steget är att skapa en debdiff som kan läggas till en existerande buggrapport eller skickas till någon av alla MOTUs i IRC-kanalen #ubuntu-motu. För att göra det här tar vi fram skilladerna mellan källpaketet från Debian unstable och den nya Ubuntu-versionen:
debdiff xcdroast_0.98+0alpha15-3.dsc xcdroast_0.98+0alpha15-3ubuntu1.dsc > \ xcdroast_0.98+0alpha15-3ubuntu1.debdiff