Introducción.
Cuando se tiene más de un ordenador o entornos virtualizados, muchas veces, es necesario sincronizar la información o tenerla accesible independientemente del entorno que estés utilizando. En tales casos, protocolos como SMB , NFS, FTP o SSHFS ayudan a compartir información pero no siempre la instalación es sencilla y necesita, en muchos casos, de una configuración que puede llegar a ser complicada. Estos casos, comandos como rsync, scp o, del que hablaré a continuación, unison, proporcionan una solución rápida, automatizan el trabajo y facilitan el manteniemiento posterior.
¿Qué es Unison?.
Unison es un comando similar a rsync y sirve para realizar sincronización bidireccional de réplicas entre diferentes ordenadores que pueden contener en diferentes sistemas operativos. Proporciona mecanismos para sincronizar dos réplicas de datos ubicados en diferentes sitios y tener en ambos lugares la información actualizada. Aunque, en este post hablaré de cómo configurar Unison para sincronizar datos de manera simple entre dos ordenadores con Linux instalado, se puede utilizar para sincronizar datos entre diferentes sistemas operativos así como en un solo ordenador con diferentes directorios.
Configuración de ejemplo.
La configuración se realizará mediante SSH así que es necesario tener un servidor SSH en, al menos, uno de los ordenadores y el otro actuará como cliente.
NOTA: Se puede utilizar el protocolo que proporciona Unison pero eso supondría trabajo extra en el servidor y en la red que necesitaría de la apertura del puerto correspondiente. Por otro lado SSH proporciona la seguridad que el protocolo de Unison carece.
Sí que, para facilitar la configuración, se pensará en el siguiente caso:
- Un ordenador actúa como sistema principal que puede tener réplicas con más de un cliente (ordenadores distintos) en su sincronización. Esto es, siempre serán los ordenadores que actúen como clientes los que comiencen la sincronización de datos.
- Se quiere una sincronización desatendida a determinadas horas del día. Esto necesita la configuración por SSH con certificado así como un ejecutor de la tarea (cron o similar).
- La sincronización se realizará aceptando por defecto lo que Unison considere más ajustado a la operación que se va a realizar.
La instalación que se propone es la siguiente:
- Dos máquinas con Unison (misma versión) instalado.
- Un servidor SSH en uno de los ordenadores. El otro actuará como cliente.
NOTA: Aunque es una situación muy rara, puede darse que la versión de OCAML que se está utilizando genere problemas, principalmente, entre diferentes paquetes de diferentes distribuciones Linux o entre Linux y Windows. En tal caso, siempre en conveniente descargarse el código fuente y construirlo con las mismas librerías.
¡Manos a la obra!
Certificado SSH
Aunque no es necesario para situaciones manuales, en instalaciones desatendidas, el realizar un certificado ssh para entrar sin necesidad de clave en SSH es lo más recomendado. Para ello, habría que realizar las siguientes tareas:
- Ejecutar el comando ssh-keygen en el ordenador que se configurará como cliente de la petición:
$ ssh-keygen -t ed25519 -b 4096 -C "{Comentario descriptivo del tipo de certificado}" -f $HOME/.ssh/unison_work
- Realizar la copia del certificado generado en el ordenador que tiene el servidor ssh levantado con el comando ssh-copy-id desde el ordenador cliente:
$ ssh-copy-id -i unison_work.pub {user}@{server FQDN or IP}
- Añadir el certificado a la gestión de certificados en el ordenador cliente:
$ ssh-add $HOME/.ssh/unison_work
- Verificar que se puede entrar en el ordenador servidor desde el cliente sin necesidad de contraseña:
$ ssh -l {user} {serverFQDN or IP}
Configuración de Unison.
Utilizaremos un profile (configuración de cómo sincronizar dos réplicas) de Unison para definir algunos directorios a compartir en la máquina cliente.
- Generar un profile de Unison en un fichero en el directorio $HOME/.unison que se llame Documents.prf.
- Construir en los dos ordenadores, los directorios de destino de la sincronización.
- Introducir, en el fichero, la siguiente configuración:
# Unison preferences
label = Common documents
root = {path_to}/Documents
root = ssh://{user}@{serverFQDN or IP}//{path_to}/Documents
sshargs = -C
- Probar la configuración mediante el siguiente comando:
$ unison Documents -auto -batch
- Si todo se efectuó correctamente, en el servidor de destion, en el directorio Documents en el path seleccionado se habrán sincronizado los datos que habíamos albergado en nuestro ordenador cliente.
Configuración de cron.
Para tener la sincronización definida todas las noches podemos recurir a cron. Para ello:
- Introducir en la tabla de cron del usuario {user}, la siguiente entrada:
0 * * * * {path_to}/unison Documents -auto -batch > /dev/null 2>&1
De esa manera cada hora cron ejecutará unison para sincronizar los datos.
NOTA: Evidentemente, se puede configurar cron para que se ejecute según las necesidades que tengamos.