Antes de nada explicaré los motivos por los que decidí
configurar mi servidor Jabber para que usara una base de datos MySQL
para almacenaje en vez de ficheros XML.
Los ficheros XML están muy bien, son un estándar
y no deben plantear problemas a nadie que conozca el lenguaje. Sin
embargo a la hora de automatizar tareas, como dar de alta y baja
automática a usuarios en el sistema, organizarlos por
grupos... es mucho más cómoda una base de datos. Además
si contamos con algún tipo de aplicación para gestionar
los datos de nuestros usuarios, integrar esta aplicación con
el servidor Jabber mediante un lenguaje de scripts como PHP es muy
fácil si utilizamos MySQL, o
cualquier otro motor de bases de datos, para almacenar los datos que
utilizará el servidor Jabber.
- Distribución y versiones.
Me gustaría indicar que este artículo no pretende
ser una guía exhaustiva de instalación y configuración
de Jabber, tan sólo pretendo comentar mi experiencia personal,
exitosa hasta ahora, y contar cómo lo conseguí. Quizás
esta experiencia pueda ser útil para
otros.
La distribución utilizada ha sido Mandrake 9.2, la versión
de Jabber la 1.4.3 y la versión de xdb_sql la 1.0. Desconozco
si en otras distribuciones o versiones de Jabber o xdb_sql el proceso
descrito será el mismo, o si los problemas que me he
encontrado serán iguales o distintos. Todos los comentarios en
este sentido serán bien recibidos.
Para instalar Jabber necesitaremos el código fuente
descargable desde http://www.jabber.org.
No podemos utilizar paquetes precompilados pues necesitaremos los
fuentes después en la compilación de xdb_sql.
Una vez descargado Jabber lo desempaquetaremos en su ubicación
final. En mi caso /usr/local y procederemos a configurarlo. Yo
no he usado ninguna opción de configuración, tan solo
[root@server:/usr/local/jabber-1.4.3]#
./configure.
Seguramente se quejará de que no tenemos Gnu Pth instalado,
así que procedemos a descargar este software y a instalarlo
con la combinación habitual
[root@server:/tmp/pth]# ./configure
....
[root@server:/tmp/pth]# make
....
[root@server:/tmp/pth]# make install
Como no hemos utilizado ningún prefijo en la configuración
ésto nos dejará librería libpth.so.20.0.22
junto con un enlace llamado libpth.so.20 en el directorio
/usr/local/lib. Como
necesitamos esta librería en el directorio /usr/lib
lo solucionamos haciendo un enlace simbólico.
[root@server:/usr/lib]# ln -s /usr/local/lib/libpth.so.20.0.22 ./libpth.so.20
Una vez que ya
tenemos Gnu Pth instalado y que la configuración de jabber no
se queja y termina correctamente hacemos
[root@server:/usr/local/jabber-1.4.3]# make
y ya tenemos compilado
nuestro servidor jabber. Para probarlo
[root@server:/usr/local/jabber-1.4.3]# ./jabberd/jabberd -h servidor.dominio
Y no debería
dar problemas, para pararlo CTRL+C o bien matar el proceso, pero
aseguraros en este caso de borrar el
fichero jabber.pid.
Descargamos xdb_sql
del sitio de jabber y lo colocamos dentro del directorio dónde
tenemos Jabber. Editamos el Makefile que trae y descomentamos lo que
se nos indica para elegir que motor de bases de datos deseamos
utilizar. Nosotros utilizaremos MySQL, así que quitamos los
comentarios de todas las líneas que hacen referencia a esto.
Para poder compilar
xdb_sql tendremos que variar un poco el
Makefile en la sección xdb_sql
OBJECTS,
dejándolo de la siguiente forma:
# Uncomment the file that corresponds to your DB
xdb_sql_OBJECTS= \
xdb_sql_mysql.o \
xdb_sql.o \
xdb_sql_auth0k.o \
xdb_sql_auth.o \
xdb_sql_offline.o \
xdb_sql_register.o \
xdb_sql_config.o \
xdb_sql_querydef.o \
xdb_sql_roster.o \
xdb_sql_last.o \
xdb_sql_backend.o \
xdb_sql_vcard.o \
xdb_sql_filter.o \
xdb_sql_generic.o \
# xdb_sql_pgsql.o
# xdb_sql_odbc.o
all: xdb_sql.so
Sencillamente he subido
la línea xdb_sql_mysql.o arriba y le he añadido
una barra al final.
Ahora necesitamos
tener instalado el paquete mysql-devel
y, al menos en mi caso, cambiar en el fichero xdb_sql_mysql.h
la línea:
#include <mysql.h>
por
#include "/usr/include/mysql/mysql.h"
Bien, con todo esto
cruzamos los dedos de las manos y de los pies y hacemos:
[root@server:/usr/local/jabber-1.4.3/xdb_sql]# make
Si todo ha ido bien ya
tendremos nuestra librería xdb_sql.so lista.
- Creando la base de datos.
Para crear la base de
datos tenemos un fichero llamado sample_dabase.sql. Un simple
[root@server:/usr/local/jabber-1.4.3/xdb_sql]# mysql -u root -p < sample_dabase.sql
debería
ser suficiente. Ahora con un cliente de MySQL, como mysqlcc
comprobamos que tenemos una nueva base de datos llamada Jabber con
unas cuantas tablas y un usuario homónimo que tiene algunos
permisos sobre esta base de datos. Yo le dí todos los permisos
(si tiene que fallar que no sea por falta de permisos) y le cambié
la clave (secret es demasiado evidente).
- Editando los ficheros de configuración
Pasaremos a configurar
primero xdb_sql. Editamos el fichero xdb_sql.xml
[root@server:/usr/local/jabber-1.4.3/xdb_sql]# vi xdb_sql.xml
Sólo tenemos que variar la sección connection para dejarla de la
siguiente forma:
<!-- Configure information
about the SQL connection -->
<connection>
<host>servidor.dominio</host>
<db>jabber</db>
<user>jabber</user>
<pass>tuclave</pass>
</connection>
Además en este
fichero nos indican lo que tenemos que variar en el fichero de
jabber.xml, que pasaremos a editar ahora.
[root@server:/usr/local/jabber-1.4.3]#
vi jabber.xml
Tan sólo hay que cambiar la sección xdb, que debería
ser similar a la siguiente:
<xdb id="xdb">
<host/>
<ns>jabber:iq:roster</ns>
<ns>jabber:x:offline</ns>
<ns>jabber:iq:filter</ns>
<ns>jabber:iq:last</ns>
<ns>jabber:iq:auth</ns>
<ns>jabber:iq:auth:0k</ns>
<ns>jabber:iq:register</ns>
<ns>vcard-temp</ns>
<load>
<xdb_sql>/usr/local/jabber-1.4.3/xdb_sql/xdb_sql.so</xdb_sql>
</load>
<jabberd:include>/usr/local/jabber-1.4.3/xdb_sql/xdb_sql.xml</jabberd:include>
<load>
<xdb_file>./xdb_file/xdb_file.so</xdb_file>
</load>
<xdb_file xmlns="jabber:config:xdb_file">
<spool><jabberd:cmdline flag= s >./spool</jabberd:cmdline></spool>
</xdb_file>
</xdb>
- Probando que todo funciona
Iniciamos el servidor (en el sitio de jabber existen scripts para
arrancarlo al inicio y poder utilizar el comando service)
[root@server:/usr/local/jabber-1.4.3]# ./jabberd/jabberd -h servidor.dominio &
Probamos con un cliente de jabber (gaim o kopete por ejemplo) y
observamos como los datos se almacenan en las tablas de la base de
datos.
Bueno, y eso es todo, espero que a alguien le pueda ser útil.