Ceci est une ancienne révision du document !



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 multiplate-forme 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éé, s'il est 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 (préférez celle-ci si possible).

Installez le paquet unison. Pour l'interface graphique, installez également unison-gtk.

La dernière version stable (celle des dépôts) est la 2.40.63. Si vous avez besoin d'une version antérieure d'Unison pour des questions de compatibilité (synchronisation entre machines distantes), vous trouverez les anciennes versions sur le site d'Unison.

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…)
  • distant (SSH, RSH et Socket)

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

Il semblerait que ce projet n'évolue plus en mode graphique. Parmi les regrets on peut noter l'absence de traduction en français et la mauvaise gestion des profils. En effet, il n'est pas possible de modifier les profils une fois créés.

Astuce : Un profil est enregistré dans votre répertoire personnel dans un dossier .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).

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=/seulementcerepertoire/
path=/etceluici/
  • enfin, les options.

Les options

Les options peuvent être utilisées :
  • soit dans les profils, sous la forme : option = true ou option = valeur;
  • soit en ligne de commande comme paramètres : unison -option.

Voici quelques options :

  • Limiter la synchronisation à certains dossiers ou types de fichiers :
path=/dossierasyncrhoniser/
path=/musique/*.mp3
  • 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=/media/sync
  • Silence :
silent=true
  • Booster Windows :
fastcheck=true
  • Ne pas tenir compte des permissions :
perms=0
  • Synchronisation des dates :
times=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.

L'option mountpoint est fortement conseillée pour les médias amovibles. Elle permet 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

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 fichier 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 :

  • 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
Si à l'utilisation vous avez encore des retours de problèmes de permissions sur les fichiers, il peut être utile de configurer votre profil pour les synchronisations avec votre support amovible en FAT32, afin de ne pas prêter attention aux droits à l'aide de l'option 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 !

Une variante est possible avec le label de votre periphérique USBb. Dans fstab, à la place de 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 être retirés avant la fin de la synchronisation. Pour éviter ce problème, il existe une option d'Unison qui permet de revenir à l'état précédent en cas d'accident de ce genre. Il s'agit de la commande mountpoint. Elle indique le point de montage d'un périphérique.

Cette option existe depuis la version 2.17 d'Unison.

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).

FIXME À tester !

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.

Paquet apt://unison pour Ubuntu et http://alan.petitepomme.net/unison/index.html pour Windows(TM).

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.

La machine distante doit permettre un accès SSH. Pour cela, installez par exemple le paquet openssh-server.

Le chemin vers la machine distante (à définir dans le profil) sera sous la forme :

root=ssh://login@ma.machine//chemin/absolu/vers/dossier/

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

Utiliser gnome-schedule (ou éditer le fichier /etc/crontab, remplir les champs, et dans commande ajouter :

/usr/bin/unison -batch NOMDUPROFIL

Contributeurs : Simtris, v0n.

  • unison.1317304671.txt.gz
  • Dernière modification: Le 15/12/2011, 15:21
  • (modification externe)