¿Hay alguna manera de probar los paquetes que construyo para determinar las dependencias correctas?

¿Hay alguna manera de probar los paquetes que construyo para determinar las dependencias correctas?

Soy absolutamente nuevo en el mundo del embalaje, así que perdónenme si le pido algo obvio a un empaquetador experimentado...

¿Cómo puedo estar seguro de que se mencionaron todas las dependencias correctamente en mi paquete?

Digamos que mi aplicación utiliza lib library-xyzque no está instalado de forma predeterminada. Si compilo el paquete y lo instalo en mi máquina de desarrollo, library-xyzya estará instalado, por lo que, incluso si no lo menciono como una dependencia, el programa seguirá ejecutándose correctamente. Pero otro usuario con una instalación nueva de ubuntu no lo habrá library-xyzinstalado y es probable que el programa falle.

La forma en que estoy probando ahora es ejecutando una nueva instalación de Ubuntu en una máquina virtual e instalando el paquete allí, pero como parece un problema común, me pregunto si hay una mejor manera de probar, algo que adopte la misma filosofía de chrootpero que - en lugar de "cortar" partes del sistema de archivos, "cortaría" todos aquellos paquetes instalados que no son "predeterminados" en una instalación limpia de Ubuntu.

Estoy empaquetando programas de Python.

Respuesta1

El lintianprograma se ejecuta después de crear un paquete usando debuildy debería advertirle sobre bibliotecas faltantes al crear un paquete binario. El lddcomando se puede utilizar para comprobar qué bibliotecas son necesarias para un paquete.

Utilizo el siguiente script para recuperar rápidamente las dependencias de los paquetes de la biblioteca:

#!/bin/sh
# Save it as executable ~/bin/pkglibs
# Usage: pkglibs directory
#        pkglibs file
list_lib_pkgnames() {
    local lib="$1" libs
    # get the libraries for given "$lib", stripping out linker libraries
    libs=$(ldd "$lib" | awk '/=/{print $1}' | grep -vE '^(linux-vdso|linux-gate)\.so\.1$')
    # if there are libraries, find the matching packages for it
    [ -n "$libs" ] && dpkg -S $libs | sed 's/: .*//'
}
search="$1"
if [ -d "$search" ]; then
    # for directories, recursively search for library dependencies
    find "$search" -type f -exec "$0" {} \; | sort -u
else
    list_lib_pkgnames "$search"
fi

El comando puede tardar un poco en directorios grandes, ya que prueba cada archivo por separado. Se puede optimizar para generar primero una lista de bibliotecas y luego pasar las entradas únicas al dpkg -Scomando, pero eso es un ejercicio para el lector.

Ejemplo: pkglibs /usr/lib/mesa/:

ia32-libs
lib32gcc1
lib32stdc++6
libc6
libc6-i386
libdrm2
libgcc1
libstdc++6
libx11-6
libxau6
libxcb1
libxdamage1
libxdmcp6
libxext6
libxfixes3
libxxf86vm1

Respuesta2

Como se explica en mi comentario anterior sobre pbuilder, es útil principalmente para verificar las dependencias de compilación (similar a cargar el paquete en un PPA de plataforma de lanzamiento), pero no será útil para verificar las dependencias a menos que agregue algunos pasos adicionales en sus scripts de empaquetado, como ejecutar la unidad. pruebas.

Otra solución similar (ejecutar pruebas en un entorno restringido), si solo está considerando dependencias con bibliotecas de Python, sería crear unaentorno virtualpara que tengas el control de las bibliotecas de Python disponibles durante las pruebas. Una herramienta que sería útil para administrar los entornos virtuales utilizando múltiples versiones de Python mientras se ejecutan las pruebas seríatoxicidad.

Esto no agregará las dependencias en el debian/controlarchivo, pero podría ser útil de todos modos.

información relacionada