Recomendaciones para un paquete que escupe segfaults

Uso habitualmente (por no decir siempre) debian. El caso es que la encargada de la biblioteca de un centro escolar me ha pedido que le haga el favor de hacerle algún programita para que el catálogo de libros disponibles se pueda consultar a través de la página del centro. Hasta aquí bien y parece fácil. Ahora entremos en los detalles. Primero explicaré los pormenores para evitar que alguien me sugiera soluciones que ya se me han ocurrido y he desechado. Al que le canse la prosa, que salte directamente a los párrafos escritos en negrita.

El programa que usan es el Abies 2, programa hecho con nuestros impuestos que la Administración no es ya que no lo publique como software libre, sino que ni siquiera facilita la descarga. Es un programa para windows, en que no hay separación entre cliente y servidor y cuya base de datos es un ficherito .mdb de los de access. Una joya, vamos, aunque hay que reconocer que la interfaz es sencillita y que para manejar una biblioteca pequeñita es más que suficiente.

El caso es que hay que extraer la información del fichero de access. Hay dos caminos: traducir el fichero a otro formato (por ejemplo, mysql) y usar esta copia como base de datos para la pequeña aplicación de consulta; o bien, intentar atacar directamente el fichero .mdb. Lo primero es el camino más fácil y, de hecho, curioseando por internet he visto que ya lo han hecho unos cuantos. Tiene dos desventajas esta solución: puede que el catálogo esté anticuado en el momento de la consulta, si ha cambiado sin que lo hayamos vuelto a traducir a mysql; y, sobre todo, no sirve para conocer si un libro ha sido prestado o no ya que los préstamos suceden todos los días varias veces a distintas horas. La segunda solución consiste en hacer la consulta sobre el propio fichero .mdb, así que no tendríamos estos problemas que surgen como consecuencia de estar consultando una copia y no la base de datos original.

Me he decantado por intentar hacer lo segundo que parece una solución más completa y evita tener que estar pendiente de hacer traducciones periódicas de la base a mysql. Además, es condición indispensable que el servidor que contenga la aplicación y el fichero mdb sea un linux con debian, que son los servidores que pone la Junta de Andalucía en sus centros. Para que el Abies pueda acceder al fichero basta con compartir por samba el directorio donde se almacene y montarlo automáticamente al arrancar el windows del ordenador de la biblioteca. Lo he consultado con alguno que compartía este fichero por red entre varios windows, para tener varios Abies instalados a la vez y me ha dicho que se podía usar el programa sin que se volviese irresistiblemente lento.

Y aquí empiezan los problemas. Para leer ficheros .mdb existen el linux las mdb-tools, que desgraciadamente parece que llevan bastante tiempo con el desarrollo parado (la última versión en su página oficial es de mediados del 2004). No he encontrado ninguna alternativa. Estas mdb-tools tienen una serie de aplicaciones que permiten consultar la base de datos del .mdb (aunque consultas muy simples, porque sólo permite consultas sobre una tabla a la vez, nada de joins ni cosas por el estilo) y además trae un driver odbc.

Con todo esto he pensado usar: mdb-tools+unixodbc, y ya tengo disponible la base de datos para cualquier lenguaje que tenga una api para odbc, y python+pyodbc para programar. Con esto me podría construir una librería para hacer las consultas a la base de datos de Abies.

Me dispongo a empezar e instalo las mdb-tools en debian. Pruebo a hacer un "SELECT * From Fondos" que es la tabla que almacena los libros y será por tanto sobre la que más consulte y... "Violación de segmento". Pruebo y pruebo y generalmente siempre devuelve el segmention fault de las narices. Sobre otras tablas a veces lo devuelve, a veces no. Me desespero un poco: pruebo a crear yo un .mdb que reproduzca el diseño del .mdb que tengo que tratar y lo mismo. Monto una debian lenny de 32 bits en una máquina por probara ver si es culpa de mi testing o de los 64 bits, pero naranjas de la china: más segmention fault. Ya un poco desesperado, instalo una gentoo de 32 bits en otra máquina virtual y... funciona sin problema. Instalo una gentoo de 64 bits y lo mismo: ni una violación de segmento. Así que creo que la culpa debe de ser de debian, pero no tengo ni idea de cómo solucionarlo o al menos de saber quién es el culpable: si la compilación de debian de esta aplicación u otra librería del sistema. ¿QUé me recomendáis? Porque sospecho que hacer un apt-src para que me compile las mdb-tools no me va a solucionar el problema.
mira las dependencias que tiene el paquete, y compara las versiones que tienes en la debian con las de la gentoo.
1 respuesta