General

PUBuilder: Ayudando al ayudante

Update: algunas notas sobre el desarrollo de PUBuilder están disponibles aquí (en inglés). También hay un log de ejemplo que muestra el output de las aplicaciones. En la próxima fase, habrá un SVN y demás jugueticos. Gracias a las personas que han probado el programa hasta ahora, se les debe un almuerzo.

Si alguna vez has tenido que hacer un paquete para Debian o alguna distribución basada en Debian (como Ubuntu), es probable que hayas trabajado o hayas oído hablar de pbuilder. pbuilder (personal builder) es una aplicación escrita por Junichi Uekawa (dancer en debian.org) que sirve para construir paquetes de Debian (es decir, compilarlos y generar los archivos de control) de forma personal.

He aquí donde, para llegar al punto de este post, hay que ver un Crash Course en empaquetado de Debian. Primero, uno se baja el .tar.gz de la página del desarrollador original, y la desempaqueta. Muy bien. Ahora, tenemos que “debianizar” ese árbol de código, por ejemplo con dh_make. “Debianizar” significa preparar el árbol de código original para cumplir con los estándares de Debian. Todo este proceso nos generará un directorio debian/ en nuestro árbol de código, con algunos archivos que debemos modificar, como el archivo control ó el copyright.

Luego hacemos el empaquetado inicial. dh_make ha sido bastante bueno con nosotros como para haceos una versión estandarizada del make del programa original. Este archivo se llama debian/rules (that’s why debian rules) y funciona para programas sencillos. Los programas más complicados con requerimientos exóticos de compilación necesitan que uno acomode un poco la sugerencia por defecto de debian/rules.

Hay varios niveles de complejidad para hacer la compilación. El nivel más bajo es usar debian/rules. No way. Para eso usaríamos Slackware ó Gentoo. Luego hay helper scripts, aplicaciones que nos ayudan a hacer esto, por ejemplo dpkg-buildpackage. Y hay entoos grandes para construcción de paquetes, como pbuilder.

De este proceso se generan varios archivos que deben ser subidos a los servidores de Debian. Allí se hacen más verificaciones y se compilan para todas las arquitecturas en un buildd; una especie de pbuilder monstruoso, Debian-level.

Sin embargo, infinitas cosas pueden pasar en Debian. Los desarrolladores (cuando digo desarrolladores me refiero a Co-Maintainers, Maintainers y Debian Developers) suelen cometer errores humanos, y se generan problemas cuando paquetes con errores empiezan a propagarse en los mirrors. Para garantizar la calidad, existen programas como linda, lintian y piuparts que hacen un análisis de calidad del paquete. Hablar sobre estos programas está fuera del ámbito de este post.

Hace unos días, David me llegó con la idea de hacer un sistema público y abierto para ayudar a los desarrolladores a probar sus paquetes antes de subirlos a Debian. Me entregó un desarrollo inicial, escrito en Perl y basado en Web. Nos entusiasmamos con la idea y nos sentamos a analizar los programas, en especial piuparts. La cosa avanzó, y generó un código ya funcional: PUBuilder.

Esta es la interfaz general de PUBuilder, con un CSS básico. En las pruebas, usé Ajax y transparencias, y se ve conceptual.

PUBuilder está escrito en Perl. Lo probamos con el handler CGI de Cherokee, para desarrollo y para pruebas, y ha estado funcionando bien allí. Hay muchas cosas por delante por hacer, en especial poner el servicio a funcionar en una máquina con ancho de banda y capacidad de procesamiento (como una máquina del Proyecto, por ejemplo) y agregar algunos caramelos funcionales. David está estudiando la lógica del proceso para ver que se puede mejorar en la llamada a los helpers.

PUBuilder se baja los paquetes asociados al DSC que especificas y hace la verificación inicial.

Trabajamos con los módulos CGI, LWP::Simple y CGI::Debug y yo utilicé CGI::Session y CGI::Ajax para algunas pruebas que se concretarán a corto plazo. La filosofía de uso es bastante sencilla: uno introduce la ubicación remota de un DSC, donde previamente se colocaron los archivos .orig.tar.gz y .diff.gz del paquete. PUBuilder se baja las tres cosas, verifica las sumas MD5 y llama a pbuilder, linda, lintian y piuparts. Todo esto genera una buena cantidad de output que se envía a un archivo de registro único, basado en el epoch time de la solicitud. El usuario conoce el epoch asignado y puede volver a ver el output cuando quiera.

Resultado final: registros de pbuilder, linda, lintian y piuparts. Los puedes ver con el “ticket”, el epoch time del momento en que hiciste la solicitud.

Tengo más cosas que trabajar del código, por lo que por ahora solo están los screenshots y acceso de pruebas a un servidor casero donde corre el sistema. A las personas que les de acceso de pruebas, por favor, no compilen cosas con dependencias de más de 15 MB., e intenten trabajar en el horario de 1 AM – 10 AM, Hora Legal de Venezuela. Es una máquina en mi casa, con mi conexión, y la aplicación es bandwidth-intensive.

Nota: antes de que lo digan, No, no sé programar en Perl. No, no sé seguir las buenas prácticas. No, nunca he hecho un CGI en mi vida. No, no sé lo que es hacer una aplicación Web. No, no tengo idea de como es el proceso de empaquetado en Debian. Pero ahí está el programa.

Standard

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s