Skip to Content

Synchronisation de dossiers avec UNISON

But de ce document

Ce document me sert de mémo pour installer, configurer et utiliser le logiciel «  UNISON  » sous Linux Debian. Je le diffuse en espérant qu’il serve à d’autres personnes.

UNISON est un programme permettant de synchroniser des dossiers locaux ou distants (via SSH) dans les deux sens (il gère les collisions).

Installation

Installation du programme de base utilisable en ligne de commande :

# aptitude install unison

Installation de l’interface graphique pour les réfractaires à la ligne de commande :

# aptitude install unison-gtk

Remarque  : L’utilisation de cette interface graphique ne sera pas détaillée dans ce document, car nous allons nous contenter de la ligne de commande.

Premier test en local

Pour ce test, nous allons créer les deux dossiers suivants :

$ mkdir /tmp/DossierTestLocal
$ mkdir /tmp/DossierTestDistant

Ensuite, vous pouvez créer des sous-dossiers ou des fichiers dans ces deux dossiers de tests. Exemple :

$ touch /tmp/DossierTestLocal/Test1
$ touch /tmp/DossierTestDistant/Test2

La commande suivante, permet de synchroniser le contenu des deux dossiers :

$ unison /tmp/DossierTestLocal /tmp/DossierTestDistant
Contacting server...
Looking for changes
Reconciling changes

DossierTe...   DossierTe...
new file ---->            Test1  [f]
        <---- new file   Test2  [f]

Proceed with propagating updates? [] y
Propagating updates

Pour chaque modification, unison demande ce qu’il faut faire. En validant, nous autorisons unison à effectuer la mise à jour indiquée.

Pour la dernière question, il faut répondre « y » ou « g » pour valider et lancer la synchronisation des dossiers.

Remarque  : Pour chaque question, il est possible de saisir «  ? » pour connaître la liste des réponses possibles.

Deuxième test en utilisant le fichier de configuration

Le fichier de configuration par défaut est enregistré dans le répertoire home de l’utilisateur et se nomme «  /.unison/default.prf ».

Par exemple, pour éviter de saisir à chaque fois les répertoires, il est possible d’ajouter les lignes suivantes dans ce fichier :

# Répertoire distant
root = /tmp/DossierTestDistant
# Répertoire local
root = /tmp/DossierTestLocal

Remarque  : Les lignes commençant par des « # », sont des commentaires.

Ensuite, il suffit de saisir la commande suivante pour synchroniser vos dossiers :

$ unison

Utilisation de plusieurs fichiers de configuration

Dans l’exemple précédent, nous avons utilisé le fichier de configuration par défaut « default.prf  ». Cependant, il est possible de créer d’autres fichiers de configuration dans le dossier « .unison » et de les appeler avec la commande suivante :

$ unison MonAutreFichierDeConfiguration.prf

Remarque  : Il faut obligatoirement enregistrer ces fichiers dans le dossier « .unison » et ne pas indiquer le chemin de ceux-ci dans la ligne de commande.

Test avec un serveur distant

ATTENTION : Pour faire une synchronisation avec un ordinateur distant, il est nécessaire d’installer la même version d’unison sur les deux ordinateurs. Dans mon cas, j’avais installé la version 2.13 sur une Debian Sid et la version 2.9 sur une Debian Sarge et cela n’a pas fonctionné. J’ai du installer la version 2.9 sur la Debian Sid pour que cela fonctionne.

Pour accéder via ssh à un poste distant, voici à quoi peut ressembler le fichier de configuration :

# Répertoire distant
root = ssh://LeServeur//tmp/DossierTestDistant
# Répertoire local
root = /tmp/DossierTestLocal

Et la synchronisation se passe toujours de la même manière avec la commande suivante :

$ unison

Remarque  : Pour éviter la saisie du mot de passe à chaque synchronisation, il faut que l’accès ssh se fasse par échange de clés publique/privée et non pas par la saisie d’un mot de passe. La mise en place de clés publique/privée dépasse le cadre de ce mémo, mais vous trouverez quelques explications dans cet article :

  •  http://www.coagul.org/article.php3 ?id_article=168

    Automatiser la synchronisation

    L’option «  auto  », permet de répondre avec la valeur par défaut à toutes les questions sauf la dernière demandant le lancement de la mise à jour :

    $ unison -auto

    L’option «  batch  », permet de lancer la mise à jour de façon entièrement automatique :

    $ unison -batch

    L’option «  silent  », permet de lancer la mise à jour automatiquement sans rien afficher :

    $ unison -silent

    En cas de conflit avec l’option «  batch  » ou l’option «  silent  », la synchronisation ne sera pas effectuée automatiquement. Pour remédier à ce problème, il est possible d’ajouter des options dans le fichier de configuration pour indiquer les choix par défaut à effectuer.

    L’option «  prefer  » permet d’indiquer le dossier prioritaire en cas de conflit. Exemple :

    prefer = /tmp/DossierTestLocal

    ou :

    prefer = ssh://LeServeur//tmp/DossierTestDistant

    L’option « force = newer » (ou « force =older »), permet de choisir la version la plus récente (ou la plus ancienne) d’un fichier en cas de conflit. Pour utiliser cette option, il est obligatoire d’ajouter l’option « times = true », qui permet de synchroniser également la date de modification des fichiers. Exemple :

    times = true
    force = newer

    ATTENTION : Avec l’option « force = newer », il ne sera plus possible de supprimer des fichiers et de faire une synchronisation automatique car les fichiers supprimés seront automatiquement recopiés à partir de l’autre dossier.

    Pour lancer automatiquement par exemple une synchronisation toutes les 10mn, il faut ajouter cette ligne dans la crontab (crontab -e) de l’utilisateur :

    */10 * * * * /usr/bin/unison -silent

    Faire une sauvegarde (backup) des fichiers avant la synchronisation

    L’option suivante, permet de sauvegarder dans le dossier «  /.unison/backup » tous les fichiers dont le nom (name) correspondant à l’expression rationnelle « * », soit tous les fichiers :

    backup = Name *

    Cette option permet d’indiquer qu’il faut sauvegarder seulement les trois dernières versions d’un même fichier (la valeur par défaut étant 2) :

    maxbackups = 3      

    Pour changer le répertoire par défaut des fichiers sauvegardés, il faut modifier le contenu de la variable d’environnement « UNISONBACKUPDIR » avant de lancer unison :

    $ export UNISONBACKUPDIR=/tmp  
    $ unison

    Détail de quelques options du fichier de configuration

    Gestion des logs

    Par défaut, les logs des opérations sont enregistrés dans le fichier « unison.log » dans le home du répertoire utilisateur. La commande suivante permet d’indiquer un autre chemin et un autre nom de fichier

    logfile = .unison/log

    L’option suivante permet de désactiver les logs :

    log = false

    L’option suivante permet d’activer les logs :

    log = true

    Il est possible d’ignorer certains dossiers ou certains fichiers lors de la synchronisation avec les commandes suivantes :

    ignore = Name {core,*.pyc,*.dat,*.xcu, *.dvi, *.log, *.pid, *.out, unison.log}
    ignore = Path .unison
    ignore = Name toto
  •  ignore = Name pour exclure de la synchronisation certains fichiers
  •  ignore = Path pour ne pas synchroniser certains répertoires

    Synchronisation de plusieurs répertoires avec l’option path

    L’option «  path  » permet d’indiquer le ou les dossiers à synchroniser :

    path dossier1
    path dossier2
    path dossier3

    Consultation de la documentation fournie avec unison

    La commande «  less  », permet de consulter directement la documentation au format .gz :

    $ less /usr/share/doc/unison2.9.1/unison-manual.txt.gz

    Autrement, pour lire cette documentation avec votre éditeur favori, il faut commencer par la décompresser (sous root pour laisser le fichier décompressé à l’endroit original) :

    # gunzip /usr/share/doc/unison2.9.1/unison-manual.txt.gz
    $ kate /usr/share/doc/unison2.9.1/unison-manual.txt

    Pour finir, unison propose une méthode originale pour consulter la documentation par chapitre. La commande suivante permet de connaître la liste des chapitres de la documentation :

    $ unison -doc topics

    Ensuite, il suffit d’indiquer le chapitre que l’on veut consulter. Exemple :

    $ unison -doc tutorial | less

    Autres documentations

    Site officiel :

  •  http://www.cis.upenn.edu/ bcpierce/unison/

    Manuel de référence :

  •  http://www.cis.upenn.edu/ bcpierce/unison/download/releases/stable/unison-manual.html

    Historique des modifications

    Version Date Commentaire
    0.2 13/08/06 Création par Tony GALMICHE
    0.3 16/08/06 Remarque sur l’option « force = newer »
    0.4 24/02/07 Ajout lien vers ssh suite à remarque de Jibux
  • Commentaires

    Synchronisation de dossiers avec UNISON

    Vous trouverez un HowTo en français sur l’utilisation d’Unison, ainsi qu’une traduction en français des Manuels de l’utilisateur officiels ) à cette adresse :

    http://wiki.mandriva.com/fr/Unison

    Synchronisation de dossiers avec UNISON

    En effet, c’est corrigé. Désolé pour le

    Et qu’un autre membre du LUG prépare un article pour finalement s’apercevoir que le sujet a déjà été traité

     ;-)

    Synchronisation de dossiers avec UNISON

    Cette phrase de ton article :
    La mise en place de clés publique/privée dépasse le cadre de ce mémo.

    pourrait être remplacé par celle-ci :

    La mise en place de clés publique/privée est expliqué ici.

    Cela éviterait qu’on aille chercher ailleurs une information qui existe déjà sur le site ;-)

    Et qu’un autre membre du LUG prépare un article pour finalement s’apercevoir que le sujet a déjà été traité

    > Synchronisation de dossiers avec UNISON

    Merci pour la relecture et bonne fin de vacances

    > Synchronisation de dossiers avec UNISON

    J’ai survolé ton article (ch’uis en vacances donc j’ai pas le temps !) et je n’y ai remarqué aucune erreur.

    Bye