{{tag>synchronisation usb système}} ---- ====== Unison ====== **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 : * soit par le biais de l'interface graphique avec **unison-gtk** ; * soit en console grâce à la commande **''unison''**. ===== Installation ===== [[:tutoriel:comment_installer_un_paquet|Installez le paquet]] [[apt>unison]]. Pour l'interface graphique, [[:tutoriel:comment_installer_un_paquet|installez]] également [[apt>unison-gtk]]. Pour que la synchronisation fonctionne, il faut que la version d'Unison sur les deux systèmes concernés soit quasi-identique (les deux premiers nombres de la version doivent être les mêmes). Si vous avez besoin d'une version antérieure d'Unison pour des questions de compatibilité (synchronisation entre machines distantes), vous trouverez des (très) anciennes versions précompilées sur le [[https://github.com/bcpierce00/unison/|site d'Unison]]. Vous pouvez également recompiler Unison sur un des deux systèmes. ===== Utilisation ===== Lancez l'application comme indiqué [[:tutoriel:comment_lancer_application|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. ==== 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 ([[wpfr>SSH]], RSH et [[wpfr>Berkeley_sockets|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 ==== On peut noter l'absence de traduction en français. Astuce : un profil est enregistré dans votre répertoire personnel dans un dossier ''.unison'', sous forme d'un fichier ''.prf''. Vous pouvez donc [[:tutoriel:comment_editer_un_fichier|éditer]] vos profils à votre guise. Voir la section [[#peaufiner_les_profils|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|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'[[:tutoriel:comment_editer_un_fichier|é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/ Ces sous-répertoires doivent être relatifs au répertoire principal (root) * 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=./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 * 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''. L'option ''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|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 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|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 [[tutoriel/comment_renommer_un_disque|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 [[:tutoriel:comment_editer_un_fichier|é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 USB. 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 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. 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 [[udev#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 ! (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. 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 [[apt://openssh-server|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/ Dans le cas où le port de communication avec ssh n'est pas le port 22 par défaut, il convient de l'indiquer à Unison. Cela se fait à travers le paramètre sshargs à ajouter au profil. Exemple : 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 [[:tutoriel:comment_modifier_un_fichier|ajouter au fichier]] de profil : dontchmod=true Source : http://us.generation-nt.com/answer/bug-574937-unison-ignores-perms-0-help-196529701.html === Que faire lorsque l'on a des versions différentes d'Unison === 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 [[https://github.com/bcpierce00/unison/releases|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 =====Automatiser la synchronisation===== Éditez le fichier [[cron|/etc/crontab]], remplir les champs, et dans commande ajouter : /usr/bin/unison -batch NOMDUPROFIL ===== Voir aussi ===== * **(en)** [[https://github.com/bcpierce00/unison/wiki#documentation-and-user-information|Aide officielle]]; * **(fr)** [[https://www-fourier.ujf-grenoble.fr/informatique/doku.php?id=unison|Documentation]]. * **(fr)** [[http://www.opendoc.net/solutions/comment-synchroniser-fichiers-configuration-avec-unison|Article Opendoc]]. * **(fr)** [[wpfr>Unison_(logiciel)|Article Wikipédia]]. * **(fr)** [[http://www.robertcudmore.org/blog/?p=168|Tutoriel Unison et Raspberry pi]] * **(fr)** [[https://linux.developpez.com/unison/|Tutoriel Unison par developpez.com]] ---- //Contributeurs : [[utilisateurs:Simtris]], [[utilisateurs:v0n]].//