How to install Unison
What is Unison?
Unison is an open-source file-synchronization application for OSX, Linux, Unix, and Windows. It permits two copies of a collection of files and directories to be stored on different hosts, modified independently, and then brought up to date by propagating the changes from one to the other.
As a first step, we will ensure that the list of available packages on the server is up to date before installing anything new.
apt-get -y update && apt-get upgrade -y
yum update -y
Our next step will be to install Unison and any required packages.
apt-get install unison
yum install unison
Now run the ‘unison‘ command to synchronize your files. In this example, we will sync folder 1 to folder 2.
unison /home/folder1 /home/folder2/
Remote File Synchronization
Now run the ‘unison‘ command to synchronize your files. In this example, we will sync local folder 1 to remote folder 1.
unison -batch /home/folder1/ ssh://192.168.1.2//home/folder1/
In case you don’t want to run Unison interactively, we can create a preferences file (/root/.unison/default.prf) that contains all the settings that you would otherwise have to specify on the command line:
# Roots of the synchronization root = /var/www root = ssh://192.168.1.2//var/www # Paths to synchronize #path = current #path = common #path = .netscape/bookmarks.html # Some regexps specifying names and paths to ignore #ignore = Path stats ## ignores /var/www/stats #ignore = Path stats/* ## ignores /var/www/stats/* #ignore = Path */stats ## ignores /var/www/somedir/stats, but not /var/www/a/b/c/stats #ignore = Name *stats ## ignores all files/directories that end with "stats" #ignore = Name stats* ## ignores all files/directories that begin with "stats" #ignore = Name *.tmp ## ignores all files with the extension .tmp # When set to true, this flag causes the user interface to skip # asking for confirmations on non-conflicting changes. (More # precisely, when the user interface is done setting the # propagation direction for one entry and is about to move to the # next, it will skip over all non-conflicting entries and go # directly to the next conflict.) auto=true # When this is set to true, the user interface will ask no # questions at all. Non-conflicting changes will be propagated; # conflicts will be skipped. batch=true # !When this is set to true, Unison will request an extra # confirmation if it appears that the entire replica has been # deleted, before propagating the change. If the batch flag is # also set, synchronization will be aborted. When the path # preference is used, the same confirmation will be requested for # top-level paths. (At the moment, this flag only affects the # text user interface.) See also the mountpoint preference. confirmbigdel=true # When this preference is set to true, Unison will use the # modification time and length of a file as a `pseudo inode # number' when scanning replicas for updates, instead of reading # the full contents of every file. Under Windows, this may cause # Unison to miss propagating an update if the modification time # and length of the file are both unchanged by the update. # However, Unison will never overwrite such an update with a # change from the other replica, since it always does a safe # check for updates just before propagating a change. Thus, it is # reasonable to use this switch under Windows most of the time # and occasionally run Unison once with fastcheck set to false, # if you are worried that Unison may have overlooked an update. # The default value of the preference is auto, which causes # Unison to use fast checking on Unix replicas (where it is safe) # and slow checking on Windows replicas. For backward # compatibility, yes, no, and default can be used in place of # true, false, and auto. See the section "Fast Checking" for more # information. fastcheck=true # When this flag is set to true, the group attributes of the # files are synchronized. Whether the group names or the group # identifiers are synchronizeddepends on the preference numerids. group=true # When this flag is set to true, the owner attributes of the # files are synchronized. Whether the owner names or the owner # identifiers are synchronizeddepends on the preference # extttnumerids. owner=true # Including the preference -prefer root causes Unison always to # resolve conflicts in favor of root, rather than asking for # guidance from the user. (The syntax of root is the same as for # the root preference, plus the special values newer and older.) # This preference is overridden by the preferpartial preference. # This preference should be used only if you are sure you know # what you are doing! prefer=newer # When this preference is set to true, the textual user interface # will print nothing at all, except in the case of errors. # Setting silent to true automatically sets the batch preference # to true. silent=true # When this flag is set to true, file modification times (but not # directory modtimes) are propagated. times=true
Except for the path directives, the comments should make the file self-explanatory. If you do not specify any path directives, then the directories in the root directives will be synchronized. By specifying path directives, paths will be relative to the root directory (e.g. root = /var/www and path = web will synchronize /var/www/web), and only the subdirectories specified in the root directive will be synchronized.
Since we have put all of our settings into a preferences file we can run Unison without any arguments.
Creating a Cron Job for Unison
On the source host, we create a cron job to automate synchronization.
crontab -e */5 * * * * /usr/bin/unison &> /dev/null
Once this is complete, you are finished with the setup process and can now begin synchronizing your files from your source directory to your target directory.