Configurar autenticación mysql en ejabberd – ejabberd mysql auth


Si tienen un servidor jabber funcionando, es muy probable que tarde o temprano tengan que cambiar el modo de autenticación por mysql.

Para esto debemos tener instalado el Erlang Sql Native Driver, que lo podemos descargar desde aquí Erlang Mysql Driver.

En el Mysql creamos el usuario ejabberd :

$ mysql -h localhost -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 4.1.16-max

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> GRANT ALL ON ejabberd.* TO ‘ejabberd’@’localhost’ IDENTIFIED BY ‘password’;
Query OK, 0 rows affected (0.00 sec)

Creamos la base de datos ejabberd :

$ mysql -h localhost -u ejabberd
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 4.1.16-max

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> CREATE DATABASE ejabberd;
Query OK, 1 row affected (0.00 sec)

Descargamos el schema (puede descargarse desde otros servidores):

$ wget https://git.process-one.net/ejabberd/mainline/blobs/raw/2.1.x/src/odbc/mysql.sql

Importamos el schema en la base ejabberd:

$ mysql -D ejabberd -h localhost -p -u ejabberd < mysql.sql

Chequeamos la estructura de tablas en la base ejabberd:

$ echo “show tables;” | mysql -D ejabberd -h localhost -p -u ejabberd

Tables_in_ejabberd
last
privacy_default_list
privacy_list
privacy_list_data
private_storage
pubsub_item
pubsub_node
pubsub_node_option
pubsub_node_owner
pubsub_state
pubsub_subscription_opt
rostergroups
rosterusers
roster_version
spool
users
vcard
vcard_search

Ahora en el /etc/ejabberd/ejabberd.cfg modificamos la siguiente configuración (si instalaron el ejabberd desde los fuentes, el cfg puede estar en /opt/ejabberd/etc/):

Comentamos la siguiente línea:

{auth_method, internal}.

Agregamos las siguientes líneas:

{auth_method, odbc}.
{odbc_server, {mysql, “localhost”, “ejabberd”, “ejabberd”, “password”}}.

La configuración del mysql tiene el siguiente formato:

{mysql, Server, DB, Username, Password}

Adicionalmente cambiamos la siguiente configuración:

mod_last a mod_last_odbc

mod_offline a mod_offline_odbc (almacena mensajes offline en el mysql)

mod_roster a mod_roster_odbc (almacena lista de contactos en el mysql)

mod_private a mod_private_odbc

mod_privacy a mod_privacy_odbc

mod_pubsub a mod_pubsub_odbc

mod_vcard a mod_vcard_odbc (almacena descripcion de usuarios en mysql)

Restarteamos el ejabberd por las dudas:

# service ejabberd restart

Con esto cambios tendremos al ejabberd autenticando contra una base de datos mysql.

Como el metodo de conexión es por odbc, es posible aplicarlo a otros motores de base de datos como por ejemplo SQL Server.

Si alguien lo probó con SQL Server puede decirme como les fué…

LVM: Reducir Volúmen Lógico


LVM: Reducir Volúmen Lógico
Como es material de consulta frecuente, aquí va este ayuda memoria:

El filesystem debe estar desmontado, por lo que deberemos bootear en modo “linux rescue” o con un Live CD.
En este ejemplo achicaremos el espacio del filesystem de 60Gb a 50Gb.

Es muy recomendable hacer un chequeo del filesystem antes de achicarlo:

# umount /dev/VolGroup00/LogVol01

# e2fsck -f /dev/VolGroup00/LogVol01

Ojo que el tamaño (50 G)  es el tamaño total del nuevo volúmen lógico.

Redimensionamos el filesystem:

# resize2fs /dev/VolGroup00/LogVol01 50G

Redimensionamos el volúmen lógico:

# lvreduce -L 50G /dev/VolGroup00/LogVol01

Volvemos a montar:

# mount /dev/VolGroup00/LogVol01 /mnt/sysimage

Physical to Virtual with rsync – Migrar Servidores Fisicos a Virtuales


Resulta que me encuentro con un gran tema: como pasar un servidor (linux por supuesto) de físico a virtual sin tener que reinstalarlo por completo.

Un opción que evalúe fué: http://www.mondorescue.org/ (gracias Mauro) esta aplicación (excelente por cierto) permite realizar un backup completo del sistema operativo y lo almacena en archivos .ISO, uno o varios, del tamaño que le indiquemos.
Esta opción no debe descartarse para esta taréa, aunque merece que sea evaluada en otro post.

La opción que hoy nos interesa es la del rsync.
(Vale la aclaración de que hay cientos de maneras de hacer esta taréa. Yo les planteo la que se me ocurrió a mi y dió resultado.)

Para pasar un equipo fisico a virtual con rsync, lo que hice fué lo siguiente:
Crear la maquina virtual destino con los parámetros adecuados, e instalando el mismo sistema operativo base que el servidor físico (en mi caso un CentOS 5.5).
Para que? Para que el filesystem sea lo mas parecido entre el orígen y el destino.

En el equipo físico realice un rsync como el siguiente:
# rsync -vah –exclude-from=excludes.cfg / root@equipo-virtual:/

En el excludes.cfg puse lo siguiente:

/proc/
/tmp/
/mnt/
/mirror/
/etc/fstab
/etc/grub/
/etc/sysconfig/network-scripts/ifcfg-eth0

En el equipo virtual necesito que el fstab mantenga la configuración original, al igual que la placa de red y el grub. Es por eso que están en la exclusión.

Una vez realizado el rsync, y verificado que se hayan copiado todos los directorios, en la maquina virtual, necesitamos bootear con el CD de intalación en modo rescate “linux rescue” para hacer la reinstalación del grub:

# grub-install /dev/hdc

Si el grub-install nos da el error:
“/dev/hdc does not have any corresponding BIOS drive”
Lo resolvemos agregando la siguiente línea en el /boot/grub/device.map:
(hd2) /dev/hdc

Un detalle muy importante:
Va a ser necesario generar una nueva imagen de los módulos del kernel dado que el initrd del equipo fisico, tiene una entrada (init) donde guarda los nombres de los dispositivos de disco en uso (sda, sdb, etc) y por mas que hayamos guardado el fstab de la máquina virtual, en el momento de booteo va a buscar estos dispositivos definidos en el initrd.
Para crear un nuevo initrd que se utilizará en el booteo hagamos lo siguiente:
Hacemos un backup primero del actual en uso:
# cp initrd-$(uname -r).img initrd-$(uname -r).img.back

Compilamos uno nuevo:
# mkinitrd initrd-$(uname -r).img $(uname -r)

Con esto, la máquina virtual debería reinicar correctamente y deberíamos tener el sistema operativo funcionando igual que en el equipo físico.

KVM: Configurar Bridged Networking – Adaptador Puente


Bueno, resulta que entrando en el mundo de la virtualización, este es un tema de consulta permanente, así que merece la presente entrada.

Aplicable a: Fedora / CentOS / Redhat con KVM / qemu / libvirt

– Deshabilitar el Network Manager. Aparentemente el Network Manager no soporta el bridging.

# chkconfig NetworkManager off
# chkconfig network on
# service NetworkManager stop
# service network start

Otra opción para no deshabilitar el servicio es editar el /etc/sysconfig/network-scripts/ifcfg-eth0 y agregar la entrada: “NM_CONTROLLED=no”.

– Creamos las interfaces bridge:

Editar el /etc/sysconfig/network-scripts/ifcfg-eth0 y agregar la entrada:

BRIDGE=br0

Crear el archivo /etc/sysconfig/network-scripts/ifcfg-br0

con un contenido similar a este:

DEVICE=br0
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes
DELAY=0

Ojo que “Bridge” es case-sensitive y va como en el ejemplo.

– Restarteamos la red

# service network restart

– Configuramos las iptables para que permitan que el trafico sea redirigido forwarded a través del bridge:

# iptables -I FORWARD -m physdev –physdev-is-bridged -j ACCEPT
# service iptables save
# service iptables restart

Opcionalemente podemos evitar que el trafico del puente sea procesado por las reglas de las iptables. Esto lo hacemos modificando los parámetros del kernel en el /etc/sysctl.conf y agregando las siguientes líneas:

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

Luego, releemos los parametros del kernel:

# sysctl -p /etc/sysctl.conf

– Restarteamos el libvirt daemon:

# service libvirtd reload

Ahora, debería aparecer el “shared physical device” habilitado.

– Podemos chequear el bridge de la siguiente manera:

# brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.000000000000       yes
br0             8000.000e0cb30550       no              eth0

Ojo que este bridge es completamente independiente del virbr0.

El virbr0 se utiliza unicamente para hacer NAT.