Capítulo 7. Comprobación del paquete en busca de fallos

Tabla de contenidos

7.1. Cambios sospechosos
7.2. Comprobación de la instalación del paquete
7.3. Comprobación de los guiones del desarrollador («maintainer scripts»)
7.4. El paquete lintian
7.5. La orden debc
7.6. La orden debdiff
7.7. La orden interdiff
7.8. La orden mc

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.

Debes conocer varios métodos para comprobar el paquete y localizar errores antes de transferirlo a repositorios públicos.

Probar el paquete en una máquina distinta a la usada en su construcción es una magnífica idea. Debes poner atención en todos los avisos y errores que se produzcan en las pruebas explicadas a continuación.

Si encuentras un nuevo archivo de parche autogenerado con el nombre debian-changes-* en el directorio debian/patches después de la construcción de tu paquete de Debian no nativo en formato 3.0 (quilt), es probable que hayas cambiado algún archivo accidentalmente o bien que el guión de compilación haya modificado las fuentes originales. Si el error es tuyo, corrígelo. Si es causado por el guión de compilación, corrige el origen del error con dh-autoreconf como en Sección 4.4.3, “Personalización del archivo rules o bien inténtalo con los archivos source/options como en Sección 5.24, “Archivo source/options.

You must test your package for whether it installs without problems. The debi(1) command helps you to test installing all the generated binary packages.

$ sudo debi gentoo_0.9.12-1_i386.changes

To prevent installation problems on different systems, you must make sure that there are no filenames conflicting with other existing packages, using the Contents-i386 file downloaded from the Debian archive. The apt-file command may be handy for this task. If there are collisions, please take action to avoid this real problem, whether by renaming the file, moving a common file to a separate package that multiple packages can depend on, using the alternatives mechanism (see update-alternatives(1)) in coordination with the maintainers of other affected packages, or declaring a Conflicts relationship in the debian/control file.

Ya se ha comentado que los guiones del desarrollador (los archivos preinst, prerm, postinst y postrm) son complicados, excepto si se utilizan los generados por el paquete debhelper. No se recomienda su utilización a los desarrolladores principiantes (véase Sección 5.18, “Archivos {pre,post}{inst,rm} ).

Si el paquete utiliza estos guiones del desarrollador modificados o no triviales, debes comprobar su funcionamiento en la instalación, desinstalación, eliminación y actualización. Algunos errores en estos guiones del desarrollador sólo se producen cuando los paquetes se eliminan o purgan. Utiliza la orden dpkg como se indica a continuación para probarlos:

$ sudo dpkg -r gentoo
$ sudo dpkg -P gentoo
$ sudo dpkg -i gentoo_versión-revisión_i386.deb

Sigue esta secuencia para la comprobación:

  • Instala la versión anterior del paquete (requerido).

  • Actualiza ahora a la versión actual.

  • Vuelve a la versión anterior (opcional).

  • Elimínalo.

  • Instala la nueva versión del paquete.

  • Elimínalo.

  • Instálalo de nuevo.

  • Elimínalo.

Si estás trabajando en la construcción de la primera versión del paquete, construye versiones «fantasma» anteriores (será suficiente cambiar el número de la versión) para realizar las pruebas y así prevenir problemas.

Recuerda que si ya hay versiones anteriores del paquete en el repositorio Debian, los usuarios actualizarán el paquete desde la versión anterior disponible (y esta versión puede ser distinta en la versión estable y de pruebas). Realiza las comprobaciones también con estas versiones.

Aunque no se garantiza la reinstalación de una versión anterior, es preferible asegurarse que es posible sin generar problemas.

Ejecuta lintian(1) en tu archivo .changes. La orden lintian ejecutará varios guiones para revisar los errores más frecuentes de los paquetes [75].

$ lintian -i -I --show-overrides gentoo_0.9.12-1_i386.changes

Por supuesto, cambia el nombre del fichero por el nombre del fichero .changes generado por tu paquete. Los mensajes de error de lintian se codifican con una letra al inicio de la línea del mensaje:

  • E: para los errores; indica violaciones de las normas o un error en el paquete.

  • W: para las advertencias; indica una posible violación de las normas o error en el paquete (pero pudiendo ser una falsa alarma).

  • I: para información; proporciona algo de información sobre algún aspecto del paquete (que tal vez sea mejorable).

  • N: para las notas o anotaciones; proporciona mensajes detallados que pueden ayudarte en la depuración del paquete.

  • O: para mensajes ignorados; un mensaje ignorado (según lo configurado en los archivos lintian-overrides pero que se emite debido a la opción --show-overrides.

En el caso de los errores (líneas que comienzan por E:), lee la explicación (líneas N:), cambia el paquete para eliminarlos o verifica que los avisos son falsos. En este caso, genera los archivos lintian-overrides como se ha descrito en Sección 5.14, “Archivos {nombre_del_paquete.source/} lintian-overrides.

Observa que puedes construir el paquete con dpkg-buildpackage y ejecutar lintian todo con sólo una orden si utilizas debuild(1) o pdebuild(1).

Puedes ver la lista de archivos del paquete binario Debian ejecutando la orden debc(1) como sigue:

$ debc nombre_del_paquete.changes

Puedes comparar el contenido de dos paquetes de fuentes Debian ejecutando la orden debdiff(1) como sigue:

$ debdiff versión_anterior.dsc nueva_versión.dsc

Puedes comparar la lista de ficheros de dos paquetes binarios de Debian con la orden debdiff(1) ejecutando la orden como sigue:

$ debdiff versión_anterior.changes nueva_versión.changes

Este programa es útil para verificar que no hay ficheros que se hayan cambiado de sitio o eliminado por error, y que no se ha realizado ningún otro cambio no deseado al actualizar el paquete.

Puedes comparar dos ficheros diff.gz con la orden interdiff(1). Esto es muy útil para verificar que no se han realizado cambios inadvertidos por el responsable del paquete al actualizar el paquetes que se han construido con el formato 1.0. Ejecuta lo siguiente:

$ interdiff -z versión_anterior.diff.gz nueva_versión.diff.gz

El nuevo formato de fuentes 3.0 conserva los cambios en varios archivos de parches («.patch») como se describe en Sección 5.25, “Archivos patches/*. Puedes seguir los cambios realizados por cada archivo debian/patches/* utilizando la orden interdiff.

Algunas de las operaciones de comprobación del paquete descritas puede realizarse de forma muy intuitiva si empleamos un gestor de ficheros como mc(1), que permite visionar tanto el contenido del paquete *.deb, como el de los ficheros *.udeb, *.debian.tar.gz, *.diff.gz, *.orig.tar.gz.

Vigila que no haya ficheros innecesarios extra o de tamaño cero, tanto en el binario como en el paquete fuente. A veces, hay cosas que no se limpiaron adecuadamente, debes ajustar tu fichero rules para arreglar esto.



[75] No es necesario añadir la opción -i -I --show-overrides a la orden lintian si la has incluido en la configuración en /etc/devscripts.conf o ~/.devscripts según se explicó en Sección 6.3, “La orden debuild .