Capítulo 8. Actualizar el paquete

# Capítulo 8. Actualizar el paquete

The rewrite of this tutorial document with updated contents and more practical examples is available as Guide for Debian Maintainers. Please use this new tutorial as the primary tutorial document.

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

## 8.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 [76].

- 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`.

- Repite lo que hiciste en Sección 6.1, “(Re)construcción completa” y Capítulo 7, Comprobación del paquete en busca de fallos.

- Una vez que estes satisfecho, cambia el nombre de la distribución en el archivo `changelog` de `UNRELEASED` a `unstable` (o bien `experimental`).[77]

- Upload the package as in Capítulo 9, Enviar el paquete. The difference is that this time, the original source archive won't be included, as it hasn't been changed and it already exists in the Debian archive.

One tricky case can occur when you make a local package, to experiment with the packaging before uploading the normal version to the official archive, e.g., ``1.0.1`-`1``. For smoother upgrades, it is a good idea to create a `changelog` entry with a version string such as ``1.0.1`-`1~rc1``. You may unclutter `changelog` by consolidating such local change entries into a single entry for the official package. See Sección 2.6, “Nombre del paquete y versión” for the order of version strings.

## 8.2. Inspección de una nueva versión del autor

When preparing packages of a new upstream release for the Debian archive, you must check the new upstream release first.

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.

## 8.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 [78]. 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.21, “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 [79].

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

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

- 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_*`.

  - copia local de `/usr/share/doc/cdbs/cdbs-doc.pdf.gz`

  - The Common Debian Build System (CDBS), FOSDEM 2009

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

- 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 nuevo formato fuente `3.0 (quilt)`.

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.

## 8.5. Conversión a UTF-8

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

## 8.6. Recordatorio para actualizar paquetes

Here are a few reminders for updating packages:

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

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

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

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

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

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

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

Capítulo 7. Comprobación del paquete en busca de fallos |  | Capítulo 9. Enviar el paquete