Una vez obtenido el tarball con los fuentes de jabberd2 (http://jabberstudio.org/projects/jabberd2/releases/) debemos recoger ciertos datos, presentados en la tabla, siguiente a fin de proceder con la instalación.
Información requerida para la instalación de Jabberd2.
Parámetro |
Requerido |
Descripción |
Su información |
Jabberd User and Group |
Sí |
Usuario y grupo que será usado para correr jabberd |
Usuario: jabber Grupo: jabber |
Directorio PID |
Sí |
Directorio donde jabberd guarda los archivos PID |
/usr/local/var/jabberd/pid |
Directorio Log |
No1 |
Directorio para los log de jabberd. Si no es especifica en los archivos de configuración por defecto el log es syslog. |
/usr/local/var/jabberd/log |
Paquete de Autenticación |
Sí |
Paquete de terceros para usarse en la autenticación de los usuarios |
MySQL, PostgreSQL, Berkeley DB, OpenLDAP con PAM |
Paquete para almacenamiento de Datos |
Sí |
Paquete de terceros para almacenar información de jabberd |
MySQL, PostgreSQL o Berkeley DB |
Directorio de Datos |
Berkeley DB |
Directorio para los archivos de Berkeley DB |
/usr/local/var/jabberd/db |
Usuario y clave para MySQL |
MySQL |
Usuario y clave MySQL que jabberd usara para conectarse |
Usuario: jabberd2 Clave: secreto |
Usuario y clave para PostgreSQL |
PostgreSQL |
Usuario y clave PostgreSQL que jabberd usara para conectarse |
Usuario: jabberd2 Clave: secreto |
Seteos de Conexión OpenLDAP |
OpenLDAP |
Seteos de conexión para su servidor OpenLDAP : FQDN del servidor o IP, puerto y versión (v2 o v3) |
|
Usuario y clave OpenLDAP |
OpenLDAP |
Usuario y clave para conectarse al servidor OpenLDAP. Necesario solamente si el servidor no acepta conexiones anónimas. |
|
|
|
|
|
Seteos de consulta OpenLDAP |
OpenLDAP |
ND (Nombre distinguido) Base y atributo ID de usuario usado para construir consultas para el servidor. El ND Base puede ser un el ND raíz del servidor o un NDR (nombre distinguido relativo) bajo el cual se encuentra el ID del usuario |
|
Nombre del Host |
Sí |
Nombre del host donde el servidor jabberd será instalado. Para servidores accesibles desde Internet, este debe ser algo parecido a midominio.com |
|
Ubicación de la Clave SSL |
No |
Ubicación para el archivo pem OpenSSL, necesario para comunicación encriptada |
/usr/local/etc/jabberd/server.pem |
Usuario y clave para el Router |
No |
Usuario y clave para la conexión de componentes con el componente Router de Jabberd |
Usuario: jabberd2 Calve: secret |
Una vez recabados estos datos, se está en condiciones de comenzar el proceso de instalación del servidor Jabberd.
Para comenzar, se deberá crear un grupo y un usuario jabber para ejecutar el servidor
su
groupadd jabber
useradd -g jabber jabber
Luego como superusuario se deberá ejecutar la siguiente secuencia de comandos con el fin de crear es directorio donde jabberd guardará los archivos pid
su
mkdir -p /usr/local/var/jabberd/pid/
chown -R jabber:jabber /usr/local/var/jabberd/pid/
Puede ahora (si lo desea) crear el directorio para los archivos de log (recomendado).
mkdir -p /usr/local/var/jabberd/log/
chown -R jabber:jabber /usr/local/var/jabberd/log
Nota: por defecto jabberd escribe los mensajes de log a syslog. Para que lo haga en directorio recién creado debe explicitarse en los archivos de configuración de los componentes del servidor. Más adelante veremos uno por uno estos archivos.
Para su instalación mas básica, Jabberd 2 tiene 2 prerequisitos:
Paquete de Almacenamiento de Datos (uno de los siguientes)
MySQL
PostgreSQL
Berkeley DB
Paquete de Autenticación (uno de los siguientes)
MySQL
PostgreSQL
Berkeley DB
OpenLDAP
PAM
Opcionalmente se necesitan:
OpenSSL (versión 0.9.6b o superior)
Libidn (versión 0.3.0 o superior)
Jabberd 2 puede ser instalado sin estos paquetes; aunque es fuertemente recomendado que se instalen (sobre todo OpenSSL en implantaciones empresariales).
Jabberd 2 requiere paquetes de almacenamiento de datos y para autenticación de los usuarios que a él se conectan ya que no dispone de almacenamiento propio. (esto no es una carencia y es beneficioso en grandes implantaciones. De hecho los demás productos de M.I. que implementan almacenamiento propio de datos, recomiendan que en grandes instalaciones, aproximadamente de más de 50 usuarios, se utilicen paquetes específicos de almacenamiento de datos). Observar que tanto MySQL, PostgreSQL como Berkeley DB cumplen con ambos requerimientos.
La instalación realizada en el marco de este proyecto utiliza MySQL versión Max (puede utilizarse la estándar) para ambos propósitos, pues este gestor es requisito también de otros componentes auxiliares tales como Bandersnatch (log de mensajes) y Users-Agent (Componente JUD – Jabberd User Directory).
Dado los bajos recursos de la PC utilizada, decidimos minimizar al máximo posible el uso de distintos paquetes, optando por aquellos que fueran comunes a varios servicios.
OpenSSL provee de encriptación a las comunicaciones cliente-servidor y servidor-servidor. El protocolo XMPP RFC3920 requiere que los servidores Jabberd soporten TLS (Transport Security Layer), TLS está basado en el protocolo SSL 3.0 de Netscape. OpenSSL implementa SSL v2 y v3 y TLS v1.
Se requiere OpenSSL versión 0.9.6b o superior
Se hace hincapié en el cuidado tomado en este paso. Si se debe actualizar OpenSSL, probablemente se tenga que recompilar y reinstalar el software que dependa de OpenSSL, pues de otra manera, podría dejar de funcionar adecuadamente. Por más información, habrá que dirigirse al sitio web de OpenSSL (www.openssl.org).
Básicamente deben seguirse estos pasos:
Bajar el archivo openssl-0.9.nz.tar.gz del sitio OpenSSL, donde "nz" es la última versión estable. El software que contiene el archivo es un paquete de encriptación fuerte por lo tanto deberá chequear el marco legal2 local antes de bajarlo.
Se deberá extraer los archivos fuentes de OpenSSL. Para ello se deberá cambiar de directorio pasando al mismo donde se haya realizado la descarga. Se deberá extraer los archivos ejecutando el siguiente comando
tar -zxvf openssl-0.9.nz.tar.gz
Esto creará un directorio openssl-0.9.nz. Se deberá cambiar de directorio a este último.
cd openssl-0.9.7b
Luego se deberá configurar OpenSSL para el sistema que se esté actualizando
./config --prefix=/usr
Por defecto OpenSSL se instala en /usr/local/openssl. Se usará la opción --prefix=/usr para que las bibliotecas OpenSSL se instalen en el directorio /usr. Se recomienda el uso de esta opción para que OpenSSL este más accesible, no solamente a Jabberd sino a otras aplicaciones también.
Se compilará usando make, pudiéndose testear antes de la instalación con make test.
No debería de haber errores en la salida. Ahora utilizando la cuenta de superusuario se procederá a a instalar usando make install.
Libidn provee funcionalidades de manipulación de strings a Jabberd 2. Anteriormente a Jabberd 2 stable 3, libidn estaba incluida en la distribución del servidor, pero por problemas de licencias debió ser excluida de la misma realizándose actualmente de manera independiente.
La versión mínima requerida es 0.3.0 o superior. Los fuentes y más información pueden obtenerse en www.gnu.org/software/libdn.
Pasos básicos de instalación
Descargar el archivo libidn-0.n.n.tar.gz
Descomprimir con tar -zxvf libidn-0.n.n.tar.gz
Cambiar de directorio cd libidn-0.n.n
Configurar Libdn para el sistema. Use la opción --prefix=/usr para que se instale en el directorio /usr/lib. El comando sería entonces
./configure --prefix=/usr
Compilar con make
Cambiar a superusuario e instalar
su
make install
Ahora resta instalar el paquete de Datos y el Autenticación, en este caso nosotros usamos MySQL MAX y se instalo usando los archivos .rpm provistos por la distribución Mandrake 10.0 CE. Los mismos corresponden a la versión 4.0.1.8-1mdk
La siguiente tabla muestra los distintos paquetes instalados
Nombre |
Descripción |
libmysql12 |
Este paquete contiene las bibliotecas compartidas (*.so*) las cuales son necesarias para que ciertos lenguajes y/o aplicaciones las carguen al utilizar MySQL. |
libmysql12-devel |
Este paquete contiene las bibliotecas y archivos de cabecera para el desarrollo de aplicaciones clientes. Necesarias para la compilación de Jabberd. |
MySQL-bench |
Contiene los scripts y los datos para benchmark. No es necesaria para la instalación de Jabberd. |
MySQL-client |
Contiene los clientes estándar de MySQL. |
MySQL-common |
Archivos comunes del servidor de base de datos MySQL. |
MySQL-Max |
Puede utilizarse la versión estándar pues no se están utilizando los features adicionales (que básicamente es incluir también el storage Engine de BerkleyDB) |
Los siguientes pasos intentan ser una descripción paso a paso de la compilación e instalación de Jabberd2 para el caso particular de nuestro proyecto. Información más detallada puede encontrarse en http://www.jabberdoc.org.
Primero de deberá descargar la última versión disponible del servidor jabberd2. El nombre del archivo será de la forma jabberd-2.0sn.tar.gz donde "n" es la última versión estable. Luego se deberá de descomprimir los fuentes a algún directorio (es recomendable en $HOME o en el propio “/home/jabber”) con tar -zxvf jabberd-2.0sn.tar.gz.
Procederemos ahora a la configuración. Primero nos cambiamos al directorio creado durante la descompresión cd jabberd-2.0sn. Se puede obtener información sobre las opciones de configuración realizando ./configure –help.
En nuestro caso usamos OpenSSL, MySQL, Libidn, se habilito la opción de depuración y se instaló en el directorio por defecto /usr/local/bin.
Para ello el comando es
./configure enable-debug --enable-mysql --enable-ssl --enable-idn \
--with extra-include-path=/usr/local/include:/usr/local/include/mysql \
--with-extra-library-path=/usr/local/lib:/usr/local/lib/mysql
Luego de configurado se ejecuta la siguiente secuencia a fin de compilar e instalar
make
su
make install
La ubicación de los archivos por defecto es la siguiente
Archivos de configuración .................... /usr/local/etc/jabberd
Binarios (jabberd, c2s, resolver,
router, s2s, sm) ............................. /usr/local/bin
Una vez instalados debemos establecer como propietario al usuario jabber
chown -R root:jabber /usr/local/etc/jabberd/*
chmod -R 640 /usr/local/etc/jabberd/*
ln -s /usr/local/etc/jabberd/ /etc/jabberd
ln -s /usr/local/etc/jabberd/ /home/jabber/etc
Este último es opcional, pero facilita las tareas de configuración. Se recomienda realizar también un enlace simbólico al directorio de logs previamente creado. Ahora ya tenemos el servidor instalado.
Utilizando el script db-setup.mysql en la distribución de jabberd crearemos la base de datos en el servidor MySQL donde Jabberd guarda la información por él necesitada.
mysql -u root -p
mysql>\. db-setup.mysql
Luego deberemos crear el usuario para que jabberd se conecte al servidor MySQL. Desde la consola MySQL ejecutamos el siguiente comando
GRANT select,insert,delete,update ON jabberd2.*
to jabberd2@localhost IDENTIFIED by 'secret';
Nota: Socket MySQL por defecto. Jabberd 2 estable 3 se conecta al servidor MySQL vía socket en /tmp/mysql.sock. . El socket por defecto, cuando se instala MySQL usando el código fuente, está en /var/lib/mysql/mysql.sock.por lo tanto se deberá crear un enlace simbólico:
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock.
Si no está seguro donde puede estar el socket de MySQL revise el archivo de configuración del servidor, usualmente ubicado en
/etc/my.cnf o /etc/mysql/my.cnf.
Comenzamos por una configuración básica para testear que el servidor levante en forma adecuada. Para ello deberemos editar el contenido de los archivos de configuración de cada componente de jabberd2 según sea necesario.
Comenzaremos por los archivos sm.xml y c2s.xml responsables de la configuración de los componentes Session Manager y Client to Server respectivamente.
El primer paso es el nombre del host en ambos archivos, este formará parte las JID (Jabber ID), por lo tanto deberá ser resoluble por la red. Es decir, si usamos algo del estilo jabber.fing.edu.uy este debe ser resuelto adecuadamente por el DNS.
Nota : se puede usar solamente el nombre del dominio (fing.edu.uy) para las ID de Jabberd2, pero en este caso el servidor DNS debe estar correctamente configurado para resolver las ID al host donde corre el servicio Jabber. Más adelante veremos el agregado de los registros SRV a la DNS.
Nota 2 : en la práctica realizada en el In.Co. logramos autorización para conectar nuestro servidor jabber (jabber.lab-inco.fing.edu.uy) dentro de la subred del laboratorio interno del Instituto. Para poder acceder al mismo dentro de facultad, debemos conectarnos al firewall (tortuga.fing.edu.uy) de dicha subred, en el cual, mediante port-forwarding se redirige la conexión al servidor. Por esta razón, las JID son del estilo tortuga.fing.edu.uy
En el archivo sm.xml deberemos ir a la siguiente sección
<!-- Session manager configuration -->
<sm>
<!-- Our ID on the network. Users will have this as the domain part
of their JID. If you want your server to be accessible from
other Jabber servers, this ID must be resolvable by DNS.s
(default: localhost) -->
<id>tortuga.fing.edu.uy</id>
En el archivo c2s.xml la sección correspondiente es
<!-- Local network configuration -->
<local>
<!-- Who we identify ourselves as. This should correspond to the
ID (host) that the session manager thinks it is. You can
specify more than one to support virtual hosts, as long as you
have additional session manager instances on the network to
handle those hosts. The realm attribute specifies the auth/reg
or SASL authentication realm for the host. If the attribute is
not specified, the realm will be selected by the SASL
mechanism, or will be the same as the ID itself. Be aware that
users are assigned to a realm, not a host, so two hosts in the
same realm will have the same users.
If no realm is specified, it will be set to be the same as the
ID. -->
<!-- <id>somemachine.somedomain.com</id> -->
<id>tortuga.fing.edu.uy</id>
Luego se deberá configurar la sección correspondiente al paquete de almacenamiento de datos y el de autenticación, en ambos casos se trata de MySQL (es la opción a usarse por defecto en ambos).
Comenzaremos con el almacenamiento, el cual se realiza en el sm.xml. Deberemos buscar la sección storage y editarla para que contenga la siguiente información
<!-- Storage database configuration -->
<storage>
<!-- By default, we use the MySQL driver for all storage -->
<driver>mysql</driver>
<!-- MySQL driver configuration -->
<mysql>
<!-- Database server host and port -->
<host>localhost</host>
<port>3306</port>
<!-- Database name -->
<dbname>jabberd2</dbname>
<!-- Database username and password -->
<user>jabberd2</user> <!-- database user for jabberd -->
<pass>secret</pass> <!-- database password for <user> -->
<!-- Transacation support. If this is commented out,
transactions will be disabled. This might make database
accesses faster, but data may be lost if jabberd crashes.
This will need to be disabled if you are using a MySQL
earlier than v3.23.xx, as transaction support did not
appear until this version. -->
<transactions/>
</mysql>
</storage>
Pasamos ahora a la configuración del paquete de autenticación. La misma se realiza en el archivo c2s.xml. La sección correspondiente dentro del archivo contiene más información (configuración completa en el apéndice 8.8.1.1), pero aquí por razones de espacio, dejaremos sólo lo pertinente.
<!-- Authentication/registration database configuration -->
<authreg>
<!-- Backend module to use -->
<module>mysql</module>
...
<!-- MySQL module configuration -->
<mysql>
<!-- Database server host and port -->
<host>localhost</host>
<port>3306</port>
<!-- Database name -->
<dbname>jabberd2</dbname>
<!-- Database username and password -->
<user>jabberd2</user>
<pass>secret</pass>
</mysql>
...
</authreg>
Luego de configurado el nombre del host, la aplicación encargada del almacenamiento de datos y la de autenticación, estamos en condiciones para testear el servidor jabberd.
Para ello debemos seguir la siguiente secuencia de comandos
su
su jabber
cd /usr/local/bin
./jabberd
El comando ps debería mostrar algo similar a lo siguiente
[jabber@localhost]$ ps
PID TTY TIME CMD
2674 pts0 00:00:00 bash
2724 pts0 00:00:00 perl
2725 pts0 00:00:00 router
2726 pts0 00:00:00 resolver
2727 pts0 00:00:00 sm
2728 pts0 00:00:00 s2s
2729 pts0 00:00:00 c2s
2730 pts0 00:00:00 ps
La conectividad puede ser testeada mediante algún cliente (GAIM, Gabber) registrando dos cuentas de prueba y estableciendo comunicación entre ellas.
1Nosotros aconsejamos usar un archivo de log distinto de syslog. Esto ayudará en la administración y mantendrá acotado el log del sistema.
2En países como Estados Unidos este tipo de software es considerado un arma y por lo tanto se halla bajo la reglamentación del Departamento de Defensa. El uso de software no habilitado es un delito federal grave. [21]
Estudio del Open/Free (GNU/Linux) como plataforma de servicios de red en entornos empresariales
Daniel Caraballo - Mario Madera - Marcelo Odin
Tutor: Ariel Sabiguero Yawelak
2004 - 2005.