Unison
Unison est un logiciel de synchronisation. À la différence de Rsync celui-ci réalise une synchronisation bidirectionnelle.
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 :
- soit par le biais de l'interface graphique avec unison-gtk ;
- soit en console grâce à la commande
unison
.
Le logiciel n'est plus dans un stade de développement actif mais reste supporté et utilisé par ses développeurs d'origine.
Installation
Installez le paquet unison. Pour l'interface graphique, installez également unison-gtk.
Unison en mode graphique
Vous trouverez une icône dans Applications → accessoires → Unison.
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.
Notion de profil
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 :
- local (idéal pour clé USB, disque dur externe…)
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.
Limite de l'interface graphique
On peut noter l'absence de traduction en français. Et la mauvaise gestion des profils pour les versions antérieures à 2.40.65. Par exemple, la version 2.27.67, ne permet pas de modifier les profils une fois créés.
.unison
, sous forme d'un fichier .prf
.
Vous pouvez donc éditer vos profils à votre guise.
Voir la section Peaufiner les profils.
Unison en ligne de commande
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 !
Peaufiner les profils
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 :
- en premier, le répertoire local :
root=/home/moncompte/cheminquiseraanalyseenpremier/
- puis le répertoire distant :
root=/chemindelautrecheminasynchroniser/
- éventuellement les sous-répertoires distants à sélectionner, si on ne veut pas synchroniser tout le dossier.
path=./seulementCeSousRepertoire/ path=./etCeluiCi/
- enfin, les options.
Les options
- soit dans les profils, sous la forme :
option = true
ouoption = valeur
; - soit en ligne de commande comme paramètres :
unison -option
.
Voici quelques options :
- Limiter la synchronisation à certains dossiers ou types de fichiers :
path=./dossierASynchroniser/ path=./musique/*.mp3 # Le joker est encore une "nouvelle fonctionnalité expérimentale" pour les *path* (cf. http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#paths) et ne fonctionne pas chez certains utilisateurs
- Rajouter une liste de fichiers ou répertoires à ignorer :
ignore= Path dossieraignorer/ ignore= Name *.odt
- Sauvegarde des échanges dans un répertoire :
backupdir=/chemin
Par défaut, Unison fait 2 sauvegardes
- Valider les propositions présentées :
auto=true
- Enregistrer un journal pour les transferts :
log=true logfile=/home/moncompte/.unison/log
- automatiser toutes les synchronisations sans même une seule confirmation :
batch=true
- Pour les médias amovibles :
mountpoint=docs/fichier.txt
- Silence :
silent=true
- Booster Windows :
fastcheck=true
- Ne pas tenir compte des permissions :
perms=0
- Synchronisation des dates :
times=true
- Conserver la version la plus récente du ficher (à utiliser avec times=true) :
force=newer
- Conserver le propriétaire et le groupe propriétaire :
owner = true group = true
Exemple simple de profil
#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
Précisions
Synchroniser les périphériques USB
Problèmes de droits
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 :
- La méthode la plus simple (elle ne touche pas aux fichiers de montage du périphérique) consiste à ajouter la ligne "perms=0" dans le fichier du profil qui se trouve dans le dossier ~/.unison/ (fichier en extension .prf). Ainsi, Unison ne se préoccupe pas des permissions lors de la synchronisation. Voir les options. Si elle ne fonctionne pas, où si elle ne vous convient pas (par exemple si vous avez plusieurs profils et que vous ne souhaitez pas modifier les profils un à un), les modifications ci-dessous devraient fonctionner.
- reformater le périphérique USB (en ext2, ext3 ou ext4 par exemple). Mais il ne sera pas reconnaissable par les autres systèmes d'exploitation, ni par vos appareils embarqués (appareil photo, PDA, etc.).
- monter le périphérique manuellement en indiquant le propriétaire, cela à chaque fois que l'on désire l'utiliser :
mount -o uid=1000 ...
- Indiquer le montage de votre clé dans le fichier
/etc/fstab
, avec une entrée de la forme :
/dev/sda1 /mnt/removable vfat user,rw,noauto 0 0
perms = 0
. Voir les options.
Différencier plusieurs périphériques USB
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
.
La sécurité avec l'USB
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.
Lancer automatiquement Unison lors du branchement du périphérique
udev
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)
Script sur la clé USB
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.
Synchroniser des dossiers distants
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 :
- Un Unison par machine (Linux, Mac ou Windows);
- Un service d'échange actif (ssh, rsh, sockets);
- La même version d'Unison sur toutes les machines.
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.
Synchroniser à travers ssh
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).
Un autre exemple de profil
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
Exemple de script si l'IP change souvent
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"
Monter un partage au démarrage
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 :
- ADRESSE_RESEAU par l'adresse réseau
- REPERTOIRE1 par le répertoire sur le serveur
- REPERTOIRE1 par le répertoire local
- LEPASSE distant
- LUTILISATEUR distant
Vous pouvez si vous le désirez changer /media par /mnt .
Problèmes avec l'option perms 0 depuis la 2.32.52-1
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
Automatiser la synchronisation
Utiliser gnome-schedule (ou éditer le fichier /etc/crontab), remplir les champs, et dans commande ajouter :
/usr/bin/unison -batch NOMDUPROFIL