Capítulo 7. Comprobando el paquete en busca de fallos

Tabla de contenidos

7.1. Cambios sospechosos
7.2. Comprobando la instalación del paquete
7.3. Comprobando 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

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.25, “Archivo source/options.

Instala el paquete para probarlo tú mismo, por ejemplo, usando la orden debi(1) como superusuario. Intenta instalarlo y ejecutarlo en otras máquinas distintas de la tuya, y presta atención para detectar errores o avisos tanto en la instalación como en la ejecución del programa.

$ sudo debi gentoo_0.9.12-1_i386.changes

Debes asegurarte que no haya archivos en conflicto con otros paquetes utilizando el archivo Contents-i386 (descargándolo del repositorio Debian) para prevenir problemas de instalación en distintos sistemas. La orden apt-file será útil para realizar esta tarea. Si hay archivos en conflicto, deberás hacer lo necesario para evitar problemas utilizando el mecanismo de alternativas (véase update-alternatives(1)) coordinándote con los responsables de los otros paquetes o bien estableciendo correctamente el campo Conflicts del archivo debian/control.

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.19, “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 [77].

$ 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.26, “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.



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