Unison est un logiciel de synchronisation, semblable à rsync.
Rsync est davantage destiné à réaliser des sauvegardes de routine. À noter que rsync peut prendre le rôle d'Unison et vice-versa, mais chacun a ses avantages et ses inconvénients.
Unison reste l'outil idéal pour maintenir de façon identique le contenu de plusieurs répertoires différents, répertoires qui peuvent évoluer différemment entre chaque établissement d'une synchronisation.
Unison est multi-plateforme et peut fonctionner à travers SSH RSH ou les sockets. Avec lui, vous pourrez réaliser des synchronisations entre des répertoires sous Windows, Mac et Linux.
Si un fichier est créé, supprimé ou s'il a été modifié dans l'un des deux répertoires, la modification sera appliquée sur l'autre.
Il existe deux façons d'utiliser Unison :
unison
.Installez le paquet unison. Pour l'interface graphique, installez également unison-gtk.
Lancez l'application comme indiqué ici ou via le terminal comme indiqué plus bas
Lors du premier lancement d'Unison, un profil est créé. La première étape est de lui indiquer les deux répertoires destinés à la synchronisation.
Le profil est un fichier de configuration pour une synchronisation donnée, contenant les répertoires à synchroniser ainsi que des options.
Unison appliquera ce profil à chaque appel du programme.
Lors du premier lancement, Unison demande un premier répertoire local (c'est-à-dire sur la machine où est installé Unison). Puis un autre répertoire, soit :
Cet assistant a alors créé un profil.
Unison établit une liste entre le répertoire 1 (celui de gauche sur le tableau) et le répertoire 2 (celui de droite).
En fonction de ce qu'il trouve comme changements entre les 2 répertoires il proposera de faire une action.
L'icône Go applique ces changements.
On peut noter l'absence de traduction en français.
.unison
, sous forme d'un fichier .prf
.
Vous pouvez donc éditer vos profils à votre guise.
Voir la section Peaufiner les profils.
Les commandes sont assez simples :
unison
⇒ Cette commande lance Unison avec les données du profil par défaut (default.prf
).
unison monprofil
⇒ lance Unison avec les données du fichier monprofil.prf
.
unison -option
⇒ lance Unison avec les options indiquées en paramètres (détaillées plus bas. Voir les options).
unison chemin1 chemin2 -option
⇒ lance la synchronisation entre chemin1 et chemin2 avec les options : par exemple -times pour conserver la date originale !
Unison enregistre ses profils dans le dossier .unison
de votre répertoire personnel.
Tout d'abord, si ce dossier n'existe pas encore, créez-le :
mkdir ~/.unison
Pour modifier le profil principal, il suffit d'éditer le fichier ~/.unison/default.prf
Un fichier de profil Unison respecte un certain ordre :
root=/home/moncompte/cheminquiseraanalyseenpremier/
root=/chemindelautrecheminasynchroniser/
path=./seulementCeSousRepertoire/ path=./etCeluiCi/
option = true
ou option = valeur
;unison -option
.Voici quelques options :
path=./dossierASynchroniser/ path=./musique/*.mp3 # Le joker est encore une "nouvelle fonctionnalité expérimentale" pour les *path* (cf. https://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#paths) et ne fonctionne pas chez certains utilisateurs
ignore= Path dossieraignorer/ ignore= Name *.odt
backupdir=/chemin
Par défaut, Unison fait 2 sauvegardes
auto=true
log=true logfile=/home/moncompte/.unison/log
batch=true
mountpoint=docs/fichier.txt
silent=true
fastcheck=true
perms=0
times=true
force=newer
owner = true group = true
#j'indique uniquement le répertoire parent root=/home/login/ #le chemin du périphérique (à condition que ce soit toujours le même) root=/media/keyaudio #puis les sous-répertoires path=documents path=musique/podcasts
Avec ce profil, Unison ne synchronisera que les répertoires documents
et musique/podcasts
de keyaudio
.
mountpoint
est fortement conseillée pour les médias amovibles.
Elle permet à Unison de vérifier que la clé USB est bien présente et donc d'éviter une suppression successive de fichiers en cas de démontage trop rapide du support amovible (voir synchroniser_les_peripheriques_usb et la_securite_avec_l_usb).
Pour la synchronisation de dossiers distants (avec SSH, par exemple), voir la section synchroniser_des_dossiers_distants, ci-dessous
Dans le cas où vous désirez établir une synchronisation avec une clé USB, un disque dur externe, une carte SD, etc, tout périphérique en FAT ou FAT32, vous risquez d'être embêté.
En effet, ces systèmes de fichiers ne gèrent pas les droits et les notions de propriétaires.
Par défaut, Ubuntu donne des droits root temporaires lors du montage du périphérique.
Il existe plusieurs moyens d'éviter ce problème :
mount -o uid=1000 ...
/etc/fstab
, avec une entrée de la forme :/dev/sda1 /mnt/removable vfat user,rw,noauto 0 0
perms = 0
. Voir les options.
Imaginez que vous ayez plusieurs périphériques USB, comme une clé USB, un disque dur externe, un lecteur de carte USB, etc.
Votre disque dur externe peut prendre ainsi comme point de montage soit sda1
, sdb1
, etc. En fonction de qui se branche en premier !
Pour éviter cela il faut utiliser l'UUID (plus de renseignements sur uuid_et_label ou sur comment renommer un disque).
Pour connaître le numéro UUID de votre périphérique USB, taper dans un terminal :
ls -l /dev/disk/by-uuid/
Nous noterons par la suite uuid_du_peripherique, l'UUID correspondant à notre périphérique.
Puis créer un point de montage fixe :
sudo mkdir /media/sync
Puis éditer le fichier /etc/fstab
et indiquez lui ce point de montage fixe (ici, sync
) en ajoutant la ligne correspondante :
UUID=uuid_du_peripherique /media/sync vfat user,rw,exec,noauto,iocharset=utf8,codepage=850 0 0
et voilà, plus de soucis !
UUID=uuid_du_peripherique
, écrivez LABEL=nomdulabel
.
Le risque avec les médias amovibles, c'est qu'ils peuvent ne pas être présents. Pour éviter ce problème, il existe une option d'Unison qui permet de vérifier qu'un certain fichier soit accessible sur les deux répliques (les deux "root"). Il s'agit de la commande mountpoint
. Il faut donc indiquer un fichier qui est présent sur les deux répliques, par exemple "mountpoint=docs/fichier.txt". Si le fichier n'est pas accessible sur l'un ou l'autre des périphériques (ou sur les deux), le processus sera interrompu.
La solution la plus logique serait d'utiliser udev qui gère nos périphériques USB (plus de renseignements sur la section exécuter_certains_programmes_selon_certains_événements de la documentation de udev).
Pour lancer un script à partir d'udev, il faut créer une règle, en créant un fichier :
/etc/udev/rules.d/10-local.rules
(nécéssite les droits d'administration).
À tester ! (attention, une règle erronée peut vous conduire au désastre)
Il faut autoriser le lancement des scripts en allant dans Système → Préférence → Périphériques et médias amovibles, onglet Stockage, puis cocher « Lancer automatiquement des programmes sur les nouveaux périphériques et médias ». Ensuite placer un simple script sur votre clé, la synchronisation s'exécutera lors de l'insertion de votre périphérique USB.
La synchronisation entre plusieurs dossiers distants est très facile avec Unison, il suffit de comprendre qu'il faut un Unison par machine, contrairement au cas "local".
Requis :
Le fait d'avoir un Unison par machine ne veut pas dire de tous les lancer en même temps ;) Il suffit d'en configurer un qui s'occupera de dialoguer avec l'autre, Il n'y a pas vraiment de notion client/serveur.
La méthode est simple, installer Unison sur chaque machine.
Je rappelle qu'il faut avoir la même version, et c'est le point délicat, en effet entre deux Ubuntu, pas de problèmes, par contre, lorsque vous utilisez plusieurs OS alors cela se complique.
Au 07/2009, la dernière version stable et commune est la 2.27.57.
Le chemin vers la machine distante (à définir dans le profil) sera sous la forme :
root=ssh://login@ma.machine//chemin/absolu/vers/dossier/
sshargs = -p 12345 -C
L'argument -C permet de compresser les données échangées pour faciliter l'échange, cet argument fiabilise le transfert mais accroît le temps de traitement (calcul de la compression).
Voici un autre exemple de profil (réalisable aussi avec l'interface graphique) utilisant SSH :
#j'indique le premier répertoire à synchro root = /home/moncompte/Documents #j'indique le chemin du dossier distant root = ssh://user@192.168.0.10//Docs # Options pour booster Windows fastcheck = true # Options du journal log = true logfile = /home/simtris/.unison/logunison #zap les permissions perms = 0 #synchro des dates times = true
Si l'adresse IP de vos ordinateurs change souvent, il est peut être pratique de faire un petit script demandant l'adresse IP de l'autre ordinateur et générant un profil automatiquement.
FILE="/home/ms/.unison/auto.prf" echo "Entrez l'IP ou 0 pour utiliser la précédente" echo -n ">" read IP if [ ! $IP = "0" ] then echo "root=/home/ms/Documents/" > $FILE echo "root=ssh://ms@$IP//home/ms/Documents/" >> $FILE echo "path=prog" >> $FILE echo "path=unifr/semestre_5" >> $FILE echo "silent=true" >> $FILE echo "times=true" >> $FILE echo "auto=true" >> $FILE fi unison auto echo "" echo "Done"
Editer /etc/fstab afin de monter automatiquement un dossier partagé (ex: samba, Nfs) au démarrage :
sudo gedit /etc/fstab
Ajouter :
//ADRESSE_RESEAU/REPERTOIRE1 /media/REPERTOIRE2 smbfs password=LEPASSE,username=LUTILISATEUR 0 0
ou si vous avez des problèmes d'éncodage ou de droit :
//ADRESSE_RESEAU/REPERTOIRE1 /media/REPERTOIRE2 smbfs password=LEPASSE,username=LUTILISATEUR,iocharset=utf8,codepage=cp850,uid=1000 0 0
Remplacer :
Vous pouvez si vous le désirez changer /media par /mnt .
Avec la version 2.32.52-1 il peut s'avérer qu'il existe un problème lors du chown d'un répertoire distant en smb, même avec l'option perms 0, alors que ce problème n'apparaissait pas dans les options précédentes.
Pour résoudre ce conflit il faut ajouter au fichier de profil :
dontchmod=true
On peut avoir deux machines avec des versions d'Unison installées différentes (après un upgrade d'une machine par exemple). Disons la 2.48.4 sur la machine spirou, et la 2.53.2 sur la machine fantasio. On peut alors installer la 2.48.4 sur fantasio, éventuellement dans le compte utilisateur (en allant chercher ici la version que vous voulez, sous forme de source ou déjà compilée pour Ubuntu. Une fois qu'on a mis par exemple l'exécutable unison-2.48.4-linux-i386-text-static
dans le répertoire /home/moi/bin
de la machine fantasio, on peut lancer la commande depuis spirou en donnant explicitement le chemin vers l'exécutable sur fantasio.
unison chemin1 chemin2 -servercmd /home/moi/bin/unison-2.48.4-linux-i386-text-static
ou dans le fichier de profil sur spirou, on met la ligne
servercmd = /home/moi/bin/unison-2.48.4-linux-i386-text-static
Éditez le fichier /etc/crontab, remplir les champs, et dans commande ajouter :
/usr/bin/unison -batch NOMDUPROFIL