En un momento de descuido la encontré husmeando el libro "Linux Server los mejores trucos" de Bill von Hagen y Brian K. Jones.
El primer contacto de mi hija con Linux. Entiendan a su padre por esta entrada ;)
Blog [otro más] de temas relacionados con el software libre, Linux, tecnología, administración de redes y otras cosas que ya ni me acuerdo...

Muchas veces habrán visto que muchos sitios de descargas en Internet brindan información de los hash de los archivos ofrecidos. Llamamos hash al resultado de una función matemática o algoritmo aplicado al contenido de un archivo (o una frase). Esta función o algoritmo debería dar un hash o resultado único. Así, dos archivos idénticos dan como resultado un único hash pero dos diferentes deberían dar resultados distintos.
Si calculamos el hash del archivo descargado y lo comparamos con el que figura en el sitio desde donde lo descargamos podemos saber si el mismo está truncado o si es una copia fiel al original.
Los algoritmos hash más usados para la comprobación de archivos son MD5, SHA1 y CRC-32 a pesar que se han encontrado fallas o colisiones en algunos de ellos. Decimos que un algoritmo hash posee colisiones cuando se encuentra que devuelve el mismo resultado ante dos entradas distintas. Este es un problema criptográfico que no pienso exponer aquí (no me dan los conocimientos). Para el uso en la comprobación de integridad de archivos estos algoritmos siguen siendo ampliamente usados.
En Linux tenemos varias herramientas para el cálculo de hash para estos algoritmos. Por ejemplo, md5sum (MD5) o sha1sum (SHA1). En Windows tenemos algunas en consola pero una realmente útil es Hashtab que corre sobre NT, 2000, 2003, 2008, XP y Vista.
Hashtab es un software que agrega una solapa "Hash del archivo" a la ventana de Propiedades de un archivo y que calcula los hash MD5, SHA1 y CRC-32.


Desde 2006 estuve siguiendo la evolución de un proyecto de código abierto llamado DimDim que permitía realizar video conferencias desde la web usando el servidor red5. Soporté sus bugs, sus crash y la indiferencia de los administradores del proyecto ante las mis dudas y las de otros usuarios que rondamos por el foro.
Lo que no pude soportar es que en las últimas versiones el proyecto anunció la aparición de Dimdim Pro y Dimdim Enterprise que no son de código libre y son pagas. Queda la versión DimDim Open Source que se distribuye bajo licencia GPL pero limitada a sólo 5 participantes concurrentes.
Entiendo que esta gente quiera ganar dinero. Todos lo queremos hacer. Pero no me parece justo que se limite las funciones de la versión GPL. Así que desinstalé DimDim de todos los lados donde lo estaba probando y me despedí del maldito proyecto.
Y cuando ya estaba decidido a crear un fork de DimDim o empezar un proyecto totalmente nuevo me encontré con OpenMeetings.
A continuación algunas de las características de OpenMeetings:
Luego de instalarlo y probarlo en varias condiciones puedo afirmar que OpenMeetings supera ampliamente las características de DimDim. Y como si fuera poco, sólo requiere en los clientes un navegador que soporte Flash 9 y tenga Java instalado (además de una WebCam y/o un micrófono)
En la siguiente figura pueden observar como se ve una videoconferencia con dos participantes:

Noten que también los participantes están visualizando también un documento de Word.
En la siguiente imágen pueden ver la pizarra en acción:
Empezando...
1) Instalación de Sun Java Development Kit
Como OpenMeetings necesita de Sun Java Development Kit vamos a tener que habilitar los repositorios de la rama non-free de Debian. Para ellos editamos el archivo sources.list:
# pico /etc/apt/sources.list
Agregamos non-free a alguno de los repositorios que figuran allí al final de la línea. En mi caso quedó:
deb http://ftp.debian.org/debian/ etch main stable non-free
La dirección puede ser distinta en el caso de uds, dependiendo del lugar desde donde prefirieron obtener los paquetes de Debian en el momento de la instalación.
Actualizamos el listado de paquetes:
# apt-get update
Instalamos finalmente Sun Java Development Kit:
# apt-get install sun-java5-jdk
Finalizando la instalación se nos presentará el acuerdo de licencia de usuario final (EULA) de Sun la cual debemos aceptar.
2) Instalación de MySQL
Para instalar MySQL ejecutamos:
# apt-get install mysql-server
Antes de seguir, asignamos una clave al usuario root de MySQL:
# mysqladmin -u root password 'pon_tu_clave_aqui'
donde 'pon_tu_clave_aqui' es la clave elegida.
Imagino que no eligieron la misma clave que el usuario root del sistema, que tiene una cantidad de caracteres aceptable y que guardarán la clave bajo siete llaves (como mínimo)
Asegurado el usuario root de MySQL, creamos una base de datos y un usuario con permisos para gestionarla.
# mysql -p -u root
Ingresamos la clave recién cambiada para root y nos encontraremos en la consola de MySQL. Allí creamos la base de datos ingresando:
mysql> CREATE DATABASE openmeetings DEFAULT CHARACTER SET 'utf8';
Con este comando creamos la base de datos llamada "openmeetings" pero el nombre puede ser cualquier otro.
Ahora creamos un usuario con todos los permisos para la base de datos recién creada:
En este caso llamé "openmeetings" al usuario también. La clave de dicho usuario en el ejemplo es "rstallman". Sean libres de cambiar estos datos.
Salimos de la consola de MySQL con:
mysql> quit
O también:
mysql> \q
3) Instalación de Xvfb
Estamos en un servidor que debería no tener instalado ningún entorno gráfico. Pero necesitaremos de OpenOffice que requiere de uno para correr. La solución a este conflicto es utilizar Xvfb (X Virtual FrameBuffer) el cual no es más ni menos que un servidor X11. La diferencia de los otros servidores X11 es que este en particular no muestra nada en pantalla, llevando todas las operaciones gráficas en memoria.
Nota: Como comenta Kunthar, a partir de OpenOffice 2.3 ya no es necesario instalar Xvfb. Esto deberían tenerlo en cuenta aquellos que piensan instalar OpenMeetings en otras distribuciones como por ejemplo Ubuntu que ya tiene esa versión de OpenOffice. Sin embargo, para Debian Etch, donde la versión de OpenOffice es 2.0.4.9 debemos instalar Xvfb.
Ahora que los he convencido, instalamos Xvfb:
# apt-get install xvfb
Para poder correr el servidor X requiere de un juego de fuentes. Así que, si no quieren renegar más adelante, la instalamos ahora:
# apt-get install xfonts-base
Otro punto importante es que Xvfb requiere de xauth pero Debian no incluye esta dependencia del paquete xvfb. No se si es un bug o que pero lo cierto es que perdí mucho tiempo intentando levantar el Xvfb sin errores.
La aplicación xauth sirve para que el cliente se pueda autenticar con un servidor X y viene dentro del paquete xbase-clients:
# apt-get install xbase-clients
Para probar que Xvfb está bien instalado podemos correr el siguiente comando:
# Xvfb :1 -screen scrn 800x600x16
Este comando levanta al servidor de X escuchando conexiones como servidor 1, con una profundidad de 16 bits, un ancho de 600 píxeles y un alto de 800 píxeles.
Luego de algunos mensajes el servidor debería estar levantado. Para volver al intérprete de comandos pulsamos Ctrl+C.
Créanme: si hasta aquí toda ha ido bien pueden relajarse un poco. El camino que nos queda es sencillo aunque no menos tedioso.
4) Instalación de OpenOffice
OpenOffice es necesario para la conversión de los formatos de documentos Word y Excell a los propios de este paquete de oficina.
Para instalarlo:
# apt-get install openoffice.org
Tarda bastante la instalación de este paquete. Aquí es donde se torna aburrida la instalación.
Una vez terminada debemos editar el archivo Setup.xcu ubicado en el directorio de OpenOffice:
# pico /usr/lib/openoffice/share/registry/data/org/openoffice/Setup.xcu
Buscamos la línea que contiene <node name="Office"> e insertamos justo debajo las siguiente lineas:
<prop oor:name="ooSetupConnectionURL" oor:type="xs:string">
<value>socket,host=localhost,port=8100;urp</value>
</prop>
Esto es para que OpenOffice escuche desde localhost conexiones por el puerto 8100 mediante el protocolo remoto UNO (urp). Por allí, OpenMeetings se comunicará con OpenOffice para la conversión de documentos que suban los usuarios de las conferencias.
5) Instalar ImageMagick
ImageMagick es un conjunto de herramientas que permiten manejar, modificar y convertir imágenes entre más de 100 formatos distintos.
Para instalarlo, simplemente ejecutamos:
# apt-get install imagemagick
6) Instalación de SWFTools
SWFTools son un grupo de herramientas de Código abierto para crear y manipular archivos SWF, el formato utilizado por el software de animación Adobe Flash (anteriormente Macromedia Flash).
Como SWFTools está en los repositorios de la versión inestable de Debian (llamada Sid) vamos a bajar el paquete y compilarlo. Otra opción sería editar de nuevo /etc/apt/sources.list y cambiar “etch” por “sid” para luego ejecutar un apt-get update y finalmente apt-get install swtools.
Pero antes, vamos a instalar algunas librerias y herramientas que son utilizadas por SWFTools.
# apt-get install gs-gpl libart-2.0-2 libt1-5 libungif4g
En el momento de escribir esta entrada la última versión de SWFTools era la 0.8.1.1. Hay varios lugares donde está disponible el paquete para Debian.
Elijamos un lugar donde bajar el paquete. En mi caso, en el directorio /root:
# cd /root
Bajamos allí el paquete .deb:
# wget http://ftp.it.debian.org/debian/pool/main/s/swftools/swftools_0.8.1-1_i386.deb
# dpkg -i swftools_0.8.1-1_i386.deb
Borramos el paquete de instalación:
# rm swftools_0.8.1-1_i386.deb
7) Instalación de Red5
Red5 es un servidor Open Source para entregar contenido en streaming en Flash. Para ello utiliza el protocolo RTMP (Real Time Messaging Protocol) con lo cual se puede transmitir contenido en tiempo Real.
Bajamos el paquete .deb de Red5 versión 0.6.3 que es la que soporta a OpenMeetings 0.5 Final:
# wget http://dl.fancycode.com/red5/0.6.3/debian/red5_0.6.3-1_all.deb
Y ahora lo instalamos:
# dpkg -i red5_0.6.3-1_all.deb
Borramos el paquete de instalación:
# rm red5_0.6.3-1_all.deb
8) Instalación de Openmeetings
Finalmente, llegó la hora de instalar Openmeetings. Como el paquete de instalación viene comprimido con zip, instalamos unzip para descomprimirlo:
# apt-get install unzip
Nos movemos al directorio donde red5 mantiene las aplicaciones web:
# cd /usr/lib/red5/webapps
Descargamos el paquete de instalación de Openmeetings. La versión en este momento es la 0.5 Final como ya había comentado:
# wget http://openmeetings.googlecode.com/files/openmeetings05Final.zip
Descomprimimos:
# unzip openmeetings05Final.zip
Esto crea el directorio "openmeetings" donde esta la estructura y archivos necesarios para correr la aplicación.
Borramos el archivo comprimido:
Cambiamos de directorio:
# cd /usr/lib/red5/webapps/openmeetings/jod
Damos permisos de ejecuación a los archivos de dicho directorio:
# /usr/lib/red5/webapps/openmeetings/jod /# chmod +x *.sh
Cambiamos al directorio "conf" donde se guardan los archivos de configuración de OpenMeetings.
# cd /usr/lib/red5/webapps/openmeetings/conf
Para usar MySQL como base de datos renombramos:
# cp mysql_hibernate.cfg.xml hibernate.cfg.xml
Editamos hibernate.cfg.xml recién generado:
# pico hibernate.cfg.xml
Buscamos la línea con el comentario <!-- User / Password -->.
<property name="connection.username">openmeetings</property>
<property name="connection.password">rstallman</property> <property name="connection.url">jdbc:mysql://localhost/openmeetings</property>
# /etc/init.d/./red5 restart
Si no hemos obtenido ningún mensaje de error en la consola, podemos seguir adelante. El siguiente paso consiste en abrir nuestro navegador y dirigirnos a:
donde en "mi-ip" va la dirección IP de nuestro servidor OpenMeetings. Deberían ver una página como la siguiente:
Muy bien, como todo el mundo sospecha hay que entrar en el enlace "continue with STEP 1".
Luego de completar el formulario pulsamos el botón "INSTALL". Esto inicia el proceso de instalación, configuración y de generación de las tablas necesarias en la base de datos. Pasados unos minutos (no más de 2 o 3 minutos) deberíamos ver una página con el siguiente mensaje:
Lamentablemente durante la instalación no se nos informa si hubo errores. Tampoco se muestra el avance en la instalación o que es lo que está ocurriendo. Este es un punto débil de OpenMeetings. Así que, si luego de un par de minutos no llegamos a esta página, debemos suponer algo anduvo mal. Si es así tendríamos que revisar el archivo hibernate.cfg.xml en primer instancia para ver si el nombre de la base de datos, el usuario y clave son las correctas. Una vez confirmado esto, podríamos entrar a la consola mysql para ver si al menos se han creado las tablas en la base de datos.
Levantando el servicio de OpenOffice
Deje este punto para el final para no complicar más las cosas y no sumar puntos de falla. Si no existieron problemas hasta ahora, nos quedaría levantar el servicio de OpenOffice.
Si sólo estamos haciendo las primeras pruebas con OpenMeetings tal vez lo mejor es ejecutar desde la consola (todo en una sola línea):
# xvfb-run --server-args='-screen 0 800x600x16' -a /usr/lib/openoffice/program/soffice -headless -nologo -norestore
Si ya estamos seguros que todo está funcionando correctamente, es necesario que ese comando se ejecute en forma automática. Yo lo coloqué en el script de arranque de red5:
# cd /etc/init.d
Primero hacemos una copia de seguridad del archivo original:
# cp red5 red5.old
Editamos el archivo:
# pico red5
Buscamos la función que levanta el servicio de red5 la cual se llama d_start(). Justo debajo del comienzo de la función agregamos:
xvfb-run --server-args='-screen 0 800x600x16' -a /usr/lib/openoffice/program/soffice -headless -nologo -norestore &
sleep 5
Ahora, buscamos la función d_stop() que es la encargada de bajar el servicio de red5. Justo debajo de la linea d_stop() agregamos:
pkill soffice.bin
pkill xvfb-run
Con esto garantizamos que cuando levante el servicio red5 también se levante el de OpenOffice.
Luego, con:
./red5 start
Reiniciamos el servicio.
a) Activando los logs en red5
El servidor red5 por defecto no genera logs. Para activar los logs editamos el archivo log4j.properties.
# pico /usr/lib/red5/conf/log4j.properties
Cambiamos la primera línea por:
y luego reiniciamos red5.
b) Buscando errores
Podemos leer el archivo de logs de OpenMeetings como:
tail -f /usr/lib/red5/openmeetings.log