Running the Windows edition of Unison has a problem.  Synchronizing small sets of files works nicely.  Synchronizing large file sets (hundreds of thousands of files and about 30 GB) will just stop sometimes.  The client says that it is waiting for updates from the server.  The server side isn't doing any I/O or burning any CPU (per task manager).  It just sits.

This happens more frequently with "unison -socket 9999" than via ssh, but it happens both ways.  It happens with older releases and it happens with 2.28.34.  I've only tested with the text mode executable, not the GUI.

So I thought I'd give the Cygwin edition a try.  Note that I want to use it to synchronize the Windows file system, and I'm not particularly concerned with the Cygwin file system (which is just there to hold the Cygwin Unison executable and configuration files).

  1. Install Cygwin via http://www.cygwin.com/setup.exe
    1. Be sure to select the newest Unison, OpenSSH, and  cygrunsrv packages.
  2. On your Cygwin server, open a Cygwin bash prompt. It will create your /etc/passwd file.
    1. ssh-host-config -y
    2. When it asks, CYGWIN=tty ntsec
    3. cygrunsrv -S sshd
  3. On your Cygwin client, open a bash prompt:
    1. ssh yourId@yourServer
    2. Work out any problems with ssh before proceeding.  I recommend setting up password-free ssh:
      1. ssh-keygen -t rsa (Note: Only do this if you don't have ssh without password connecting from this client to ANYWHERE.)
      2. Copy your id_rsa.pub (or your identity.pub, or whatever you've named your public key) to the server as ~/.ssh/authorized_keys2
      3. On the server:
        1. chmod 600 .ssh
        2. chmod 600 .ssh/authorized_keys2
      4. On the client, run "ssh yourId@yourServer" and it should login without a password.
  4. On your client, from a shell prompt, run "unison /tmp ssh://yourServer/tmp -testserver".  This is effectively a unison-ping.  If it doesn't succeed, solve the problem before proceeding.