Bonjour à tous !
3 mots sur un outil qui permet de synchroniser deux espaces de données : Unison.
Son intérêt peut paraître très relatif, notamment en comparaison de protocoles plus utilisés et plus aboutis comme RSync, toujours est-il qu’il est capable de créer et de maintenir 2 réplications de données, qu’elles soient locales (ou montées) ou distantes accessibles en SSH, et de gérer les modifications source vers destination ou bien destination vers source.
Pourquoi ne pas faire un détour ?
Installation from src
Comme d’habitude, partons des sources. A l’heure où j’écris ces lignes, nous en sommes à la 2.40.61, donc l’installation se basera sur cette version. Attention à corriger lors de la parution d’une version supérieure.
$ cd /usr/local/src/ & wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.40.61.tar.gz $ tar zxf unison-2.40.61.tar.gz $ cd unison-2.40.61 $ make mkProjectInfo $ make
Le make install a planté sur la copie du binaire sous ~/bin/ (pour la simple et bonne raison que ~/bin n’existe pas). Pour résoudre le problème, il faut modifier le Makefile, et notamment la ligne 82.
En commenté, le répertoire qui doit contenir les binaires est mis à ~/bin par défaut. En le mettant à /usr/local/bin, c’est tout de suite plus propre…
#INSTALLDIR = $(HOME)/bin/ INSTALLDIR = /usr/local/bin
Le / manquant implique une autre modification, ligne 95 :
# cp $(NAME)$(EXEC_EXT) $(INSTALLDIR)$(NAME)-$(MAJORVERSION)$(EXEC_EXT) cp $(NAME)$(EXEC_EXT) $(INSTALLDIR)/$(NAME)-$(MAJORVERSION)$(EXEC_EXT)
$ make install mv /usr/local/src/unison-2.40.61 /tmp/unison-7838 cp unison /usr/local/bin/unison cp unison /usr/local/bin/unisonunison-2.40
Nous avons fini l’installation. Pour avoir une idée des options disponible, il suffit de faire appel au traditionnel -help.
$ /usr/local/bin/unison -help Usage: unison [options] or unison root1 root2 [options] or unison profilename [options] Basic options: -auto automatically accept default (nonconflicting) actions -batch batch mode: ask no questions at all -doc xxx show documentation ('-doc topics' lists topics) -fat use appropriate options for FAT filesystems -group synchronize group attributes -ignore xxx add a pattern to the ignore list -ignorenot xxx add a pattern to the ignorenot list -nocreation xxx prevent file creations on one replica -nodeletion xxx prevent file deletions on one replica -noupdate xxx prevent file updates and deletions on one replica -owner synchronize owner -path xxx path to synchronize -perms n part of the permissions which is synchronized -root xxx root of a replica (should be used exactly twice) -silent print nothing except error messages -terse suppress status messages -testserver exit immediately after the connection to the server -times synchronize modification times -version print version and exit Advanced options: -addprefsto xxx file to add new prefs to -addversionno add version number to name of unison on server -backup xxx add a pattern to the backup list -backupcurr xxx add a pattern to the backupcurr list -backupcurrnot xxx add a pattern to the backupcurrnot list -backupdir xxx directory for storing centralized backups -backuploc xxx where backups are stored ('local' or 'central') -backupnot xxx add a pattern to the backupnot list -backupprefix xxx prefix for the names of backup files -backups keep backup copies of all files (see also 'backup') -backupsuffix xxx a suffix to be added to names of backup files -confirmbigdel ask about whole-replica (or path) deletes (default true) -confirmmerge ask for confirmation before commiting results of a merge -contactquietly suppress the 'contacting server' message during startup -copymax n maximum number of simultaneous copyprog transfers -copyprog xxx external program for copying large files -copyprogrest xxx variant of copyprog for resuming partial transfers -copyquoterem xxx add quotes to remote file name for copyprog (true/false/default) -copythreshold n use copyprog on files bigger than this (if >=0, in Kb) -debug xxx debug module xxx ('all' -> everything, 'verbose' -> more) -diff xxx set command for showing differences between files -dontchmod when set, never use the chmod system call -dumbtty do not change terminal settings in text UI -fastcheck xxx do fast update detection (true/false/default) -follow xxx add a pattern to the follow list -force xxx force changes from this replica to the other -forcepartial xxx add a pattern to the forcepartial list -halfduplex force half-duplex communication with the server -height n height (in lines) of main window in graphical interface -host xxx bind the socket to this host name in server socket mode -ignorearchives ignore existing archive files -ignorecase xxx identify upper/lowercase filenames (true/false/default) -ignoreinodenumbers ignore inode number changes when detecting updates -ignorelocks ignore locks left over from previous run (dangerous!) -immutable xxx add a pattern to the immutable list -immutablenot xxx add a pattern to the immutablenot list -key xxx define a keyboard shortcut for this profile (in some UIs) -killserver kill server when done (even when using sockets) -label xxx provide a descriptive string label for this profile -links xxx allow the synchronization of symbolic links (true/false/default) -log record actions in logfile (default true) -logfile xxx logfile name -maxbackups n number of backed up versions of a file -maxerrors n maximum number of errors before a directory transfer is aborted -maxthreads n maximum number of simultaneous file transfers -merge xxx add a pattern to the merge list -mountpoint xxx abort if this path does not exist -nocreationpartial xxx add a pattern to the nocreationpartial list -nodeletionpartial xxx add a pattern to the nodeletionpartial list -noupdatepartial xxx add a pattern to the noupdatepartial list -numericids don't map uid/gid values by user/group names -prefer xxx choose this replica's version for conflicting changes -preferpartial xxx add a pattern to the preferpartial list -repeat xxx synchronize repeatedly (text interface only) -retry n re-try failed synchronizations N times (text ui only) -rootalias xxx register alias for canonical root names -rsrc xxx synchronize resource forks (true/false/default) -rsync activate the rsync transfer mode (default true) -selftest run internal tests and exit -servercmd xxx name of unison executable on remote server -showarchive show 'true names' (for rootalias) of roots and archive -socket xxx act as a server on a socket -sortbysize list changed files by size, not name -sortfirst xxx add a pattern to the sortfirst list -sortlast xxx add a pattern to the sortlast list -sortnewfirst list new before changed files -sshargs xxx other arguments (if any) for remote shell command -sshcmd xxx path to the ssh executable -stream use a streaming protocol for transferring file contents (default true) -ui xxx select UI ('text' or 'graphic'); command-line only -unicode xxx assume Unicode encoding in case insensitive mode -xferbycopying optimize transfers using local copies (default true)