Unison: Sincronización de carpetas en local o remoto

Os pondre un ejemplo para sincronizar dos carpetas remotas, Unison en remoto usa ssh. Asi que necesitamos instalar ssh y unison. Asi que lo primero :

sudo apt-get install ssh unison unison-gtk

Con esto nos instala un cliente de SSH, pone un servidor de SSH en el puerto por defecto. Y además porsupuesto el unison y su interfaz gráfico.

Me voy a basar en un ejemplo para sincronizar los mapas del Warcraft III. Para serviriía evidentemente para sincronizar 2 carpetas cualesquiera.

Son 2 portatiles en LAN con IPs 192.168.1.4 y 192.168.1.5. Ambos PCs juegan bastante mapas muy variados y al poco tiempo un ordenador tiene más mapas que otro, o tiene más mapas de tipo td, vampiro y menos de otro tipo.

En definitiva queremos que todos los mapas que tenga el 4 y no el 5 se copien el 5. Y todos los mapas que tenga el 5 y no tengo el 4 se copien al 4. De manera que ambas carpetas queden exactemente iguales.

Por ultimo se quiere comprobar si hay mapas nuevos cada 5 min, no es problema, unison es muy eficiente, y robusto. Tienes modos para trabajar en batch (proceso de fondo, con poca prioridad y no interactivo, el usuario no interviene). Bueno eso de que unison no pregunte puede asustar, eso no es un problema, porque unison solo sincroniza lo que sabe perfectamente que puede modificar sin peligro de que el usuario se emcabrone por perder información. Cada cierto tiempo el usuario puede entrar por el interfaz gráfico del unison y resolver los posibles conflictos de sincronización.

¿Que es un conflicto de sincronización?

Si el fichero “main.cpp” es modificado por el portatil 1 y tambien por el 2, unison debe dejar las 2 carpetas exactamente iguales. Por tanto es el usuario el que debe decir que “main.cpp” es el que vale, el del portatil 1 o el 2 ?.

Creando un proyecto

Podemos crear muchos proyectos tipo: sincronizarMapas, sincronizarPendriveLG, sincronizarConTrabajo, sincronizarCASA …

  1. Nos vamos a la carpeta de unison : cd ~/.unison/
  2. Creamos un archivo de proyecto : gedit sincronizarMapas.prf:
    root = /media/windowsXP/juegos/Warcraft III/Maps/Download
    root = ssh://susana@192.168.1.5//media/windowsXP/Archivos de programa/Warcraft III/Maps/Download
    auto = true
    batch = true
    perms = 0
    log = false
    ignore = Path */.directory
    ignore = Path */Olds
    ignore = Name {olds,*~}
  3. Ojo la sintaxis un tanto extraña de cuando es una carpeta remota, lo digo por la doble barra(//). Ahora solo queda escribir en consola : unison sincronizarMapas . Si escribimos unison sin parametros tratara de ejecutar el proyecto llamado default.prf, que si no existe dara algún error. Por tanto para sincronizar distintas cosas escribimos: unison <nombre proyecto sin extension .prf>
  4. Ambas carpetas sincronizaran automaticamente sin preguntar nada, excepto que el ordenador remoto no tengo vuestra firma asincrona, por tanto os preguntara la contraseña del usuario “susana en este caso”. Para meter este comando en algun script automatico debemos evitar que nos pide la contraseña, para ello seguir los pasos de este post.

En general, unison sincroniza perfectamente carpetas de forma: local <—–> local o local <——> remoto, donde para el remoto usa el protocolo ssh. En general solo tenemos que crear un archivo “.prf”, y adaptar ambos “root a nuestras necesidades” el resto es un copy paste del bloque anterior. Si además ambos ordenadores son “amigos” evitamos cualquier intervención del usuario, por tanto podremos meter nuestro comando en un cron (sincronizar cada 5 min por ejemplo), si veo en los comentarios la necesidad, no entendeis algo del cron, puedo currarme un post, pero existiendo GUI para cron hoy en día es muy fácil automatizar cualquier comando.

Puede que unison como dije hay a veces que unison no sabe sincronizar 2 archivos, por que se han modificado en ambos lados y se llevo mucho tiempo sin sincronizar, esto es un conflicto de sincronización, y solo el usuaruio puede resolver el conflicto. Para ello nos vamos a Aplicaciones / Internet / Unison seleccionamos nuestro proyecto y tratamos de resolver los conflictos en favor de root1 o root2 en general, o bien individualmente.

Espero que os sea útil el tutorial, si teneis alguna duda o detectais algun error no dudeis en decirmelo.

6 comentarios

  1. Soy nuevo en Ubuntu – Linux y Unison me parece muy útil. En todo caso me sería de utilidad saber si hay alguna forma de que la sincronización se produzca de forma automática al pinchar la memoria USB que estoy sincronizando con un directorio del disco duro.
    En Win hay algún programa que lo hace y estaba utilizándolo hasta ahora. Hecho de menos esta funcionalidad.

  2. udev te permite programar que hacer cuando conectas o desconectas un hardware, si eres novato te recomiendo que lo dejes para más adelante, me lo miraré para hacer un tuto ya que su funcionamento no es nada trivial.

  3. Tengo un problemilla con el cron, el unison y la sincronizacion a praves de ssh. He siguido a pies juntillas tu manual y funciona muy bien. Sin embargo cuando lo pongo en el cron, nada de nada. Y no es que no funcione el cron o el unison, pues hago un perfil para sincronizar dos carpetas locales y sin problema, pero cuando pongo que sea remota a traves de ssh, ni de coña, cuando sin cron lo hace perfectamente sin pedirme nada. He leido algo de que el cron puede que no sea capaz de leer las claves privas y publicas del ssh del usuario, pero sinceramente yo me pierdo con eso.

    Alguna sugerencia.

  4. Posiblemente cuando haces el unison hacia el remoto te pregunta la password del ssh del servidor remoto. Esto quiere decir que hay un bloqueo esperando la entrada por teclado de la password. Esto en el cron se traduce en un proceso sin planificar permanentemente.

    Para que te funcione cuando cron vaya ejecutar el comando que sea no puede existir interactividad con el usuario.

    En este tuto lo explico bastante bien(creo): https://blogricardo.wordpress.com/2008/03/02/ssh-sin-contrasena-usando-certificados-dsa/.

    Existen 2 formas de logearse por el tradicional password o por clave asimétrica. La ventaja del segundo es que no requiere intarctividad con el usuario. En resumen es esto: con un simple comando se te generan un par de claves, que supuestamente es única. Entonces tienes una privada y una pública en tu ~/.ssh/, la privada te la quedas (si alguien la consigue pueden suplantar tu identidad), pero la pública se la puedes dar a quien quieras, en este caso se la tienes que distribuir al ordenador con el que quieres sincronizar. El ordenador remoto tiene una “lista de amigos” en el que estas tú, como tiene tu clave pública no necesita pedirte ninguna contraseña, puedes desencriptar los mensajes que tu le mandes.
    Tu clave puede ser distribuida a tantos ordenadores como quieras y podras acceder a ellos sin password ninguna, sería imposible recordar tantas passwords 0_o

  5. En un conflicto de sincronizacion, es posible resolver dicho conflicto sincronizando de tal modo que se sumen los contenidos y no como lo suguieres inclinandose por el contenido de una de las carpetas modificadas. Gracias por la respuesta que puedas brindar.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: