MarioDebian, mi devlog

Bitácora de un desarrollador newbie.

Offline, OpenGL y drivers malos malosos

Como ya viene siendo costrumbre cada vez que llega un fin de semana un poco más largo de lo normal o un puente, nuestro servidor decide que él tiene derecho a tener vacaciones, y le da un kernel panic justo en el momento que sabe que no va a venir nadie para reiniciarlo.

Total, que pido perdón por enésima vez, tanto a los que suelen visitar este blog como cualquier otra web de SOLEUP, por no haber estado accesible durante el fin de semana. El servidor debe tener tocada la placa, la memoria o ámbas y cuando se le antoja da un panic.

Aunque parte de mi trabajo puede depender si está online el servidor o no, este largo puente (no me he tomado vacaciones) lo he aprovechado para pulir algunas cosas de TCOS, y una de las que más ganas le tenía es al soporte OpenGL para TCOS.

OJO !!! esto no significa que se pueda ejecutar Beryl en los terminales pero es uno de los principios para que algún día funcione. en LTSP hace poco ví que lo habían conseguido, lo que no logro entender es para qué!!!!

Problema GLX:

Cada vez que uno de los terminales arrancaba el protector de pantalla o alguna aplicación a pantalla completa que usase algo de aceleración 3D (ejemplos gcompris, glxgears), se morían las X dando un backtrace relaccionado con glx....

Solución teórica:

Sabía que tenía que copiar algún archivo de Xorg a la imagen de arranque e investigando un poco descubrí que eran exactamente estos tres:
  • libGL.so.1.2 ( /usr/lib )
  • libGLU.so.1.* ( /usr/lib )
  • libGLcore.so ( /usr/lib/xorg/modules/extensions )

Solución práctica:

El asunto podría haberse resuelto copiando directamente estos tres archivos en la imagen sin más miramientos, pero aparecen muchos problemas, el primero, en equipos muy viejos quizás esto sea antiproducente por lo que debería poder activarse/desactivarse, así que he creado una nueva variable en tcos.conf TCOS_XORG_OPENGL.

Otro gran problema es que mucha gente, sin importarle demasiado, instalan drivers propietarios (que son mu malos, malosos!!!) y que sin miramientos sobreescriben esos archivos o incluso en el mejor de los casos los mueven usando dpkg-divert. Así que una posible solución sería mirar donde guarda dpkg-divert los archivos originales......

En la ubuntu de mi hermano con drivers NVIDIA instalados a la debian (module-assistant) sólo he podido encontrar una de las tres, las otras dos tenían un enlace roto. La solución, no era buscar las librerías porque en cada equipo pueden estar en mil sitios dependiendo de la versión, así que lo que he hecho (similar a lo que hice en su día con discover2) es hacer un nuevo paquete con esos tres archivos que se toman de un sistema «limpio» (sin drivers malos, malosos) y en caso de que se detecte que hay drivers NVIDIA o ATI que pida que se desinstalen o que se instale mi paquete extra.

Ahora hay que detectar si tenemos instalado los drivers o no, otras mil formas..... La que se me ha ocurrido es buscar las cadenas en la librería de esta forma:

strings /usr/lib/libGL.so.1 |grep -c NVIDIA (para nvidia)
strings /usr/lib/libGL.so.1 |grep -c -i fgl (para fglrx)

Si esto es distinto de 0 tenemos muchas papeletas que que sea un driver malo maloso y dar el aviso.

Conclusiones:

Parece que ya funciona (más o menos) y que se puedan ejecutar aplicaciones 3D en los terminales, el siguiente paso es poder usar drivers malos malosos, aunque no estoy mucho por la labor, ya que pasamos el cuello de botella a la red... 2 o 3 personas jugando (~30fps) pueden consumir el 80% de una red de 100Mbps.

He estado actualizando los paquetes de TCOS que hay en el repositorio, ahora las distribuciones/versiones soportadas son:
  • Debian testing/unstable (usan los mismos paquetes, cuando salga etch haré dos ramas)
  • Ubuntu Dapper (6.06) (como es LTS supongo que tendré que darla soporte unos cuantos años, he tenido que actualizar libnotify para tener python-notify)
  • Ubuntu Edgy (6.10)
  • Ubuntu Feisty (7.06)
El repositorio ocupa ~ 63 Mb, (tengo copia en otros dos equipos y lo sincronizo con rsync).

En otro órden de cosas, sigo jugando con prototype y Ajax, mi último juguete es un editor "Inline", es decir, muestra los datos de una tabla de una base de datos y permite editar cada elemento y guardarlo/borrarlo o incluso añadir uno nuevo sin recargar la página. Cuando lo tenga un poco más pulido liberaré el js. Mientras para abrir boca, un screencast:



Es un bucle infinito, la animación dura como 15-20 segundos.

Me ha sorprendido muchísimo la potencia que tiene javascript y en especial con la librería prototype para modificar el DOM de un documento.

Articulos relacionados:

Comentarios

  1. Geronimo Que chulo el editor inline
    07/01/2007 | 16:33

    Me gusta mucho tu editor inline, ¿sigues trabajando en él, lo vas a liberar? Me sería muy útil, junto a un pequeño articullo sobre cómo llegaste a hacerlo y cómo usarlo. Estoy con liado con un pequeño script PHP que ataca a una BDD para gestionar una asociación juvenil, y me vendría algo así de perlas.

    ¡Feliz año nuevo!

  2. mariodebian Liberar editor Inline
    07/01/2007 | 19:02

    Con prototype o scriptaculuous hay ya un editor inline, el por qué hice el mío tiene una razón muy simple, en aquellos tienes que añdir muchas líneas de código en este sólo hay que decir el prefijo de la celda que quieres que sea editable.

    Espero que en más o menos un mes (cuando se abra la web que estoy haciendo) liberar el .js con las instrucciones para usarlo y un ejemplo.

    Gracias por el interés.

Comentarios cerrados