Capítulo 9. Actualizar el paquete

Tabla de contenidos

9.1. Nueva revisión Debian del paquete
9.2. Inspección de una nueva versión del autor
9.3. Nueva versión del programa fuente
9.4. Actualizar el formato del paquete
9.5. Recordatorio para actualizar paquetes

Después del lanzamiento del paquete, es posible que debas actualizarlo pronto.

9.1. Nueva revisión Debian del paquete

Supongamos que se ha creado un informe de fallo en tu paquete con el número #654321, y que describe un problema que puedes solucionar. Para construir una nueva revisión del paquete, necesitas:

  • Si debes aplicar una modificación nueva, ejecuta:

    • dquilt new nombre_modificación.patch para establecer el nombre de la modificación;

    • dquilt add archivo_a_modificar para establecer el fichero al cual se aplicará la modificación.

    • Corregir el problema en el archivo original.

    • dquilt refresh para guardar los cambios realizados en el archivo del parche nombre_modificación.patch.

    • dquilt header -e para añadir la descripción (breve) del cambio realizado;

  • Si debes actualizar una modificación ya existente, ejecuta:

    • dquilt pop nombre_modificación.patch para deshacer el parche nombre_modificación.patch que debes actualizar (puesto que se habrá ejecutado y se supone que es necesario modificarlo).

    • Corregir el problema existente en la versión incorrecta del archivo de parche nombre_modificación.patch.

    • dquilt refresh para actualizar nombre_modificación.patch.

    • dquilt header -e para actualizar la descripción en la cabecera del archivo del parche.

    • while dquilt push; do dquilt refresh; done para aplicar todos los parches eliminando cosas innecesarias;

  • Añadir la información de la revisión en el inicio del archivo changelog (del directorio «Debian»), por ejemplo ejecutando dch -i o explícitamente indicando el número de versión y revisión ejecutando dch -v versión-revisión, y a continuación detallar los cambios realizados utilizando un editor [81].

  • Incluye la descripción (breve) del error y la solución, seguida de la referencia de la notificación del error con (Closes: #654321). De esta manera, el informe de error sera «cerrado» automáticamente por el sistema de mantenimiento del repositorio Debian cuando el paquete sea aceptado en el repositorio.

  • Deberás repetir los pasos anteriores para cada una de las modificaciones realizadas en la actualización del paquete, a la par que actualizas el fichero changelog de Debian mediante dch.

  • Ahora debes reconstruir el paquete con las modificaciones según se ha descrito en Sección 6.1, “(Re)construcción completa” , Capítulo 7, Comprobando el paquete en busca de fallos , y Capítulo 8, Enviar el paquete. La diferencia con el procedimiento anterior es que el archivo de las fuentes originales no se incluirá (puesto que no se ha sido modificadas por el autor) en el envío al repositorio.

Uno de los casos difíciles sucede cuando haces una copia local del paquete para realizar pruebas antes de subir la versión definitiva al archivo oficial, por ejemplo,1.0.1-1. Para una actualización menor, es una buena idea documentar una entrada en el archivo changelog con una cadena de código de versión como 1.0.1-1~rc1. Es posible ordenar el archivo changelog mediante la consolidación de tales entradas «de pruebas» en una única entrada para el paquete oficial. Véase Sección 2.6, “Nombre del paquete y versión” para el orden de las cadenas de versión.

9.2. Inspección de una nueva versión del autor

Para la actualización de un paquete cuando el autor original libera una nueva versión de las fuentes, debes empezar por revisar la nueva versión original.

Empieza por leer los archivos changelog, NEWS y cualquier otra documentación donde el autor original describa los cambios de la nueva versión.

Puedes comprobar los cambios entre las fuentes originales de la nueva versión y de la anterior para detectar cualquier cambio sospechoso de producir errores ejecutando:

$ diff -urN nombre_archivo-versión_anterior nombre_archivo-nueva_versión

Las modificaciones realizadas en los archivos generados por «Autotools» (missing, aclocal.m4, config.guess, config.h.in, config.sub, configure, depcomp, install-sh, ltmain.sh y Makefile.in) puedes ignorarlas. Puedes eliminarlos antes de ejecutar diff en las fuentes para inspeccionarlas.

9.3. Nueva versión del programa fuente

Si el paquete nombre_del_paquete que examinas está correctamente empaquetado utilizando los nuevos formatos 3.0 (native) o 3.0 (quilt) para empaquetar una nueva versión del autor es esencial copiar el directorio debian de la versión anterior a la nueva, para a continuación, realizar las adaptaciones necesarias. Puedes copiar el directorio debian de la versión anterior a la nueva versión ejecutando tar xvzf /ruta/a/nombre_del_paquete_versión_anterior.debian.tar.gz desde el directorio de las fuentes de la nueva versión [82]. A continuación deberás realizar algunos tareas obvias.

  • Comprimir las fuentes originales en el archivo nombre_del_paquete_nueva_versión.tar.gz.

  • Actualizar el archivo changelog Debian ejecutando dch -v nueva_versión-1 .

    • Añade una nueva linea con el texto «New upstream release» para indicar que se trata de una nueva versión de las fuentes originales.

    • Describe sucintamente los cambios realizados en las fuentes originales por el autor que solucionan errores informados y cerrar los informes añadiendo Closes: #numero_del_error.

    • Describe sucintamente los cambios de la nueva versión del desarrollador que solucionan errores previamente reportados y cierra dichos errores añadiendo Closes: #número_del_error.

  • while dquilt push; do dquilt refresh; done para aplicar todos los parches eliminando cosas innecesarias;

Si las modificaciones no se ejecutan correctamente, inspecciona la situación (mira la información de los archivos .rej) como se muestra a continuación.

  • Si uno de los parches aplicados está integrado en las fuentes originales,

    • ejecuta dquilt delete para eliminarlo.

  • Si uno de los parches entra en conflicto con los cambios realizados por el autor en las fuentes originales,

    • ejecuta dquilt push -f para aplicar los parches de la versión anterior para forzar los rechazos (tendrás la información de los rechazos en los archivos rechazo.rej).

    • Edita los archivos rechazo.rej manualmente para saber el efecto que se pretende con rechazo.rej.

    • Ejecuta dquilt refresh para actualizar el parche.

  • Continua hasta la ejecución de while dquilt push; do dquilt refresh; done.

Puedes automatizar este proceso utilizando la orden uupdate(1) como sigue:

$ apt-get source nombre_del_paquete
...
dpkg-source: info: extracting nombre_del_paquete in nombre_del_paquete-versión_anterior
dpkg-source: info: unpacking nombre_del_paquete_versión_anterior.orig.tar.gz
dpkg-source: info: applying nombre_del_paquete_versión_anterior-1.debian.tar.gz
$ ls -F
nombre_del_paquete-versión_anterior/
nombre_del_paquete_versión_anterior-1.debian.tar.gz
nombre_del_paquete_versión_anterior-1.dsc
nombre_del_paquete_versión_anterior.orig.tar.gz
$ wget http://ejemplo.org/nombre_del_paquete/nombre_del_paquete-nueva_versión.tar.gz
$ cd nombre_del_paquete-versión_anterior
$ uupdate -v nueva_versión ../nombre_del_paquete-nueva_versión.tar.gz
$ cd ../nombre_del_paquete-nueva_versión
$ while dquilt push; do dquilt refresh; done
$ dch
... documenta las modificaciones realizadas

Si has configurado el archivo «debian/watch» como se ha descrito en Sección 5.20, “Archivo watch ,puedes saltarte la orden wget. Simplemente, ejecuta uscan(1) en el directorio nombre_del_paquete-antigua_versión en lugar de la orden uupdate. Así, se buscará automáticamente el archivo de las fuentes, se descargará en tu ordenador y se ejecutará la orden uupdate [83].

Puedes liberar la nueva versión del paquete repitiendo lo expuesto en Sección 6.1, “(Re)construcción completa” , Capítulo 7, Comprobando el paquete en busca de fallos y Capítulo 8, Enviar el paquete .

9.4. Actualizar el formato del paquete

Para actualizar un paquete no es necesario actualizar el formato del paquete. Aún así, puedes aprovechar completamente la funcionalidad de debhelper y del formato 3.0 haciendo lo siguiente [84]:

  • Si necesitas de nuevo algunos de los archivos de plantilla eliminados, puedes regenerarlos ejecutando otra vez dh_make con la opción --addmissing en el directorio de las fuentes. A continuación modifícalos correctamente.

  • Si el paquete no está actualizado para utilizar la nueva sintaxis de la versión 7 de la orden dh de debhelper en el archivo debian/rules, actualízalo para usar dh. También deberás actualizar debian/control.

  • Si deseas actualizar el archivo rules construido por el mecanismo de inclusión Makefile del sistema de compilación Debian (cdbs) a la nueva sintaxis dh, lee el siguiente documento para comprender las variables de configuración DEB_*.

  • Si estás trabajando con un paquete construido con el formato 1.0 sin el archivo nombre_del_paquete.diff.gz, puedes actualizarlo a la nueva versión 3.0 (native) añadiendo el archivo debian/source/format con la linea 3.0 (native). Copia los otros archivos del directorio debian/*.

  • Si estás trabajando con un paquete construido con el formato 1.0 con el archivo nombre_del_paquete.diff.gz, puedes actualizarlo a la nueva versión 3.0 (native) añadiendo el archivo debian/source/format con la linea 3.0 (native). Copia los otros archivos del directorio debian/*. Importa el archivo nombre_del_paquete.diff generado por la orden filterdiff -z -x '*/debian/*' nombre_del_paquete.diff.gz > nombre_del_paquete.diff al sistema quilt [85].

  • Si el paquete se ha construido utilizando un sistema de parches distinto como dpatch, dbs o cdbs utilizando las opciones -p0, -p1 o -p2, puedes convertirlo al formato quilt utilizando el guión deb3 explicado en http://bugs.debian.org/581186.

  • Si el paquete se ha construido ejecutando la orden dh con la opción --with quilt o bien con dh_quilt_patch y dh_quilt_unpatch, elimina todo esto y utiliza el formato 3.0 (native).

Repasa la sección Sección 9.3, “Nueva versión del programa fuente” por si debes repetir algunos de los pasos indicados en ella.

9.5. Recordatorio para actualizar paquetes

A continuación se listan algunas cosas a tener en cuenta al actualizar paquetes.

  • Conserva las entradas anteriores del archivo changelog (suena a obviedad, pero se han dado casos de ejecutar dch en lugar de dch -i).

  • Los cambios en la construcción del paquete Debian deben ser reconsiderados; elimina las modificaciones anteriores (sea lo que sea) y recuerda de añadir todo lo necesario, a no ser que haya una buena razón para no hacerlo.

  • Si se ha realizado alguna modificación en la compilación (te enterarás al inspeccionar los cambios en las fuentes originales) puede que sea necesario actualizar el archivo debian/rules y las dependencias de compilación en el archivo debian/control.

  • Debes comprobar si hay alguna comunicación de parches del paquete en el sistema de gestión de errores (puede darse el caso que algún usuario envíe un parche ya construido y que te sea de utilidad) en Debian Bug Tracking System (BTS).

  • Comprueba el contenido del archivo .changes para asegurarte que envías el paquete a la distribución correcta, que los informes de errores que se cierran con la nueva versión del paquete están listados en el campo Closes del archivo, que el contenido de los campos Maintainer y Changed-By son correctos, que has firmado el archivo con tu clave GPG, etc.



[81] Para escribir la fecha y hora en el formato requerido, debes utilizar LANG=C date -R.

[82] Si el paquete nombre_del_paquete está construido con el anterior formato 1.0, esto se puede hacer ejecutando zcat /ruta/a/nombre_del_paquete_numero_de_versión_anterior.diff.gz|patch -p1 en la nueva versión de las fuentes.

[83] Si la orden uscan descargar las fuentes pero no ejecuta la orden uupdate, debes corregir el archivo debian/watch añadiendo debian uupdate al final de la URL del archivo.

[84] Si quien patrocina tu paquete u otros desarrolladores hacen objeciones a la actualización del formato del paquete, no vale la pena empeñarse en argumentar a favor. Hay otras cosas más importantes que atender.

[85] Puedes fragmentar el archivo nombre_del_paquete.diff en varios archivos de parches utilizando la orden splitdiff.