MarioDebian, mi devlog

Bitácora de un desarrollador newbie.

TCOS y el kernel 2.6.22

Desde el kernel 2.6.20 se han acumulado muchos cambios.

Desde que en Debian tenemos el kernel 2.6.22 había notado que tcos-devices-ng no funcionaba como debía.

Problema

Cuando conectamos una memoria USB el kernel avisa a udev que se ha conectado un nuevo dispositivo de bloques, este es detectado y se generan uno o varios eventos «add» (depende del número de particiones), tcos-devices-ng recibe los eventos, y si estan soportados, realiza las acciones (montar la partición si tiene tipo de sistema de archivos). A continuación se envía al terminal la señal para que monte la partición y el ekrnel vuelve a generar un evento «mount» recibiendose en tcos-devices-ng para mostrar un mensaje «El dispositivo xxx está listo»

Investigaciones

Como el que genera los eventos a TCOS es udev, lo que hago es mirar por qué no se están generando, y la forma más rápida es preguntar al desarrollador.

La respuesta es simple: 

En el kernel 2.6.22 han quitado los eventos «mount/umount» ya que no funcionaban correctamente. Puedes probar a hacer poll() a /proc/mounts.

Instintivamente hacer poll() a /proc/mounts me suena a que debo vigilar cuando /proc/mounts cambia y realizar las acciones necesarias.

Solución

Recuerdo que existe una librería llamada inotify que sirve para ver cuando un archivo/directorio ha cambiado pero al hacer pruebas con inotifywatch veo que sólo funciona para archivos normales no para cosas en /proc. 

Entonces buscando en google y con ayuda de la página «man poll» hago un pequeño programa en C que escucha los cambios en /proc/mounts, este programa detecta cuando /proc/mounts ha sido modificado y se sale. Podría haber hecho el resto del código de comparación en este archivo pero fue más sencillo hacer un bucle con bash-script.

Básicamente lo que hace es crear una copia de /proc/mounts y ejecutar el anterior programa en C que simula ser «un sleep inteligente» hasta que cambia /proc/mounts. Cuando cambia se compara el número de líneas de los dos archivos y se devuelve la diferencia con el resultado que si es un montaje tendremos más líneas y si se desmonta tendremos menos. Para terminar se guarda el resultado en el log que usa tcos-devices-ng en un formato concreto para leer los eventos udev normales.

Reconozco que no es lo más elegante posible pero funciona y ha devuelto los mensajes de dispositivo listo para kernel >= 2.6.22. 

Aún no esta empaquetado porque me falta hacer alguna prueba, pero las pruebas han sido satisfactorias.





Sistema de control de errores en Debian y Ubuntu

Siempre he sido participativo en el sistema de control de errores de Debian, y como prueba están mis bugs/parches y comentarios enviados.

Ayer con el problema de libxmlrpc me estrené  en el sistema similar que usa Ubuntu, conocido como launchpad.

Estoy bastante sorprendido por la rapidez con la que ha pasado todo.

2007-08-24 Se sube una nueva revisión de xmlrpc-c (1.06-17-0ubuntu3)

Yo estaba compilando tcosmonitor (que depende de esa librería) y noté que en Ubuntu Gutsy no compilaba porque habían cambiado los nombres de los archivos cabecera (*.h)

Ese mismo día envío el bug con número #134529.

2007-08-26 Después de explicar y comprobar la razón del fallo (una actualización de la librería y cambio de nombres de los include) pregunto que otros paquetes dependen de libxmlrpc-c3-dev y veo que openser también podría estar afectado.

2007-08-28 Propongo que añada un nuevo enlace para mantener la compatibilidad (ya que el API no parece haber cambiado demasiado) y hace 9 horas el bug ha sido solucionado y los paquetes ya están en los mirror.

He solido ser bastante crítico con la distribución Ubuntu pero en casos como este hay que reconocer que han funcionado muy bien (y ya se que depende más del tiempo libre del responsable del paquete que de la distribución en sí) pero «al Cesar lo que es del Cesar»




Hace un año: PulseAudio parte II

Otro verano que se va...

Casi sin darnos cuenta otro verano ha volado delante de nuestras narices.

No puedo decir que haya tenido vacaciones en el sentido estricto de la palabra pero no me quejo porque he cambiado mi ritmo diario por otro un poco más relajado y menos informatizado.

He estado pasando unas cuantas semanas en un pueblo al norte de la provincia de Palencia disfutando del buen clima (sobe todo a partir de las 8-9 de la tarde)

Aunque no lo creais también he trabajado en mi proyecto, solucionando algunos fallos y mejorando algunas cosas que faltaban por hacer:

De paso y ya sin tener que ver tanto con el código he dado de alta una sala de IRC para TCOS (#tcos en irc.freenode.net), he activado un robot para guardar los logs de la sala, y he creado un script que obtiene la lista de paquetes en el repositorio (para Debian unstable).

En fin que no me he aburrido demasido Tongue out

No se si insistir de nuevo con los paquetes para que entren en Debian ya que en vez de trabajar para solucionarlo parece que haya programado muchas más cosas para que no entren (o tarden más en entrar) de hecho me siento muy cómodo con el sistema que tengo para generar los paquetes:

SVN de la forja -> Servidor pbuilder (www.tcosproject.org) -> Script que actualiza del SVN y crea una release -> Script que actualiza el mirror con reprepro

Compilar una nueva versión para las 6 versiones/distros distintas que mantengo apenas lleva 10-15 minutos. 

PD.- El sistema de comentarios del blog vuelve a funcionar pero son moderados (estaba harto de borrar spam) así que tardarán en aparecer (lo digo por si te apetece comentar algo).