Unison File Syncronisation
http://www.cis.upenn.edu/~bcpierce/unison
Note: most of the following is for Ubuntu Linux
Config
~/.unison/example.prf
root = /home/klemens/
root = ssh://klemens@server.com//home/klemens/
fastcheck = true
perms = 0o0000
log = true
# 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
# Silent suppresses all but error messages.
# Ideal for cron usage "unison -silent example"
#silent = true
# Debug output
#debug = all
# Repeat sync every 10minutes
#repeat = 600
# Repeat when filesystem detects changes (problem with large amount of files?)
#repeat = watch
# Prevent writing into umounted mount directory
#mountpoint = /media/usbdisk
# Use rsync to copy files larger than 10MB
copythreshold = 10240
copyprog = rsync --inplace --no-whole-file
copyprogrest = rsync --inplace --no-whole-file --partial
# In case of conflicts always prefer my versions (Alternative: "prefer = newer")
prefer = /home/klemens/
# Create a copy with the old data on the non-preferred side
# "test (copy: conflict on 2016-06-09).sh"
copyonconflict = true
# Sync only certain subdirectories
path = Documents
path = Downloads
path = Music
# Handle symbolic links if they differ on local and destination system
# Example: Local: /home/klemens/Music = symlink to /srv/Music
follow = Path Downloads
follow = Path Music
# Ignore files or directories per name, also in subdirectories
ignore = Name {.svn}
# Ignore path
ignore = Path top-level-dir/second-level-dir
Ignore path documentation: http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#ignore
Cron
- crontab -e
-
0 10,12,14,16,18 * * * run-one nice -n 19 ionice -c3 unison -auto -batch -silent example
-
Prevent leftover locks by run-one
- sudo vi /etc/rc.local
-
# Cleanup leftover locks of run-one (for unison cronjob) rm /home/username/.cache/run-one/*
-
Cron + Zabbix
- vi ~/bin/unison_wrapper.sh
#!/bin/bash
#
# Store start timestamp
start=`date +%s`
OUTPUT="$(run-one nice -n 19 ionice -c3 unison -silent ullVaio)"
#echo exit: $?
#echo out: ${OUTPUT}
# Unison exit codes
# 0: successful synchronization; everything is up-to-date now.
# 1: some files were skipped, but all file transfers were successful.
# 2: non-fatal failures occurred during file transfer.
# 3: a fatal error occurred, or the execution was interrupted.
if [ $? -eq 3 ] ; then
echo "Unison: a fatal error occurred, or the execution was interrupted"
exit 3
fi
# Calculate runtime in seconds
end=`date +%s`
runtime=$(($end-$start))
# echo runtime
# Notify Zabbix
zabbix_sender -c /etc/zabbix/zabbix_agentd.conf -k unison.runtime -o $runtime > /dev/null
Ubuntu Version Problems
Use 2.40 on Ubuntu 16.04LTS Xenial to be compatible with Ubuntu 12.04-15.10
- http://thanhsiang.org/faqing/node/163
http://www.howtogeek.com/117929/how-to-downgrade-packages-on-ubuntu/ -
dpkg -i unison_2.40.102-1pascal1ppa3~123~raring1_i386.deb
-
echo "unison hold" | dpkg --set-selections
Note: revert hold with apt-mark unhold unison
Use 2.48 (xenial) on 14.04
-
sudo -i
-
cd ~
-
wget http://de.archive.ubuntu.com/ubuntu/pool/universe/u/unison/unison_2.48.3-1ubuntu1_amd64.deb
-
wget http://de.archive.ubuntu.com/ubuntu/pool/universe/u/unison/unison-gtk_2.48.3-1ubuntu1_amd64.deb
-
dpkg -i unison_2.48.3-1ubuntu1_amd64.deb
-
dpkg -i unison-gtk_2.48.3-1ubuntu1_amd64.deb
Run Unison on Startup / as Service
http://serverfault.com/questions/382042/run-unison-in-background-on-startup
Watch
http://askubuntu.com/questions/709319/unison-repeat-watch-file-limit
Windows
from http://strobelstefan.org/?p=336
- Download and install
- Unison from http://www.pps.univ-paris-diderot.fr/~vouillon/unison/
- Pidgin for easy GTK installation http://sourceforge.net/projects/pidgin/files/Pidgin/
- C++ lib http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=en
- Copy unisonx X.XXGTK.exe to C:\Program files\Pidgin\Gtk\bin and create a shortcut
- Config files: C:\Documents and settings\username\.unison (Open with Wordpad)
Problem: slow performance of big files
https://github.com/bcpierce00/unison/issues/65
Unsion with separate ssh key
You can use this, e.g. when your primary private key is password protected.
- ssh-keygen -t rsa -C "me@mypc_for_unison" -f ~/.ssh/id_rsa_unison
- Do not enter a passphrase!
- ssh-copy-id -i ~/.ssh/id_rsa_unison me@host.example.com
- unison -sshargs '-i /home/USER/.ssh/crontabkey_dsa' ...

