MarioDebian, mi devlog

Bitácora de un desarrollador newbie.

Documentando partes de TCOS: TcosDevices y TcosConfig
Poco a poco voy documentando las partes menos obvias de TCOS:

El primer afortunado ha sido TcosConfig, no es que haya documentado mucho, ya que con las capturas de pantalla (13 para cada idioma) creo que queda bastante claro como funciona.

El segundo y el que más tiempo me ha llevado por el gráfico que tiene, es TcosDevices, o también conocido como tcos-devices, es el script en python encargado de acceder a las memorias USB, disquetes y cds de una manera realmente sencilla.

El esquema que he hecho (con inkscape) es un poco grande por lo que pido disculpas a los RSS y planets a los que estoy subscrito:


¿Cómo funciona TcosDevices?

Cosas que entran en juego:
  • En el terminal ligero se ejecuta un servidor XMLRPC que atiende las llamadas de varias aplicaciones python.
  • La autenticación de TcosDevices (y la de TcosVolumeManager del que hablaré otro día) se hace con la cookie de sesión de las Xorg. De esta forma podemos estar seguros que el usuario al que le damos acceso está sentado en el equipo donde ha conectado el pendrive o el disquete. Se acabó usar SMB para este tipo de cosas.
  • TcosDevices en modo «tcos-devices --daemon» pregunta al terminal (cada 3 segundos) por los eventos del tipo bloque de udev (udev los guarda en un archivo en /tmp/
  • Si hay eventos nuevos se envían al programa en python que se ejecuta en el servidor, y se borran del terminal y dependiendo del tipo de evento, dispositivo, etc.. se ejecuta un método (una acción para entendernos)
  • Por ejemplo, si se conecta un pendrive se generarán dos eventos, el primero es «dispositivo /dev/sda creado» y el segundo «dispositivo /dev/sda1 creado», si nos fijamos en el tipo de sistema de archivos el primero no tiene (es un disco completo) y el segundo sí (es una partición), de esta forma al recibir dos eventos podemos usar memorias USB con varias particiones o incluso memorias sin particiones.
  • El programa en python detecta el evento y manda la órden de montar el que tiene partición, udev genera un nuevo evento «dispositivo /dev/sda1 montado» entonces con LTSPFS montamos el punto de montaje del cliente en el escritorio del usuario.
  • Para desmontar de forma segura se hace doble click en el icono del escritorio (solución un poco rara) para generar los eventos en sentido inverso.
Para disquetes y cdrom la cosa se complica un poco (por eso de «tcos-devices --hidden» ya que al introducirse no generan este tipo de eventos de bloque por lo que en si día preparé un pequeño interfaz para montar y desmontar (un poco más manual) los dispositivos.

Estoy pensando en reunir el código de los dos en uno sólo y crear un pequeño menú en el que se pueda ver lo que hay montado y montar desmontar... (tiempo al tiempo...)