Synchronizing files with Unison – jozefmares.com
Home Technology Synchronizing files with Unison

Synchronizing files with Unison

by Jozef Mares

My workflow is based on using OS X and Fedora together. I’m using OS X for business work and Fedora for actual work. This post is about a way which I use to keep my files in sync, post about my workflow might come later.

I tested a few solutions like rsync and manual copying (really, this was bad idea :) ). I’m not able to keep my files in sync manually thus i need to automate. To automate is good idea even if you are capable to keep files in sync – automation makes (at least me) things go smooth.

So I decided to go Unison way. Unison is beautiful piece of software written by Benjamin C. Pierce in pretty cool programming language – OCaml.

I have few machines always on on Internet so I can use start topology which has few advantages over direct synchronisation. One of the greatest (for me) is that central server for Unison is available over SSH (password-less login) and central server is in my office where I’m rarely but when I’m in office i always want some of my files which is few hundred kilometres from me.

So let’s assume we have two machines (clients) and one server. One machine is called NTB-1, second is DESKTOP-1 and server is called SERVER-1.

In this part I should mention that Unison is extremely sensitive to own version. You must have available exact same version on every synchronised machine (at least i would not try doing job without it). Fedora 18 has Unison 2.4 default version, you can get this version to OS X using homebrew. Server is running Centos 6.3 where Unison 2.4 is also by default (provided by unison package). I’m lucky bastard – this was pain free for me.

Let’s setup first client – NTB-1 running OS X. First we should install Unison:

brew install unison 

Then I created folder for Unison config:

mkdir ~/.unison

Next step is to create configuration file, mine (pretty basic) is looking like this:

# Sync roots
root = /Users/jozef
root = ssh://jozef@vserver-1//home/jozef/TrustedPoint

# What to synchronize
path = Current
path = Documents
path = .ssh
path = .bashrc
path = .vimrc

# What to ignore
ignore = Name *~
ignore = Name .DS_Store
ignore = Name .tmp
ignore = Path .ssh/known_hosts

# Keep backup copy of every file
backuplocation = central
backup = Name *
backupprefix = $VERSION.
backupsuffix =

# Log actions
logfile = /Users/jozef/.unison/sync.log

On Fedora box i created config directory:

mkdir ~/.unison

On Fedora box config file look like this:

# Sync roots
root = /home/jozef
root = ssh://jozef@server-1//home/jozef/TrustedPoint

# What to synchronize
path = Current
path = Documents
path = .ssh
path = .bashrc
path = .vimrc

# What to ignore
ignore = Name *~
ignore = Name *.swp
ignore = Name .tmp
ignore = Path .ssh/known_hosts

# Keep backup copy of every file
backuplocation = central
backup = Name *
backupprefix = $VERSION.
backupsuffix =

# Log actions
logfile = /home/jozef/.unison/sync.log

You should adjust at least sync roots and what to synchronize. I would not describing each option as you can find it here.

I would like to especially mention two / after server address and backuplocation option. They are pretty important for me, you might look to manual why. :)

Server setup is pretty easy – just create paths and install Unison:

mkdir ~/TrustedPoint
yum install unison

If you want password-less login you should setup SSH which is beyond scope of this quick how-to. Happy synchronizing and no conflicts.

You may also like