## Fusioni e sincronizzazioni

Requisiti: build-essential, automake, gnupg, lintian, fakeroot, patchutils, debhelper and pbuilder.

Ubuntu è basata sulla distribuzione Debian Linux e utilizza lo stesso sistema di gestione dei pacchetti (APT). All'inizio di ogni ciclo di sviluppo di Ubuntu, i pacchetti in Ubuntu vengono aggiornati a quelli presenti nel ramo unstable di Debian. Tuttavia, poiché Ubuntu non è la stessa cosa di Debian, alcuni dei pacchetti devono essere modificati per funzionare in Ubuntu. Possono anche esserci delle correzioni di bug che gli sviluppatori di Ubuntu hanno introdotto nei pacchetti. Si può capire se questo è successo esaminando la versione del pacchetto. Se la versione include il termine ubuntu (un esempio può essere gimp-2.2.9-3ubuntu2), allora gli sviluppatori di Ubuntu hanno apportato dei cambiamenti, ed il pacchetto non è più uguale a quello di Debian. Essitono più di 1000 pacchetti nel repository Universe modificati in questo modo.

All'inizio di ogni ciclo di sviluppo di Ubuntu, una decisione viene presa riguardo a questi pacchetti in versione Ubuntu. Naturalmente se la versione di Debian non è cambiata dall'ultimo rilascio di Ubuntu, nulla deve essere cambiato. Se invece in Debian c'è una nuova versione del pacchetto, una di queste due cose succede. Se tutti i motivi per le modifiche apportate dagli sviluppatori di Ubuntu (correzioni di bug, dipendenze, ecc.) sono stati risolti, allora viene utilizzato direttamente il pacchetto Debian. Questa decisione è chiamata sync (sincronizzazione). Tuttavia, se la nuova versione Debian ha gli stessi problemi che hanno causato la creazione della versione Ubuntu, allora questi cambiamenti devono essere apportati anche alla nuova versione Debian. Questa decisione è chiamata merging (fusione).

### Guida sul merging

Il processo di fusione implica esaminare i cambiamenti dei pacchetti sorgente sia di Debian che di Ubuntu, e determinare quali siano i cambiamenti e quali siano specifici di Ubuntu. Guardiamo ora un esempio, un popolare programma per la creazione di CD chiamato xcdroast.

Per cominciare, è necessario creare una cartella che contenga il nostro progetto, ed aprirla:

    ↵
     mkdir ~/xcdroast↵
     cd ~/xcdroast

Ora scaricare tutti i pacchetti sorgente necessari in questa cartella:

- Il tarball sorgente di xcdroast utilizzato da tutte le versioni:

  - xcdroast_0.98+0alpha15.orig.tar.gz

- I file del pacchetto sorgente di Ubuntu Breezy:

  - xcdroast_0.98+0alpha15-1.1ubuntu1.dsc

  - xcdroast_0.98+0alpha15-1.1ubuntu1.diff.gz

- I file del pacchetto sorgente di Debian da cui sono derivati i pacchetti di Breezy:

  - xcdroast_0.98+0alpha15-1.1.diff.gz

  - xcdroast_0.98+0alpha15-1.1.dsc

- I nuovi file del pacchetto sorgente di Debian da cui saranno derivati i pacchetti di Dapper:

  - xcdroast_0.98+0alpha15-3.dsc

  - xcdroast_0.98+0alpha15-3.diff.gz

Questi passaggi possono essere completati anche cercando in packages.debian.org per i pacchetti Debian e in packages.ubuntu.com per i pacchetti Ubuntu.

Un pacchetto che è estremamente utile avere installato quando si fanno fusioni (od ogni operazione di creazione di pacchetti per Ubuntu) è devscripts. Se ancora non dovesse essere stato installato, installarlo prima di continuare.

Analizzando il changelog di Ubuntu si dovrebbe riuscire a capire quali differenze aspettarsi tra il pacchetto Ubuntu e quello Debian da cui è stato derivato. Per xcdroast, il changelog di Ubuntu si può trovare su changelogs.ubuntu.com. Dice che un file .desktop è stato corretto e propriamente installato per risolvere un bug riportato in Malone.

Ora si esaminano gli attuali cambiamenti nei pacchetti sorgente:

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

Le linee che iniziano con - sono state rimosse dal pacchetto Debian, e quelle che iniziano con + sono state aggiunte al pacchetto Ubuntu.

Questo è ciò che vediamo:

- In debian/rules è stato utilizzato install al posto di cp per installare l'icona di xcdroast. Inoltre, è presente una nuova linea per l'installazione del file .desktop.

- In debian/changelog i cambiamenti effettuati sono stati aggiunti alle note del changelog.

- In debian/dirs usr/share/applications è stata aggiunta per fare in modo che le linee di installazione sopra funzionino correttamente.

- xcdroast.desktop è stato aggiunto

Adesso sappiamo come è stato modificato il sorgente di Ubuntu. È necessario ora conoscere cosa è stato cambiato nei sorgenti Debian.

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

n questo debdiff ci sono molte più cose che nel precedente. Un modo con cui farsi una migliore idea di cosa sia cambiato è vedere quali file siano stati modificati nel debdiff:

    grep diff debian.debdiff

Questo ci indica che debian/postinst, debian/rules, debian/changelog, debian/doc-base.manual, debian/control, e debian/menu sono stati modificati nella nuova versione Debian.

Pertanto è necessario esaminare debian/rules per verificare che i cambiamenti di Ubuntu siano stati apportati. Inoltre debian/dirs non è stato modificato dalla vecchia versione Debian. Ora esaminiamo i file. Possiamo scompattare il pacchetto sorgente utilizzando dpkg-source:

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

Questo comando scompatterà il file xcdroast_0.98+0alpha15.orig.tar.gz, creerà una cartella xcdroast-0.98+0alpha15, ed applicherà i cambiamenti trovati in xcdroast_0.98+0alpha15-3.diff.gz.

Ora entrare nella cartella Debian:

    cd xcdroast-0.98+0alpha15/debian

È possibile vedere in `rules` che i cambiamenti fatti da Ubuntu non sono stati applicati alla nuova versione Debian. Questo significa che:

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

..dovrebbe essere cambiato in:

    ↵
     #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

Ora in `dirs`, le seguenti linee devono essere aggiunte affinché il file .desktop venga installato.

    usr/share/applications

Adesso abbiamo bisogno del file .desktop attuale (salvato come debian/xcdroast.desktop). Da ubuntu.debdiff (o dal pacchetto sorgente Ubuntu), vediamo che è:

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

The last change that needs to be made is in `changelog`. Not only do we need to add what we have just done (merge with Debian), but we should also add in the previous Ubuntu changelog entries. To do this, run dch -i -D dapper and put something to the effect of:

    xcdroast (0.98+0alpha15-3ubuntu1) dapper; urgency=low

      * Resynchronise with Debian.

Make sure to change the version number to the correct Ubuntu version. Also add:

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

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

      -- Captain Packager <packager@coolness.com>  Sat,  1 Oct 2005 19:39:04 -0400

between the 0.98+0alpha15-1.1 and 0.98+0alpha15-2 log entries.

Now you can build and test the new source packages. There are different ways to do this, but one example is:

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

This will recreate the source package, sign it with your default GPG key, and build the package in a pbuilder environment to make sure it builds correctly. Make sure to always test your packages before submitting patches. The last step is to make a debdiff that can be attached to an existing bug report or given to the MOTUs in the #ubuntu-motu IRC channel. To do this, we get the difference between the Debian unstable source package and the new Ubuntu version:

    debdiff xcdroast_0.98+0alpha15-3.dsc xcdroast_0.98+0alpha15-3ubuntu1.dsc > \
     	xcdroast_0.98+0alpha15-3ubuntu1.debdiff

Caricamento e revisione |  | Creazione dei pacchetti per Kubuntu