lunes, 17 de diciembre de 2007

Sincroniza tus archivos y directorios con unison!!

Bueno.. una herramienta que les puede servir para hacer sus sincronizaciones de archivos es Unison . Para instalar el paquete en un Debian deberían hacer lo que sigue:



# apt-get install unison


Este se debe instalar en las máquinas que participaran de la sincronización. Por ejemplo si tiene un server con backups ( SB ) y una PC de escritorio ( PCE ) el paquete unison tiene que estar instalado en SB y PCE.

Vamos a empezar por la configuracion del server con backups( SB )

Ya suponemos que tenemos instalado unison, creamos un usuario en el servidor de backups:


SB#:adduser usuario




al tener nuestro nuevo "usuario" ya disponemos de su home en SB para dirigir allí la copia sincronizada de nuestro backup. Por supuesto este usuario deberá tener acceso externo a travéz de ssh

Supongamos que quiere copiar su home desde PCE, entonces tiene que primero crear un directorio "~/.unison" en su home


#~: mkdir .unison


luego crear dentro de este directorio el archivo de configuración de unison


#~: touch .unison/home.prf


en este archivo de configuración dirá que quiere copiar y a que destino, lo editamos con el editor preferido, yo uso vi:


#~: vi .unison/home.prf
auto = true
batch = true
root = /home/usuario
root = ssh://usuario@192.168.104.254/backup
log = true


Esto quiere decir lo siguiente:
'auto = true' no pediría confirmación en sincronizaciones que no tengan conflicto
'batch = true' quiere decir que de existir conflictos los salteara y seguira propagando los cambios que no tienen conflicto
'root = /home/usuario' esto es el origen de la copia y nos damos cuenta que es un origen porque no estamos utilizando ningún comando de conexión remota
'root = ssh://usuario@192.168.104.254/backup' esto es el destino y como se daran cuenta establece una conexión a traves de ssh al host SB(que en este caso tiene un IP 192.168.104.254) donde crea un directorio 'backup'

Ahora para que todo esto sea transparente a la hora de conectarse por ssh desde PCE a SB deberá generar una clave publica en PCE y luego copiarla a SB:



Algo sobre como usarssh-keygen

Como verán es solo correr el comando "ssh-keygen -t dsa" y no debe introducir ninguna contraseña en "Enter phassphrase:" y "Enter same phassphrase again:"

Luego de esto tienen que copiar esta clave generada en PCE a SB:



luego de hacer todo esto podemos dejar programada la tarea en el cron del usuario en PCE para que la sincronización de archivos sea realizada automáticamente las veces que quiera, los días que quiera... :-)

acá les paso un ejemplo sencillo de configuración de crontab para el usuario

#:~/crontab -e
00 22 * * * unison home


esto esta indicando que en PCE el cron ejecutara el programa "unison" con el perfil configurado "home (/home/usuario/.unison/home.prf) " todos los días de la semana a las 22:00 pm

Espero les ayude en alguna oportunidad, cualquier sugerencia sera bienvenida!! nos leemos!!

2 comentarios:

Lucas Di Pentima dijo...

Muy bueno! que pasaría si hay un conflicto? como te enterás en el caso de automatizarlo con cron? y además…”que” es un conflicto en unison?

Gracias por el artículo!

Cesar Díaz dijo...

Bueno.. con “conflicto” me refiero si por ejemplo si algun archivo no se puede replicar desde PCE a SB. Por ejemplo, en una oportunidad huvo problemas cuando un archivo del cliente de correos Thunderbird NO se pudo copiar por ser modificado en medio de una sincronizacion . :-( … el resto de las sincronizaciones de archivos se realizaron

Yo automatize con cron, pero no tengo un script que me avise en caso conflictos… directamente reviso regularmente los logs en ‘/home/usuario/unison.log’ y veo que el sincronizado haya terminado bien.. estuve buscando(googleando porsupuesto) para ver de encontrar un script que me avise enviandome un mail quizas… o la forma de hacerlo
yo por mi cuenta y no tuve suerte aun de hacer la busqueda… ni me las ingenie para hacerlo porque no conozco muy a fondo la programacion bash!! :( deberia hacerlo proximamente si es posible

Conflicto en unison: unison compara la copia local en tu estacion de trabajo (PCE) y el servidor (SB), chequea todas las diferencias… y cuando termina de hacer esto “comienza la verdadera copia/sincronizacion”… si en medio de esa copia algo que ya habia chequeado cambia por X motivos(cambios de archivos echos por un usuario…, ) al momento de hacer la copia de esa partecita desde la pc PCE a SB ya es diferente y esto genera un “conflicto” … por este motivo yo trato de hacer sincronizaciones desde la estacion PCE(que en realidad es un Terminal Server) al SB(Servidor de Backups)en horarios que la gente no utiliza sus estaciones de trabajo… por lo tanto de noche….

No soy un experto en unison.. si ves algo que te parece mal.. las sugerencias/correcciones me sirben ;-) … nos leemos… adios…