Bacula, el servidor de backups libre
Para estrenar este nuevo año, les cuento del proyecto en el que estoy más activo estas últimas semanas. Hace tiempo que vengo buscando una realmente buena solución para el problema de las copias de respaldo, a.k.a.: backups.
Hace unos cuantos meses me topé (ya ni me acuerdo cómo) con Bacula, un software cliente-servidor realizar copias de respaldo que ya tiene un buen tiempo de desarrollo y su estado es muy avanzado.
El problema de los backups es bastante complejo si se lo quiere hacer de manera seria, y es por eso que manejar un software serio de backup no es algo simple. Bacula tiene varios componentes, programas que corren de manera separada y que hacen distintas tareas:
- Bacula Director (el servidor)
- Bacula File Daemon (el cliente)
- Bacula Storage Daemon (el que maneja el dispositivo de almacenamiento: cinta, disco, etc.)
- Bacula Console (consola de administración)
Cada componente se comunica con los demás a través de un protocolo de red, por lo que pueden estar corriendo en la misma máquina o en distintas, siempre y cuando tengan conectividad entre ellos.
Hace ya un par de meses comencé a moverme para hacer una consola de administración que sea gráfica, el proyecto tiene una consola de texto y dos prototipos de consolas gráficas (una hecha con las gnome-libs y otra con wx-widgets), pero todas están programadas en C++, lenguaje que prefiero evitar a toda costa. Mi idea es programar una interfaz gráfica usando Python y PyGTK+, los bindings de GTK+ para Python.
Kern Sibbald es la persona que comenzó y mantiene el proyecto. Kern fue uno de los fundadores de Autodesk, algo que me sorprendió descubrir hace relativamente poco, y es una persona extremadamente ordenada y correcta en su manera de llevar adelante el proyecto, sólo basta con leer un poco la lista bacula-devel para darnos cuenta. Hace como dos meses me puse en contacto con él para comentarle mi idea y me contestó enseguida diciendome que alguien más de Argentina estaba queriendo hacer lo mismo, y que ese alguien se llama Roberto Alsina, un amigo de Santa Fe que hace unos cuantos años se fue a Buenos Aires.
Me puse en contacto enseguida con Roberto y me comentó que estaba en la etapa de generar el binding entre las bibliotecas de bacula y Python, de manera de tener acceso desde Python a las funciones de alto nivel del protocolo de Bacula, y que su idea era utilizar Pyrex, un lenguaje muy similar a Python para generar bindings desde C hacia Python. En ese tiempo Roberto andaba con poco tiempo para ponerse así que me pasó algunos archivos que Kern le había escrito a modo de inicio de la idea, un set de pocas funciones indispensables para armar una consola, así que con eso me puse manos a la obra pero pronto vi que Pyrex no funciona (al menos no por ahora) del todo bien con C++ (casi todo Bacula está hecho en C++) así que me puse a buscar alternativas.
Después de leer un poco, me encontré con SWIG, que si bien no es una solución tan divertida como Pyrex, funciona muy bien con C++ y lo buenísimo es que exporta a varios lenguajes además de Python, muy interesante! Me puse a armar el archivo de interfaz entre C++ y Python y comencé las pruebas escribiendo una consola de texto mínima en Python que finalmente me tomó menos de 100 líneas, con comentarios incluídos…Python es una hermosura
Mandé aviso a Kern de los avances y se mostró muy entusiasmado, así que empecé a armar un esqueleto MVC (usando el módulo pygtkmvc) y migré mi consola de texto a una ventana gráfica de PyGTK. Luego fui agregandole cosas en la forma de lo que yo llamo programación evolutiva, pero siguiendo lo más estrictamente posible los patrones de Modelo-Vista-Controlador y Observer.
A medida que le iba mandando las novedades a Kern y el resto de los developers de Bacula en la lista, la gente se mostró cada vez mas entusiasmada, parece que hay una gran necesidad de algo amigable para manejar el excelente Bacula, tanto así que cuando Kern organizó una votación para ver cuales sub-proyectos pendientes deberían tener mayor prioridad, la GUI en Python recibió el 4to. lugar entre 25 candidatos! así que Kern me hizo un lugarcito en su repositorio CVS y ahi me mudé (estaba trabajando con SVN en mi server, snif!) inmediatamente.
Una de las mas fieras barreras que me encontré fue el tema de la sincronía que el software debía tener con el server del otro lado de la conexión. Al ser un programa single-threaded, si enviaba un comando al server y quedaba esperando respuesta, el resto de la interfaz quedaría congelada hasta que se recupere el control cuando la respuesta llegue. Esto era algo inadmisible ya que hay muchos comandos en Bacula que tardan varios segundos en llegar su respuesta…más aún cuando el servidor está en algún lugar remoto de Internet. Para resolver esto, primero comencé a ver los módulos de threading que trae Python en su distribución oficial y ya imaginaba el nivel de complejidad como iba aumentando de repente, hasta que un comentario de Kern me hizo cambiar de rumbo, hay una manera de registrar un callback en un file descriptor (como lo es una conexión de red, un archivo, etc.) de manera que sea ejecutado cuando algún evento suceda en ese file descriptor. Así que sabiendo esto, me armé un esquema de encolamiento de mensajes (una conexión soporta un sólo mensaje a la vez) con un sistema de callbacks y de este modo la consola gráfica no queda congelada esperando un comando. Me queda pendiente la gestión de la cola en el caso que un comando se esté tardando demasiado tiempo en responder y comandos automáticos (por ej: actualización de datos) se empiecen a encolar sin control.
Para no hacerla mas larga, estoy programando algo totalmente nuevo, un proyecto enteramente (bueno… un 99,99%) en Python, con los patrones MVC+Observer, usando mi toolkit gráfico favorito, en un proyecto que tiene 5 años de vida y una comunidad de usuarios y desarrolladores muy madura, en fin! una muy buena experiencia!



(4 votos)
Que bueno! Adelante con los buenos proyectos! (me alegro que lo estes difrutando!)
como va, la verdad te felicito x la iniciativa, cuando tengas una version que quieras probar, pasamela ya que estoy tratando de implementar Bacula en la Facultad donde trabajo y si bien no es muy complicado armar los jobs, una herramienta de este tipo simplificaria bastante las cosas.
Saludos, Cristian.
UTN Regional Delta
Campana, As. As.
Gracias por el artículo. Estoy echando un ojo a Bacula y buscando una interfaz gráfica y tu proyecto me parece muy interesante.
Por cierto, el enlace de pygtkmvc está roto, falta la c del final en la URL.
Gracias Rubén, acabo de corregir el error del enlace.
Hola mira estoy implementano ese proyecto en la universidad donde estudio, bueno apenas lo estoy empezando a desarrollar, me gustaría poder resolver dudas y poder comunicarme contigo. gracias
Hola Juliana, dejame un email de contacto y me comunico con vos
Me encontré con tu página de manera casual, actualmente estoy comenzando a familiarizarme con bácula y me interesó bastante tu proyecto y quisiera, de esta a tu alcance, me hagas llegar por esta vía cualquier información actualizada que tengas ya que el artículo que conseguí data de hace una año.
Gracias.
ea necesito una guia de instalacion de bacula
Hola Lucas, debo llevar a cabo tareas de backup pero soy novata en Linux, me aconsejas el uso de bacula? que tan dificil es su configuracion en la instalacion como su posterior uso? He encontrado informacion sobre un software llamado Amanda pero es complicada su configuracion…. que me dices de bacula? agradecere todo tipo de respuesta y recomendaciones. Gracias Lucas.
Virginia,
Si bien no conozco Amanda, me han comentado que es complicado de configurar. La solución de backup ideal dependerá de tu problema particular, por ejemplo cuantas PCs debés respaldar, el tipo de información y el volumen de la misma. Te doy un ejemplo simple: no es lo mismo respaldar 500 MB de información de un sistema contable que corre y se usa en una sola máquina (lo podés hacer todos los días en un pen-drive) que respaldar la información de archivos de oficina de toda una red en un edificio, donde los archivos están dispersos por cada estación de trabajo.
Bacula me ha servido bien para casos en los que hay más de 1 PC a la que respaldar.
Hola Lucas! Gracias x tu respuesta si la lei bien la respondiste solo q no respondi
. Bueno mi caso particular es el 2do, si bien no hay tanta informacion suelta por doquier, me voy mas al segundo caso . He tratado de configurar amanda pero sin exito no hay mucha info y me parecio si complicado la verdad. En fin opte por usar Bacula, estoy tratando de instalarlo y me salen errores de dependencias parece q necesito ciertas librerias. Ya encontre algunas y las instale pero resulta q ahora me sale q hay conflictos con una vcersion anterior q ya tenia instalada…en fin podrias darme una manito p empezar?? tienes algun email nose pot las dudas te paso el mio si es que podes…Muchas Gracias Lucas
virnieva@gmail.com
vikynieva@hotmail.com
Felicitaciones Lucas! Principalmente por el mérito de que te hayan dado pie en este proyecto tan popular.
Me interesa ir probando bacula, en mi caso estoy hablando de una red de más de 40 equipos (todos con Windows) que harían el backup en el server Linux.
Hola Lucas:
Recien comienzo en esta onda del soft libre y se me hizo necesario el uso de una herramienta como Bacula, me gustaría saber en que estado se encuentra el proyecto ahora, sobre todo en esta nueva fase que comenzaste a construir.
Hola Lucas:
Recien comienzo en esta onda del soft libre y se me hizo necesario el uso de una herramienta como Bacula, me gustaría saber en que estado se encuentra el proyecto ahora, sobre todo en esta nueva fase que comenzaste a construir.
Gracias
Saludos
Nuevo: Mi aporte al proyecto bacula quedó en el olvido porque nadie más quiso seguirlo. De todos modos, bacula cuenta con varias interfaces gráficas, la última y más “oficial” es la que se llama “bat”, que está siendo desarrollada por el mismo fundador del proyecto.