Nota: La página original es más nueva que esta traducción.
Red autocompiladora
La red autocompiladora es un desarrollo de Debian que gestiona las compilaciones de paquetes para todas las arquitecturas en las que se puede utilizar actualmente Debian. Esta red está constituida por varias máquinas que usan un paquete de software específico denominado buildd para coger los paquetes del repositorio de Debian y reconstruirlos para la arquitectura que se requiera.
¿Por qué se necesita la red autocompiladora?
La distribución Debian soporta en realidad unas pocas arquitecturas, pero los responsables de los paquetes generalmente solo compilan versiones binarias para una sola arquitectura (en general i386 o amd64). Las otras compilaciones se producen automáticamente, asegurando que cada paquete sólo se compila una vez. Los fallos se registran en la base de datos de autocompilación.
En el momento que empezó Debian/m68k (la primera adaptación distinta de la arquitectura Intel), los desarrolladores tenían que vigilar cuándo había nuevas versiones y recompilarlas si querían permanecer actualizados con la distribución de Intel. Todo esto se hacía manualmente: los desarrolladores miraban los nuevos paquetes en la lista de correo de envíos y cogían algunos de ellos para construirlos. La coordinación para que ningún paquete se construya dos veces por personas distintas se hacía anunciándolo en una lista de correo. Es obvio que este procedimiento es propenso al error y consume mucho tiempo. Ésta fue, sin embargo, la forma usual de mantener las distribuciones Debian actualizadas durante mucho tiempo.
El demonio de construcción del sistema automatiza la mayor parte de este proceso. Consiste en un conjunto de guiones (escritos en Perl y Python) que se han mejorado con el tiempo para ayudar a los que hacen adaptaciones con varias tareas. Finalmente han evolucionado en un sistema que puede mantener las distribuciones no i386 de Debian actualizadas casi automáticamente. Las actualizaciones de seguridad se compilan en el mismo conjunto de máquinas para asegurar su disponibilidad a tiempo.
¿Como funciona buildd?
Buildd es el nombre que se da normalmente al software que utiliza la red autocompiladora, pero en realidad se compone de diferentes partes:
- wanna-build
- una herramienta que ayuda a coordinar la (re)construcción de paquetes a través de una base de datos que mantiene una lista de paquetes y su estado. Hay una base de datos central por arquitectura que almacena los estados, versiones, y alguna otra información de los paquetes. Se alimenta de los ficheros de fuentes y de paquetes obtenidos de los distintos archivos de paquetes que tiene Debian (por ej. ftp-master y security-master).
- buildd
- un demonio que comprueba periódicamente la base de datos mantenida por wanna-build y llama a sbuild para construir los paquetes. Una vez se aprueba un registro de compilación por el administrador de buildd el demonio envía el paquete al archivo apropiado.
- sbuild
- es responsable de la compilación real de los paquetes en entornos enjaulados aislados. Se asegura que las dependencias fuente están instaladas en el chroot antes de compilar y después llama a las herramientas estándar de Debian para arrancar el proceso de compilación. Los registros de la compilación se envían a la base de datos de registros de compilación.
Todas estas partes operan juntas para hacer que la red constructora funcione adecuadamente.
¿Qué tiene que hacer un desarrollador de Debian?
Realmente, un desarrollador medio de Debian no necesita usar explícitamente la red buildd. Cuando envíe un paquete al repositorio (binario compilado para una determinada arquitectura) se añadirá a la base de datos para todas las arquitecturas (en estado Needs-Build, necesita compilación). Las máquinas de construcción pedirán a la base de datos de construcciones paquetes en este estado, y de forma rutinaria tomarán los paquetes de esa lista. Ésta se encuentra priorizada por el estado previo de compilación (que puede ser out-of-date, des-actualizado, o uncompiled, sin compilar), prioridad, sección y finalmente nombre del paquete. Adicionalmente, para impedir que algunos paquetes se queden sin recursos al final de la cola, se ajustan las prioridades de forma dinámica con un tiempo incremental de espera en la cola.
Si la construcción del paquete es satisfactoria para todas las arquitecturas, el responsable no tendrá que hacer nada. Todos esos paquetes binarios se enviarán al archivo correspondiente. Si la construcción no es satisfactoria el paquete entrará en unos estados especiales: Build-Attempted para fallos de compilación que no han sido revisados, Failed para revisión y fallos reportados en los paquetes o Dep-Wait, si las dependencias específicas que tiene para su construcción no están disponibles. Los administradores de la autocompilación revisarán los paquetes cuya construcción falla e informarán al responsable, normalmente, abriendo un error en el sistema de seguimiento de fallos.
A veces un paquete se toma un largo período de tiempo para construirlo para una arquitectura dada y eso bloquea la entrada del paquete en testing. Si un paquete impide una transición las prioridades se ajustan habitualmente bajo petición del equipo responsable de la Publicación de Debian. No se aceptarán otras peticiones para acelerar la construcción de un paquete ya que el tiempo incremental en la cola de compilación dará lugar a un prioridad de compilación mayor de forma automática.
Puede comprobar el estado de los diferentes intentos de buildd con los paquetes que pertenecen a un responsable dado revisando los registros de buildd. Estos registros también están enlazados desde la Panorámica de Responsables de Paquetes.
Para más información sobre los diferentes estados en que puede estar un paquete, por favor lea los estados de wanna-build.
¿Dónde puedo encontrar información adicional?
Por supuesto, la documentación y el código fuente disponible para las distintas herramientas son la mejor manera de averiguar como funciona la red buildd. Adicionalmente la sección Adaptar y ser adaptado de la Referencia de desarrolladores de Debian proporciona información complementaria sobre cómo funciona y también algo de información sobre constructores de paquetes y herramientas de adaptación que están involucrados en el proceso de configuración y mantenimiento de la red buildd.
Hay algunas estadísticas disponibles de la red autocompiladora en la página de estadísticas de buildd.
¿Cómo puedo configurar mi propio nodo autocompilador?
Hay varias razones por las que un desarrollador (o usuario) puede querer configurar y ejecutar un autocompilador:
- Ayudar en el desarrollo de una adaptación para una arquitectura dada (cuando se necesitan los autocompiladores)
- Evaluar el impacto de una optimización del compilador o parche recompilando un gran subconjunto de paquetes.
- Ejecutar herramientas que analicen los paquetes buscando errores conocidos y necesitan ejecutarse sobre paquetes compilados. Esto incluso se necesita cuando se hagan análisis del código fuente, por ejemplo, como un arreglo temporal de los paquetes utilizando dpatch.
Puede leer más información sobre cómo puede configurar un autocompilador.
Contactar con los administradores de buildd
Se puede contactar con los administradores de los buildds de una arquitectura en particular en arquitectura@buildd.debian.org, por ejemplo i386@buildd.debian.org.
Esta introducción a la red autocompiladora se escribió con aportaciones y partes proporcionadas de Roman Hodek, Christian T. Steigies, Wouter Verhelst, Andreas Barth, Francesco Paolo Lovergine, Javier Fernández-Sanguino y Philipp Kern.