brianpuccio.net

it's dot com

Syncing Two Macs Without .Mac Or MobileMe

Date: Sunday, June 29, 2008 - 4:01pm
Keywords: OS X, WordPress, open source, flickr, Automator, mac pro, cloud computing, adium, mobileme, unison, powerbook, gmail, ssh, colloquy

In addition to my Mac Pro, I now have a 12" Powerbook that I use on the go. Having two computers introduces the hassle of keeping them in sync. Since .Mac comes with a 60 day trial, I decided I'd give it a try. For what it does, it does it well: it kept my mail, bookmarks, calendar and address book in sync, but nothing else.

However, .Mac costs $100 a year and it didn't meet all my needs. It did, however, offer a whole bunch of solutions (in the form of cloud computing) that I didn't want because rather than used someone else's cloud, I'd rather roll my own open source cloud. I don't use flickr, gmail or wordpress.com for this very reason, so why would I want .Mac email, webhosting, galleries, etc? All I really want to do is keep to Macs in sync, including all my documents. I googled and the best I found was Geek Throwdown: How to sync two or more Macs?.

Enter Unison. Here's a quick guide:

  1. I turned on remote login in system preferences on the PowerBook. This lets me SSH into it, which is a good thing because Unison operates over SSH.
  2. Installed the OS X binary of Unison onto both machines. (Downloaded the GUI universal binary and then launched the application, from there, within the application I was able to install the text version. Again, I did this for both machines.)
  3. Logged out of the PowerBook, then SSHed into it from the Mac Pro. I then deleted my entire home directory on the PowerBook (rm -rf).
  4. I exited all running programs on the Mac Pro except a terminal.
  5. Created a directory .unison in my home directory on my Mac Pro. Inside that directory, I created a file sync.prf. Here's the contents of that file, annotated to explain what each line means:
    # Roots of synrchonoization
    # I want to sync my entire home directory of the Mac Pro, the local machine with
    root = /Users/brianpuccio
    # ... my PowerBook, hostname beta, the entire home directory
    root = ssh://brianpuccio@beta.local//Users/brianpuccio
    
    # This synchronizes file modification times
    times = true
    
    # This turns off logging
    log = false
    
    # This tells unison to ignore some files and paths
    # http://alliance.seas.upenn.edu/~bcpierce/wiki/index.php?n=Main.WikiSandbox
    ignore = Name .FBCIndex
    ignore = Name .FBCLockFolder
    ignore = Name {Cache*,.Trash*,.VolumeIcon.icns,.HSicon,Temporary*,.Temporary*,TheFindByContentFolder}
    ignore = Name {TheVolumeSettingsFolder,.Metadata,.filler.idsff,.Spotlight,.DS_Store,.CFUserTextEncoding}
    # ~/.fseventsd/ is owned by root, don't have privledges to this, so ignore it
    ignore = Name .fseventsd
    # Unison is also the name of a usenet client http://www.panic.com/unison/
    # This ignores its very large and often changing cache, which is fine since I don't use it on the Powerbook
    ignore = Path {Library/Application Support/Unison/news.usenetserver.com}
    # This is Mail's cache of my IMAP accounts, since this was large and I kept having Unison crash on the
    # first few syncs, I omitted this path figuring Mail on the PowerBook would sync once it went online
    # It worked, so I left it alone and in here
    ignore = Path {Library/Mail/IMAP-*}
    # This is my aperture library and it is too big to fit on my PowerBook (and the PowerBook too slow to run Aperture)
    ignore = Path {Pictures/Aperture Library.aplibrary}
    # It seems like Unison should automatically ignore its own config folder, but it didn't for me, so I added this
    ignore = Path .unison
  6. I ran Unison by issuing the command unison sync (sync because that is the name I cave the preference file, sync.pref.
  7. The GUI launched, asked me for my password on the PowerBook, which I entered. It did a quick comparison (since the PowerBook should have a completely empty home directory) and then listed all the files and directories.
  8. I made sure that Unison was set to sync each file and directory from the Mac Pro to the Powerbook (Unison uses left and right terminology, e.g., sync file from left to right).
  9. I clicked Go and it churned along.

For the most part, it worked. All my files were moved over, my keychain and all its passwords, my browsing history and bookmarks, my Adium settings, accounts and chat histories, my Colloquy settings and chat logs, my dock, my background ... quite literally everything.

There are a couple of issues:

  1. Window positions are copied over. Going from a 1920x1200 screen to a 1024x768 means some windows were too large. A quick window, zoom command fixed those. (But they then get synced back to the Mac Pro, where everything will now launch in the top left of the screen.) I'm just going to accept this.
  2. Several files (such as ~/Library/Preferences/com.apple.dock.plist, ~/Library/Preferences/com.apple.dashboard.plistand ~/Library/Preferences/com.apple.finder.plist) are constantly modified by the OS and the very act of logging in to both machines means they both have their timestamps changed, which means Unison doesn't know which one you want to sync to the other, so it displays a ? instead and the default is to do nothing. Of course you can go through each of these one by one (or even en masse) and set that sync to be a Left to Right or Right to Left sync. I'm going to try using the force option and either favor a root explicitly or use the newer option.
  3. Dropping to a terminal to do this (and I do it a few times a week, whenever I shift from one machine to another) is annoying. I'm created an Automator script to run Unison and added it to my dock.
  4. Typing in my password for every sync is annoying. I now use an SSH key.
  5. I have only tried this where UIDs and GIDs were the same. Good luck to you if they're different!

I will update this as I make improvements.

Syndicate

Syndicate content

User login