Requerimientos: build-essential, automake, gnupg, lintian, fakeroot, patchutils, debhelper and pbuilder.
Ubuntu está basado en la distribución Linux Debian y utiliza el mismo sistema de gestión de paquetes (APT). Al comienzo de cada ciclo de desarrollo de Ubuntu, los paquetes en Ubuntu son actualizados a aquellos de la rama inestable de Debian. De todas formas, debido a que Ubuntu no es lo mismo que Debian, algunos de los paquetes necesitan ser modificados para funcionar en Uuntu. También podría haber alguna corrección de errores que los desarrolladores de Ubuntu hayan introducido en los paquetes. Puede determinar si esto ha sucedido anotando la versión del paquete. Si la versión del paquete incluye ubuntu (un ejemplo podría ser gimp-2.2.9-3ubuntu2), entonces los desarrolladores de Ubuntu han hecho cambios, y no será el mismo que el paquete de Debian. Hay más de 1000 de tales paquetes en el repositorio Universe.
At the start of each Ubuntu development cycle, a decision is made regarding these Ubuntu versioned packages. Of course if the Debian version hasn't changed since the last Ubuntu release, then nothing needs to be changed. However, if there is a newer version of the package in Debian, then one of two things should happen. If all of the reasons for Ubuntu modifications (bug fixes, dependencies, etc.) are fixed in the new Debian package, then we can just take the Debian package directly. This decision is called a sync. However, if the new Debian version has the same issues that caused the Ubuntu version to be made, then those changes need to be applied to the new Debian version, too. This decision is called merging.
The merging process involves looking at the changes to both the Debian and Ubuntu source packages and determining what has changed and which changes are Ubuntu-specific. Let us now look at an example, a popular CD creation program called xcdroast.
Para empezar, cree un directorio para nuestro proyecto, y cambiese a él.
mkdir ~/xcdroast cd ~/xcdroast
Ahora descargue todos los paquetes fuente involucrados en este directorio:
El tarball fuente xcdroast que es usado por todas las versiones:
Los paquetes fuente de Ubuntu Breezy:
Los paquetes fuente de Debian de los que derivan los paquetes de Breezy:
Los nuevos paquetes fuente de Debian de los que derivarán los paquetes de Dapper:
Estos pasos también pueden ser realizados buscando los paquetes de Debian en packages.debian.org y los paquetes de Ubuntu en packages.ubuntu.com.
A very useful package to have installed when doing merges (or any Ubuntu packaging) is devscripts. If you do not have that already installed, install it before proceeding.
By looking at the Ubuntu changelog you should be able to see which differences to expect between the Ubuntu package and the Debian package from which it was derived. For xcdroast, the Ubuntu changelog can be found at changelogs.ubuntu.com. It says that a .desktop file was fixed and properly installed to close a bug reported in Malone.
Ahora inspeccione los verdaderos cambios en los paquetes fuente:
debdiff xcdroast_0.98+0alpha15-1.1.dsc xcdroast_0.98+0alpha15-1.1ubuntu1.dsc | \ ubuntu.debdiff | less ubuntu.debdiff
Las líneas que comienzan con - han sido eliminadas del paquete de Debian, y aquellas que comienzan con + han sido añadidas al paquete de Ubuntu.
Vemos lo siguiente:
In debian/rules install is being used instead of cp to install the xcdroast icon. Also, there is a new line installing the .desktop file.
En debian/changelog los cambios realizados son añadidos a la entrada changelog.
In debian/dirs usr/share/applications has been added for the install lines above to work properly.
añadido xcdroast.desktop
Ahora se sabe como han cambiado las fuentes de Ubuntu. Ahora necesita ver qué ha cambiado en las fuentes de Debian.
debdiff xcdroast_0.98+0alpha15-1.1.dsc xcdroast_0.98+0alpha15-3.dsc > debian.debdiff less debian.debdiff
Hay mucho más en este debdiff que en el anterior. Una manera de formarse una idea mejor de lo que ha cambiado es ver qué ficheros fueron modificados en el debdiff.
grep diff debian.debdiff
Esto indica que debian/postinst, debian/rules, debian/changelog, debian/doc-base.manual, debian/control, y debian/menu fueron modificados en la nueva versión de Debian.
Por lo tanto, podemos ver que es necesario comprobar debian/rules para ver si se realizaron los cambios de Ubuntu.También puede ver que debian/dirs no fué modificado desde la antigua versión de Debian. Mire ahora los ficheros (puee desempaquetar el paquete fuente mediante dpkg-source):
dpkg-source -x xcdroast_0.98+0alpha15-3.dsc
Esto descomprimirá el fichero xcdroast_0.98+0alpha15.orig.tar.gz, creará un directorio xcdroast-0.98+0alpha15, y aplicará los cambios encontrados en xcdroast_0.98+0alpha15-3.diff.gz.
Ahora cambie al directorio debian:
cd xcdroast-0.98+0alpha15/debian
Puede ver en rules
que los cambios realizados por Ubuntu no fueron aplicados a la nueva versión de Debian. Esto significa que:
cp debian/xcdroast.xpm `pwd`/debian/$(PACKAGE)/usr/share/pixmaps
...debería ser cambiado a:
#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
Ahora en dirs
, se necesita añadir la siguiente línea para que el fichero .desktop sea instalado:
usr/share/applications
Ahora necesita el fichero .desktop actual (guardado como debian/xcdroast.desktop). Desde el ubuntu.debdiff (o desde el paquete fuente de Ubuntu), puede ver que es:
[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.
Asegúrese de cambiar el número de versión a la versión correcta de Ubuntu. También añada:
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
entre las entradas de registro de 0.98+0alpha15-1.1 y 0.98+0alpha15-2.
Ahora puede construir y probar el nuevo paquete fuente. Hay diferentes maneras de hacer ésto, pero un ejemplo es:
cd.. debuild -S cd.. sudo pbuilder build xcdroast_0.98+0alpha15-3ubuntu1.dsc
Esto recreará el paquete fuente, lo firmará con su llave GPG por defecto, y construirá el paquete en un entorno pbuilder para asegurarse que se construye correctamente. Asegúrese siempre de probar sus paquetes antes de enviar parches. El último paso consiste en hacer un debdiff que puede ser adjuntado a un informe de fallos existente o dado a los MOTUs en el canal IRC #ubuntu-motu. Para hacer ésto, se obtienen las diferencias entre el paquete fuente de Debian inestable y la nueva versión de Ubuntu:
debdiff xcdroast_0.98+0alpha15-3.dsc xcdroast_0.98+0alpha15-3ubuntu1.dsc > \ xcdroast_0.98+0alpha15-3ubuntu1.debdiff