Ejabberd y mod_archive

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.

Temas similares

  • cosme

    Hola

    Es de mi real necesidad llegar al fin de este tema por que necesito guardar las conversaciones y aunque y las xplicas pudieras darme una mano el caso es para comenzar estos pasos simplemente.
    ./configure –enable-odbc

    el sistema dice que no reconoce esto. mi pregunta ejecuntar esto dentro de algo???

    tengo instalado make, gcc por qué???

    disculpa mi novatada.

    Saludos
    Cosme

  • cosme

    socio tengo la 2.0.5 y del manual probé para poder guardar las conversaciones de usuarios pero no hace nada co crea ningún fichero.

    Cuando trato de implementar los pasos que describes
    ./configure –enable-odbc

    me pone que no reconoce el fichero.

    desde donde se corre esto??? o que falta por instalar???
    además cuandro trato de probar ejabberctl status me dice que no reconoce esto todo lo demás trabaja y la verdad es que necesito guardar las conversaciones ya el jefe las quiere.

    Qué puedes decirme de esto???

    Saludos
    Cosme

  • cloudadmin

    Hola buenos días, os hago un copy-paste de lo que he escrito en un blog. Creo que puede ser útil para la gente que quiera instalar el mod_archive en versiones de Linux nuevas como Ubuntu 12.04 lts server.

    gracias por vuestra ayuda, yo intento contribuuir con esto:

    ====================================================================
    All internet tutorials about mod_archive in
    Ejabberd are incomplete or very caotics. Or maybe are old. So my problem
    is I am using Ubuntu 12.04 server LTS with Mysql. And I did all the
    things that are explained in all blogs.

    So to install mod_archive I need to do this:

    The typical:
    svn co https://svn.process-one.net/ejabberd-modules
    cd ejabberd-modules/mod_archive/trunk
    ./build.sh
    cp ebin/*modules in EJABBERD

    and configure /etc/ejjaberd.cfg

    but with this methods EJABBERD does not work.

    So I discover that we need to compile other MODULE that are not explained in any site. The module is called CONN_MYSQL

    And we can get in the same ejabber-modules dowloaded. So in SVN (https://svn.process-one.net/ejabberd-modules) there are
    cd ejabberd-modules/mysql/trunk
    ./build.sh
    cp ebin/*modules in EJABBERD

    And work…..

    I need a lot of hours to discover this.

    I can not use this line configuration in ejabberd.cfg: {odbc_server,
    “DSN=ejabberd;UID=ejabberd;PWD=ejabberd”} because aplication crashes and
    says this:

    =ERROR REPORT==== 2012-11-28 18:01:08 ===
    E(:mod_archive_odbc:867) : should_store_jid failed: {xmlelement,
    “error”,
    [{"code","500"},
    {"type",
    "wait"}],
    [{xmlelement,
    "internal-server-error",
    [{"xmlns",
    "urn:ietf:params:xml:ns:xmpp-stanzas"}],
    []}]}

    So I use this line in ejabberd.cfg:
    {odbc_server, {mysql, “server”, “database”, “username”, “password”}}.

    and this line into the modules configuration:
    {mod_archive_odbc, [{database_type, "mysql"}, {default_auto_save, true}, {enforce_default_auto_save, true}]},

    So now works!!!!!!!!!

    I don’t remmember if i use

    ‘trunk’ or ‘branches/ejabberd-2.0.x’ in Emakefile . You could try one and if not works you could try the other.

    Ah! and remmember to compile with ./configure –enable-odbc the ejabberd source code. You can get this in wget http://www.process-one.net/en/ejabberd/ejabberd/2.1.11/ejabberd-2.1.11.tgz

    maybe it is necessary this packages:
    apt-get install iodbc libmyodbc

    Good luck!!

    ================================================================