Capítulo 8. Actualizar el paquete

Tabla de contenidos

8.1. Nueva revisión Debian del paquete
8.2. Inspección de una nueva versión del autor
8.3. Nueva versión del programa fuente
8.4. Actualizar el formato del paquete
8.5. Conversión a UTF-8
8.6. Recordatorio para actualizar paquetes

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

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:

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.

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.

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 [80]. A continuación deberás realizar algunos tareas obvias.

  • Comprimir las fuentes originales en el archivo nombre_del_paquete_nueva_versión.orig.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.22, “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 [81].

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 9, Enviar el 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 [82]:

  • 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 [83].

  • 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).

Consulte DEP - Debian Enhancement Proposals y adoptar las propuestas ACEPTADAS.

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

Si los documentos originales utilizan una codificación antigua, es una buen práctica actualizarlos a UTF-8.

  • Utiliza iconv(1) para hacer conversiones de codificación en ficheros de texto sin formato.

    iconv -f latin1 -t utf8 foo_in.txt > foo_out.txt
    
  • Utiliza w3m(1) para conversiones desde ficheros HTML a ficheros de texto sin formato con codificación UTF-8. Al hacerlo, el sistema debe estar configurado para usar la codificación UTF-8.

    LC_ALL=C.UTF-8 w3m -o display_charset=UTF-8 \
            -cols 70 -dump -no-graph -T text/html \
            < nombre_del_archivo_a_modificar.html > nombre_del_archivo_modificado.txt
    

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



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

[79] Si utiliza la orden dch -r para realizar este último cambio, asegúrese que guarda el archivo changelog explícitamente con el editor.

[80] 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.

[81] 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.

[82] 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.

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