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 su instalación es sencilla y requieren, en muchos casos, de una configuración que puede llegar a ser complicada. En estos casos, herramientas como rsync, scp o, de la que hablaré a continuación, Unison, proporcionan una solución rápida, automatizan el trabajo y facilitan el mantenimiento posterior.
¿Qué es Unison?
Unison es una herramienta de sincronización de archivos similar a rsync que sirve para realizar sincronización bidireccional de réplicas entre diferentes ordenadores que pueden tener distintos sistemas operativos. Proporciona mecanismos para sincronizar dos réplicas de datos ubicadas en diferentes lugares y mantener la información actualizada en ambos sitios. Aunque en este post hablaré de cómo configurar Unison para sincronizar datos de manera simple entre dos ordenadores con Linux instalado, también se puede utilizar para sincronizar datos entre diferentes sistemas operativos o entre directorios de un mismo ordenador.
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 (que actuará como servidor) y el otro actuará como cliente.
NOTA: Se puede utilizar el protocolo propio de Unison, pero eso supondría trabajo extra en el servidor y en la red al necesitar la apertura del puerto correspondiente. Por otro lado, SSH proporciona la seguridad de la que el protocolo nativo de Unison carece.
Para facilitar la configuración, plantearemos el siguiente escenario:
- Un ordenador actúa como sistema principal que puede tener réplicas con más de un cliente. Siempre serán los ordenadores clientes los que inicien la sincronización de datos.
- Se quiere una sincronización desatendida a determinadas horas del día. Esto requiere autenticación SSH con certificado (sin contraseña) y un programador de tareas (cron o similar).
- La sincronización se realizará en modo automático, aceptando por defecto la solución que Unison considere más adecuada para cada archivo.
Requisitos de la instalación:
- Dos máquinas con Unison (misma versión) instalado.
- Un servidor SSH en una de las máquinas. La otra actuará como cliente.
NOTA: Aunque es poco común, puede ocurrir que la versión de OCaml utilizada genere incompatibilidades entre paquetes de distintas distribuciones Linux o entre Linux y Windows. En tal caso, es recomendable descargar el código fuente y compilarlo con las mismas librerías.
¡Manos a la obra!
Certificado SSH
En instalaciones desatendidas, configurar un certificado SSH para acceder sin contraseña es lo más recomendado. Para ello:
- Ejecuta el comando
ssh-keygenen el ordenador cliente:
$ ssh-keygen -t ed25519 -b 4096 -C "{Comentario descriptivo}" -f $HOME/.ssh/unison_work
- Copia la clave pública al servidor SSH usando
ssh-copy-iddesde el cliente:
$ ssh-copy-id -i $HOME/.ssh/unison_work.pub {user}@{server_FQDN_or_IP}
- Añade la clave al agente de SSH en el ordenador cliente:
$ ssh-add $HOME/.ssh/unison_work
- Verifica que puedes acceder al servidor desde el cliente sin introducir contraseña:
$ ssh -i $HOME/.ssh/unison_work {user}@{server_FQDN_or_IP}
Configuración de Unison
Utilizaremos un perfil (fichero de preferencias) de Unison para definir los directorios a sincronizar.
- Crea un archivo de perfil en
$HOME/.unison/Documents.prfen el cliente. - Asegúrate de que el directorio de destino existe en ambos ordenadores.
- Introduce la siguiente configuración en el archivo
Documents.prf:
# Unison preferences
label = Common documents
root = /home/{user}/Documents
root = ssh://{user}@{server_FQDN_or_IP}//home/{user}/Documents
sshargs = -i /home/{user}/.ssh/unison_work -C
- Prueba la configuración manualmente ejecutando:
$ unison Documents -auto -batch
- Si todo se ha ejecutado correctamente, los archivos del directorio
Documentsen el cliente se habrán sincronizado con el servidor.
Configuración de cron
Para programar la sincronización de manera automática (por ejemplo, cada hora), añade la siguiente entrada a la tabla de crontab del cliente:
0 * * * * unison Documents -auto -batch > /dev/null 2>&1
De esta manera, cada hora cron ejecutará Unison para mantener los datos sincronizados.
NOTA: Por supuesto, puedes ajustar el horario de ejecución en cron según tus necesidades.