Hace algo de tiempo conocí ejabberd, es un servidor de Jabber de alto desempeño; inicialmente debo admitir que no me gustó mucho principalmente porque está escrito en Erlang y que tenía poca documentación, además de que cometer un error de configuración mostraba muchisimos datos sin sentido para programadores de Erlang y nada en lenguaje ‘humano’.
Ahora el proyecto ha madurado considerablemente y una de las ventajas por la que sigo utilizando Ejabberd es que es el único servidor Jabber open source en manejar clustering.
Recientemente me pidieron instalar un módulo para almacenar la historia de las conversaciones, algo que hace por ejemplo Google Talk (que está implementado en Jabber), este es el protocolo: XEP-0136 y utilizar la opción de guardar conversaciones automáticamente (sin intervención del usuario para solicitar que se almacene).
Hay diversos modulos para implementar esto en ejabberd, pero buscando me encontré que mod_archive es el mejor y el que se encuentra con desarrollo activo.
El problema es que prácticamente no existe documentación ni información de si por ejemplo funcionaría en Ejabberd 2 que es la versión del servidor que utilizo.
A prueba y error y con algunos pequeños documentos que me encontré descubrí que si funciona en la versión 2.0, a continuación vienen los pasos para hacerlo funcionar con MySQL:
- Compilar ejabberd para que acepte odbc
./configure --enable-odbc
- Descargar los módulos de ejabberd
svn co http://svn.process-one.net/ejabberd-modules
- Compilar el módulo interno de MySQL de los módulos descargados de ejabberd
cd mysql/trunk ./build.sh cp ebin/*.beam /directorio_ejabberd/var/lib/ejabberd/ebin/
- Compilar el módulo de archivo (mod_archive)
cd mod_archive/trunk ./build.sh cp ebin/*.beam /directorio_ejabberd/var/lib/ejabberd/ebin/
- Editar el archivo de configuración de Ejabberd para habilitar odbc
{odbc_server, {mysql, "direccion_servidor", "base_de_datos", "usuario", "contraseña"}}.
- Editar el archivo para agregar mod_archive (parte de
{modules
,…){mod_archive_odbc, [{database_type, "mysql"}, {default_auto_save, true}, {enforce_default_auto_save, false}, {default_expire, infinity}, {enforce_min_expire, 0}, {enforce_max_expire, infinity}, {replication_expire, 31536000}, {session_duration, 1800}, {wipeout_interval, 86400} ]},
- Crear la base de datos utilizando el archivo:
ejabberd-modules/mod_archive/trunk/src/mod_archive_odbc_mysql.sql
Hay que hacer notar que el archivo sql es para MySQL 5 y posteriores (para utilizarlo con una versión anterior hay que eliminar la parte de triggers), además el archivo crea una base de datos llamada ejabberd, si se necesita otro nombre editarlo para ya sea eliminar la parte de crear o cambiar el nombre de la base de datos que será creada; utiliza el prefijo archive_
para sus tablas.
Iniciar (o reiniciar) el servicio de ejabberd y a partir de ahora todas las conversaciones serán guardadas en mysql.