MarioDebian, mi devlog

Bitácora de un desarrollador newbie.

TcosMonitor, ¿reescribirlo?

He estado pensando mucho sobre el funcionamiento de TcosMonitor, hay algunas cosas que se pueden programar de otra forma y en general aunque es «hackeable» estoy pensando en reescribirlo.

Ahora estoy en el momento de recopilar nuevas especificaciones:

  • Separar el backend del frontend y diseñar una API accesible en modo local o remoto sencilla.
  • Modo cliente servidor (quizás con XMLRPC+SSL) para conectar un TcosMonitor a varios servidores de terminales a la vez (ver el mockup de más abajo).
  • Que el backend sirva para TcosPHPMonitor.
  • Soporte para extensiones (menús, y añadidos varios) hay que definir una API y pensar para qué se pueden usar.
  • Mejora en el descubrimiento de equipos.
  • Tratamiento de errores de autenticación.
  • Tratamiento de errores de terminales zombies (en la uni tenemos un equipo que debe tener mal la memoria RAM y aunque tiene los puertos abiertos no acepta conexiones)
 
 

De momento en el «branch» experimental ya he cambiado algunas cosas, y el rendimiento mejora bastante (esta mañana en la universidad he comparado el buscar equipos, el el viejo tardaba 13 segundos para 22 equipos y en el nuevopoco más de 6)

Hasta que se convierta en paquete estable falta bastante, siempre puedes descargar el SVN y ejecutarlo desde allí o generar los paquetes, pero....

...ATENCIÓN:

Este software es muuuu experimental y puede dañar su salud y la de las personas que le rodean, úselo bajo su responsabilidad.





Nos vamos a Cáceres, X Congreso de Hispalinux

Ya se que aviso demasiado tarde pero hasta no haber cerrado todo he preferido que sólo fuese público en la web del X Congreso de Hispalinux. De hecho durante algunos días compartía franja horaria con el señor Mark Shuttleworth, pero parece que al final no ha podido ser.

 

 

 

De momento tengo un taller para la tarde del sábado de 16:00 a 18:00, y participaré en la mesa redonda del I Encuentro Nacional de Desarrolladores el sábado por la mañana, supongo que en parte como desarrollador y en parte como empresa.

El taller consiste en una breve introducción teórica de TCOS y en una demostración práctica con equipos reales, espero hacer muchas fotos y hacer un buen resumen al regreso.

No quiero cerrar esta breve nota sin felicitar de manera muy especial a todos los que han organizado este congreso con una cantidad bestial de conferencias, talleres y actividades y con una calidad muy buena de los participantes.





Cómo se compila TCOS y nuevo modelo de versiones
Después de ver que hay bastante gente empezando a usar TCOS había que cambiar la forma de sacar nuevas versiones. Necesitamos tener algo estable (que no cambie 2 veces por semana) si queremos que esto se use en producción.

Hasta ahora todo el trabajo estába enfocado en el trunk del SVN, y según se iban añadiendo parches y mejoras se compilaba y se subía al repositorio.

En un principio no era demasiado trabajo generar varios paquetes pero esto se ha vuelto una carga de trabajo bastante grande. Recuerdo que los paquetes de TCOS se compilan para i386 y amd64 y para las distribuciones Ubuntu daper, edgy, feisty, gutsy, hardy y Debian etch, testing y unstable.

Ocho versiones distintas de cada paquete y los que no son «arquitecture all» tenemos 16, ¡una locura!

El proceso de compilación es un tanto especial y siempre he querido escribir sobre él.

Hay un Makefile, que se encarga de hacer una copia del paquete en cuestión del trunk a un directorio temporal (build) donde se borran los directorios ocultos del SVN, se renombra el directorio de fuentes con la versión tomada del changelog y se llama a pdebuild (wrapper de debuild con pbuilder) para compilar cada paquete en su versión y con las dependencias correctas.

Además se aplican parches si la distribución objetivo tiene problemas, por ejemplo en dapper o etch se cambian las dependencias de compilación (Build-Depends) de usplash-dev a libbogl-dev y libgd-dev ya que se usa una versión bastante antígua de usplash.

Estos parches vienen en los Makefile de cada paquete (al final) y son opcionales, se puede ver este ejemplo en el paquete initramfs-tools-tcos. En otros se parsean variables (como el número de versión) o se fuerza que use python2.4 cuando el que viene en el sistema es python2.3 (otra vez etch y dapper).

Como se puede ver no es muy dificil mantener un paquete y que sea compatible con cosas tan distintas como Ubuntu Dapper o Debian unstable, pero requiere saber los trucos de cada una y hacer muchas pruebas.

Como ejemplo práctico si queremos generar el paquete tcosmonitor para Debian testing:

1.- Descargamos el trunk

svn co https://www.tcosproject.org/svn/tcos/trunk

2.- Preparamos (sino lo tenemos ya, nuestro chroot de testing)

pbuilder --create --basetgz /var/cache/pbuilder/testing.tgz --distribution testing

3.- Deberiamos tener en /usr/local/sbin un script llamado pdebuild-testing con este contenido:

#!/bin/bash
pdebuild --auto-debsign $@ -- --basetgz /var/cache/pbuilder/testing.tgz

4.- Ejecutamos dentro del directorio trunk:

make pkg PKG=tcosmonitor VER=testing

Aparecerá un mensaje que indica que estamos compilando para testing, pulsando enter se abrirá nuestro editor de texto por defecto con el debian/changelog.

En él hay que añadir una línea del tipo "* Rebuild in Debian testing", cambiar el número de versión a algo del estilo x.xxtesting1,  y cambiar el codename (donde pone unstable) a testing. Guardamos y cerramos ese archivo.

Nos dejará en un nuevo shell dentro del directorio de las fuentes (ya limpio de la basura del svn), normalmente no hay que hacer nada allí, así que escribimos exit o pulsamos Ctrl+D, en ese momento es cuando se llama a pdebuild-testing, y si todo va bien firmaremos el paquete con nuestra clave GPG y lo tendremos listo en /var/cache/pbuilder/results

Tengo otro directorio que sincronizo con rsync+ssh en el mirror principal, donde con un script escaneo /var/cache/pbuilder/results/ en busca de archivos *changes que son los que se inyectan en el repositorio con reprepro (por cada paquete y versión hay que volver a firmar con GPG los cambios) y por último sincronizo mi copia del mirror local con la oficial.

Todo este proceso tan complicado hay que hacerlo 8 veces por cada paquete «arch all» y 16 por cada paquete que contiene binarios específicos de la arquitectura: «arch any». La compilación para amd64 la hago en una máquina virtual con una Debian unstable amd64 y con pbuilder de máquinas de 64.

Por lo que tengo 3 mirror, el oficial (desde donde descargais TCOS), la copia en el servidor de 32bits y la copia del de 64bits. Tengo que tener cuidado cuando los sincronizo porque una mala sincronización puede borrar paquetes que ya estaban y poner unos más antíguos.

Después del tocho de explicación vienen las novedades.

Ayer estuvimos pensando en el IRC, que deberíamos trabajar con una copia (que hemos etiquetado como experimental) y hacer los cambios alli, cuando el sistema sea estable se libera una versíon estable para todos y con esto evitamos tener que compilar paquetes nuevos por cada cambio de 2 o 3 líneas.

A partir de ahora (y si nadie dice lo contrario) las versiones del mirror oficial de paquetes y del trunk se congelan y no se actualizarán tan a menudo, si queremos tener un aula de terminales no es lógico actualizar su software 2 veces a la semana.

Si quieres usar siempre las últimas versiones tendrás que compilar desde el «branch experimental», que funciona exactamente igual a lo explicado aquí con el Makefile, o esperar a que experimental se funda con trunk (cosa que pasara cada mes o dos meses, depende)

Eso es todo... :wq