
debiansubdirectorio añadido allí por el mantenedor del paquete.La cadena de herramientas de compilación de Debian es una colección de utilidades de software que se utilizan para crear paquetes fuente de Debian.dsc ( ) y paquetes binarios de Debian ( .debarchivos ) a partir de tarballs fuente upstream .
Estas herramientas se utilizan en el proyecto Debian y también en distribuciones basadas en Debian, como Ubuntu .
Descripción general
El código fuente del software libre se distribuye normalmente en archivos tar comprimidos , denominados tarballs. Debian es una distribución orientada a binarios, lo que significa que sus debpaquetesdeb incluyen binarios precompilados y archivos de datos organizados en una jerarquía de sistema de archivos que el software espera. Por lo tanto, la cadena de herramientas de compilación de Debian necesita instrucciones sobre cómo usar el sistema de compilación original para generar paquetes correctos .
Estas instrucciones se almacenan en el debiansubdirectorio, que se agrega al árbol de código fuente del software que está empaquetando el responsable del paquete . Si bien es posible compilar el paquete directamente desde el árbol de código fuente modificado, la práctica habitual es crear paquetes de código fuente que contengan los cambios que el responsable del paquete realizó en el código fuente original en formato redistribuible.
Paquetes fuente
Un paquete de código fuente típico de Debian consta de tres archivos:
- El tarball original (
orig.tar) — una simple copia del tarball de origen si está entarformato y no se necesitan cambios, o un tarball reempaquetado. Esto último puede ocurrir si contiene una instantánea de un sistema de control de versiones que nunca se publicó en forma de tarball, o si el mantenedor necesita eliminar archivos que no son compatibles con las Directrices de software libre de Debian . - El
debian.tararchivo contiene los cambios realizados por el responsable del paquete en la fuente original. Esto incluye todo eldebiandirectorio. Los archivos modificados fuera de estedebian/patchesdirectorio se agrupan en archivos de parche que se aplican automáticamente antes de la compilación. - El
dscarchivo, que es un archivo de texto con metadatos , como los nombres de todos los archivos que componen el paquete fuente y sus sumas de verificación SHA256 , también contiene la firma del creador del paquete fuente.
Por ejemplo, un paquete fuente foocon la versión upstream 1.2.3 y la revisión Debian 4 puede constar de los siguientes archivos:
foo_1.2.3.orig.tar.gzfoo_1.2.3-4.debian.tar.gzfoo_1.2.3-4.dsc
Se crea un paquete fuente utilizando la dpkg-buildpackageherramienta o su envoltorio debuild. Al invocarla para crear un paquete fuente, dpkg-buildpackagese llaman las reglas del mantenedor para limpiar el árbol de código fuente de cualquier archivo intermedio, se realizan varias comprobaciones de integridad y, finalmente, se firma el dscarchivo con la clave del empaquetador utilizando la debsignutilidad.
El proceso inverso —la generación del árbol de código fuente descomprimido a partir de un paquete fuente— se realiza mediante una dpkg-sourceutilidad que extrae el archivo tar original a un subdirectorio, extrae el debian.tararchivo tar que contiene y aplica los parches de configuración presentes. Este es el primer paso que realiza un sistema de compilación al generar paquetes binarios a partir de un paquete fuente.
Los paquetes fuente más antiguos (que utilizan el formato fuente 1) tienen un .diff.gzarchivo en lugar del debian.tar. Este es un diff unificado que contiene el debiandirectorio y cualquier cambio en el código fuente ascendente que no esté gestionado por un sistema de parches.
El directorio debian
El directorio debian contiene archivos que se utilizan dpkg-buildpackagepara crear paquetes binarios y de código fuente. A diferencia de RPM , que utiliza un único specarchivo de instrucciones, las herramientas de Debian utilizan un subdirectorio completo con varios archivos. Se requieren al menos tres archivos para compilar correctamente un paquete :changelog , controly rules. Un cuarto archivo, copyright, es obligatorio según la política de Debian, pero es un requisito legal más que técnico.
Por diseño, todos los archivos del debiandirectorio son archivos de texto, la mayoría de los cuales son legibles por humanos y se pueden editar con un editor de texto sencillo .
debian/registro de cambios
Este archivo contiene información sobre todas las versiones del paquete desde su creación. Las herramientas de compilación solo procesan la entrada superior, que se utiliza para determinar la versión del paquete, la urgencia (que solo es relevante para Debian) y los errores de la distribución que esta versión corrige.
Por ejemplo, para un paquete llamado foo, una debian/changelogentrada de ejemplo puede leerse así:
foo (1.2.3-1) inestable; urgencia=baja * Nueva versión upstream. * Eliminado 02_manpage_hyphens.dpatch, corregido upstream. * Añadido 04_edit_button_crash.dpatch: corrige un fallo tras pulsar el botón de edición. (Cierra: #654321 ) * debian/control: foo debería entrar en conflicto con libbar. (Cierra: #987654 ) -- John Doe <jdoe@example.com> viernes, 30 de noviembre de 2007 15:29:42 +0100 Debian proporciona dos utilidades principales para manipular el debian/changelogarchivo:
dchSe utiliza para añadir nuevas entradas al registro de cambios o modificar las existentes.dpkg-parsechangelogAnaliza la entrada más reciente y extrae datos de ella en unKey: valueformato similar adebian/control. Se utiliza principalmente en scripts.
debian/control
Este archivo contiene información sobre el paquete fuente y todos los paquetes binarios que genera (puede haber más de uno; por ejemplo, el paquete fuente libbarpuede servir como fuente para paquetes binarios libbar0, que contiene solo la biblioteca compartida, y libbar-dev, que contiene una versión estática de la biblioteca y los archivos de cabecera).
Enumera (entre otras cosas) aspectos como el nombre del paquete, el responsable del mantenimiento, las arquitecturas de destino (para paquetes binarios), las dependencias de compilación (paquetes que deben instalarse para que el paquete se compile correctamente) y las dependencias (paquetes que deben instalarse para que el paquete funcione correctamente una vez instalado).
debian/rules
Este archivo es un script que se invoca dpkg-buildpackagecon un único argumento que especifica la acción a realizar ( clean, build, install, binary). Aunque técnicamente puede ser cualquier tipo de script, siempre se implementa como un makefile .
Aparte de invocar el sistema de compilación upstream, la mayoría de las instrucciones en debian/rulesson altamente repetitivas y omnipresentes, y por lo tanto, prácticamente todos debian/ruleslos archivos envuelven esta funcionalidad en scripts debhelper . Por ejemplo, determinar automáticamente las dependencias en función de las bibliotecas compartidas utilizadas es una acción muy común, y por lo tanto, en lugar de incluir el código necesario para hacerlo, el debian/rulesarchivo simplemente llama a dh_shlibdeps. Otros ejemplos de scripts debhelper incluyen dh_installdocs, que instala archivos de documentación estándar como debian/copyrighten sus ubicaciones apropiadas, o dh_fixperms, que garantiza que los archivos en el paquete tengan los derechos de acceso correctos (por ejemplo, los ejecutables en /usr/bintienen el bit "ejecutable" establecido, pero solo son escribibles por el superusuario ).
Dado que las secuencias de debhelperscripts son repetitivas, algunos paquetes simplifican debian/ruleslos archivos directamente utilizando dh o CDBS en lugar de ejecutar cada debhelpercomando directamente.
Sistemas de parches
En ocasiones, un mantenedor necesita modificar el código fuente original. Si bien en el pasado esto se hacía a menudo simplemente editando los archivos directamente e incluyendo los cambios diff.gz, esto podía dificultar el mantenimiento cuando se publicaban nuevas versiones, ya que era necesario examinar y fusionar todos los cambios cuando fuera preciso.
El formato de origen más reciente, 3.0 (quilt), utiliza el sistema de parches quilt , para permitir que las modificaciones se dividan en grupos de parches lógicamente separados, cada uno de los cuales trata un cambio y puede enviarse arriba tal cual. Estos parches se encuentran en debian/patches.
También hay paquetes que utilizan otros sistemas de parcheo, como dpatch. Genera y ejecuta scripts de shell que son archivos diff unificados no estándar con un encabezado, que sin embargo son compatibles con la diffutilidad estándar. El debian/rulesarchivo se modifica para llamar dpatch apply-allantes de construir el paquete binario y dpatch deapply-allantes de construir el paquete fuente (y limpiar cualquier subproducto de la construcción). quilty otros sistemas de parcheo eliminan la necesidad de encabezados especiales y utilizan archivos diff estándar.
Seguimiento de cambios en paquetes fuente: debdiff e interdiff
En ocasiones, un usuario puede querer analizar las diferencias entre dos paquetes fuente ; por ejemplo, para generar un parche propuesto para la versión que se encuentra actualmente en el repositorio y así incluirlo en el sistema de seguimiento de errores de la distribución . Si ambos paquetes utilizan la misma versión original, esto se puede hacer con la debdiffherramienta, que muestra las diferencias entre dos árboles de código fuente, incluyendo los cambios de empaquetado.
Si los archivos tarball de origen para las dos versiones son diferentes, no se puede utilizar una comparación tan simple. En su lugar, interdiffse puede usar la utilidad para generar una diferencia entre dos archivos diff (en este caso, entre dos diff.gzarchivos). Una desventaja es que la interdiffsalida requiere más esfuerzo para aplicarse, y quien aplica los cambios también debe encontrar y descargar el archivo tarball de origen más reciente, lo que normalmente se hace usando la get-orig-sourceregla en debian/rules. [ 1 ]
Comprobaciones de cordura con lintian
Esta herramienta proporciona comprobaciones automatizadas para detectar errores comunes de empaquetado tanto en paquetes binarios como en paquetes fuente, incluidas las infracciones de la política de Debian y los posibles problemas de compatibilidad.
Si bien un mantenedor generalmente se esfuerza por corregir todos los problemas señalados por lintian , las distintas distribuciones pueden tener políticas diferentes al respecto. Por ejemplo, Ubuntu exige que todos los paquetes originados en Ubuntu estén limpios, pero para un paquete integrado en Ubuntu desde Debian, no existe tal requisito: los nuevos cambios simplemente no deben introducir advertencias adicionales a las ya existentes. Esto se hace para minimizar las diferencias entre los paquetes de Debian y Ubuntu.
Aquí hay ejemplos de salidas de lintian :
W: foo origen: source-contains-CVS-dir config/CVS NORTE: N: El paquete contiene un directorio CVS. Probablemente fue incluido por N: accidente, ya que los datos transitorios de CVS normalmente no pertenecen a los paquetes. N: Exportar desde CVS en lugar de usar un checkout. NORTE:
W: libfoo-dev: debian-changelog-line-too-long línea 2 NORTE: N: La línea dada de la última entrada del registro de cambios tiene más de 80 columnas. Tal N: Las entradas del registro de cambios pueden verse mal en las ventanas de la terminal y en los mensajes de correo electrónico. N: y puede resultar molesto de leer. Por favor, ajuste las entradas del registro de cambios a 80 columnas. N: o menos siempre que sea posible. NORTE:
I: foo: arch-dep-package-has-big-usr-share 3399kB 77% NORTE: N: El paquete tiene una cantidad significativa de datos independientes de la arquitectura. N: en /usr/share, mientras que es un paquete dependiente de la arquitectura. Esto es N: derrochador de espacio de espejo y ancho de banda, ya que terminamos con N: múltiples copias de estos datos, una para cada arquitectura. NORTE: N: Si los datos en /usr/share no son independientes de la arquitectura, es un N: violación de la política, y en este caso, debe mover esos datos. N: en otro lugar. NORTE: N: Véase también: N: http://www.debian.org/doc/developers-reference/ch-best-pkging-practice N: s#s-bpp-archindepdata
Entornos de compilación aislados
Los paquetes fuente están diseñados para poder compilarse en cualquier instalación de la versión de distribución de destino, siempre que se cumplan las dependencias de compilación. Además, la compilación puede verse afectada por paquetes ya presentes en el sistema.
Para verificar que un paquete se compile en cualquier sistema y excluir cualquier factor externo, se utilizan herramientas para crear entornos de compilación aislados. Estas son pbuilder(Personal Builder) y sbuild.
Estas herramientas mantienen sistemas de trabajo mínimos en chroot , instalan solo las dependencias de compilación necesarias que se enumeran en debian/controly las eliminan cuando la compilación termina. Por lo tanto, usando pbuilder, un mantenedor de paquetes puede detectar si algunas dependencias de compilación no se especificaron en debian/control. Además, pbuilderpermite compilar de prueba para distribuciones distintas a la que está usando el mantenedor: por ejemplo, para la versión de desarrollo, mientras se ejecuta la versión estable.
sbuildEstá diseñado para integrarse con demonios de compilación automatizados ( buildd). Lo utilizan los servidores de compilación de Debian, que compilan automáticamente paquetes binarios para cada arquitectura compatible. El servicio Launchpad proporciona demonios de compilación similares para Ubuntu, tanto para la distribución oficial como para los repositorios de paquetes personales (PPA).
Véase también
Referencias
- ↑ "Capítulo 4 - Paquetes fuente" . Manual de políticas de Debian . Consultado el 1 de octubre de 2014 .
Enlaces externos
- Guía para nuevos mantenedores de Debian
- Guía de empaquetado de Ubuntu
- Dpkg