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.