¿Cómo y por qué crear paquetes -dbg, -dev, -doc?


15

Estoy escribiendo un paquete de Ubuntu para un paquete que esencialmente proporciona una serie de bibliotecas y encabezados que luego se usarán para construir otro software. El paquete también se divide en subpaquetes más pequeños que son interdependientes; En este sentido, el paquete es bastante similar al impulso.

Noté que paquetes como boost proporcionan

[...]
libboost-dbg
libboost-dev
libboost-doc
[...]
libboost-all-dev
[...]

pero nada que se llame por su nombre boosto libboost.

  • ¿Cuál es la idea detrás de esto?
  • ¿Cuáles son los efectos de la -dbg, -devy -doclos paquetes?
  • ¿Se proporcionan instrucciones sobre cómo escribir archivos de compilación para esos paquetes?

Respuestas:


13

Idea y Propósito

La razón principal para separar estos paquetes diferentes tiene que ver con el espacio en disco y la velocidad de descarga. En particular, es una gran preocupación para el espacio espejo ya que significa distribuir múltiples copias de los datos. Al hacer las foo-common, foo-datao foo-docpaquetes Architecture: all, sólo conservará una copia de los datos en el archivo en lugar de hacerlo haber copiado con cada arquitectura (por ejemplo, i386, AMD64, etc ...). La mayoría de los usuarios no necesitan símbolos de depuración y solo terminan haciendo que la descarga del paquete tarde más.

Para los paquetes en los archivos oficiales de Ubuntu, en realidad no hay razón para crear -dbgpaquetes manualmente. Las máquinas de compilación eliminan automáticamente los símbolos de depuración y los colocan en -dbgsympaquetes alojados en ddebs.ubuntu.com. (Ver: Paquetes de símbolos de depuración ) los -dbgpaquetes que existen generalmente se transfieren simplemente de Debian.

Instrucciones

En cuanto a la implementación, eche un vistazo a esta pregunta:

Brevemente, se deben crear nuevas estrofas debian/controlpara cada paquete. Entonces los debian/foo-*.installarchivos también deben crearse. Esto permitirá dh_installcolocar los contenidos correctos en los paquetes correctos.

El foo.installpara el paquete binario principal podría verse así:

usr/bin/
usr/lib/

foo-common.install, foo-data.install, foo-doc.install, O lo que sea:

/usr/share/doc/
/usr/share/icons/
/usr/share/foo/
/usr/share/locale/

Y para foo-dev:

/usr/include/
/usr/lib/pkgconfig
/usr/lib/*.so

La creación del foo-dbgpaquete requiere edición, debian/rulesya que normalmente dh_stripeliminará los símbolos de depuración. Entonces necesitamos anular ese comportamiento:

.PHONY: override_dh_strip
override_dh_strip:
        dh_strip --dbg-package=foo-dbg

12

Boost es un ejemplo complejo, veamos primero uno más simple.

En concreto, el paquete fuente openssl proporciona 5 paquetes binarios:

  • libssl1.0.0contiene la biblioteca dinámica OpenSSL, versión 1.0.0. Eso es lo que necesitan ejecutar los programas vinculados a esta biblioteca. El nombre del paquete contiene un número de versión porque puede tener otras versiones de la biblioteca instaladas al mismo tiempo, si tiene otros programas vinculados con otra versión que no es compatible con binario con 1.0.0.
  • opensslcontiene herramientas de línea de comandos que usan la biblioteca OpenSSL. Incluso si tiene varias versiones de la biblioteca, no necesita múltiples versiones de estas herramientas: solo hay una /usr/bin/openssly las herramientas, datos y documentación asociados.
  • libssl-devcontiene los archivos que necesita si desea compilar un programa que se vincule con OpenSSL. Hay archivos de encabezado C ( *.h), bibliotecas para vincular ( *.a, *.so) y algunos archivos variados.
  • libssl-doccontiene documentación para la biblioteca OpenSSL. Solo necesita este paquete si va a escribir programas que usen la biblioteca.
  • libssl1.0.0-dbgcontiene símbolos de depuración. Solo es útil para las personas que depuran la biblioteca OpenSSL o los programas que la usan. La respuesta de andrewsomething tiene más información sobre estos -dbgpaquetes.

Además, precisa contiene una versión anterior de la biblioteca libssl0.9.8, porque hay programas que todavía están vinculados con la versión anterior.

Otros paquetes que puede ver son enlaces para idiomas distintos de C. OpenSSL no se envía con ninguno (hay enlaces a OpenSSL para otros idiomas, pero no provienen de la misma fuente). Un ejemplo es sqlite3 , que se envía con enlaces TCL .

La razón principal para dividir paquetes como este es que diferentes paquetes tienen diferentes audiencias objetivo. Un sistema en el que nadie compila nada solo necesita el libpaquete principal , y tal vez las herramientas de línea de comando; se instalarán automáticamente desde dependencias si es necesario. Si alguien quiere compilar un programa que usa la biblioteca, necesita el -devpaquete. Si alguien quiere escribir un programa que use la biblioteca, necesita el -docpaquete.

¿Y qué hay de Boost? Sigue la misma estructura, pero debido a que Boost es una gran biblioteca, se divide en muchos paquetes más pequeños: libboost-*1.46.1y libboost-*1.46-dev. En concreto, solo hay una versión de Boost, 1.46 , pero oneiric tenía 1.42 y 1.46 . También hay un metapackage boost- default que extrae el paquete versionado como una dependencia.

En cuanto a libhangul , además del paquete de biblioteca dinámica libhangul1y el paquete de desarrollo libhangul-dev, hay un paquete libhangul-data. Este paquete contiene datos adicionales requeridos por la biblioteca. Incluso si tiene varias versiones de la biblioteca, pueden compartir el -datapaquete. Además, el paquete es independiente de la arquitectura. El software que contiene una gran cantidad de datos independientes de la arquitectura se divide en paquetes dependientes de la arquitectura e independientes de la arquitectura, para ahorrar espacio en los sitios de distribución. Otro sufijo con un significado similar es -common.

Las reglas de empaquetado de Ubuntu y Debian son muy similares, por lo que el material sobre cómo hacer paquetes de Debian también se aplica a Ubuntu. De hecho, puede tener el mismo paquete fuente para Debian y Ubuntu; Lo único que hace que los paquetes Debian y Ubuntu sean diferentes es compilarlos en diferentes versiones de biblioteca, y eso no es más que la diferencia entre diferentes versiones de Ubuntu. Tenga a mano la documentación del desarrollador de Debian , especialmente el Manual de políticas de Debian y la Referencia del desarrollador ; vea la Guía del nuevo mantenedor para una introducción. Ignore las partes sobre trabajar con el proyecto Debian, etc., solo lea las partes sobre cómo hacer un paquete.dh_make es una buena manera de comenzar con un paquete deb (querrá seleccionar "Biblioteca").

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.