Synchronisierung mit Unison
9. Dezember 2009
Jeder, der mehr als einen Mac besitzt, wird das Problem kennen. Man ist mit dem MacBook unterwegs und braucht eine Datei vom Mac Pro, der zu Hause steht. Hätte man jetzt den UMTS Stick dabei (oder endlich ein MacBook mit integriertem UMTS) oder die Tethering Option für’s iPhone gebucht, könnte man ja mit Back To My Mac die Datei vom Mac Pro holen. Aber nur, wenn der Mac Pro läuft oder zumindest schläft und nicht hinter einer Firewall steht, die Back To My Mac blockt. Im Endeffekt kommt man also nicht an die Datei.
Es muss ja aber auch gar nicht ein Fall wie dieser sein. Es reichen ja schon zwei Rechner mit jeweils eigenen Datenständen um zu verzweifeln, wenn man die Datei, die man braucht, nicht findet.
Nach langer Suche habe ich nun eine Lösung gefunden, die ich hier beschreiben möchte.
Grundlage für meine Lösung ist Unison. Es gibt mehrere vorkompilierte Versionen, u.a. auch für OS X. Ich verwende für meine Lösung eine reine Kommandozeilen-Version von Unison, die man sich hier runterladen kann.
Im Download Ordner liegt nun eine unison-2.27.57-osx-text Datei, die man in unison umbenennt und danach nach /usr/bin kopiert (in einem Finder Fenster Apfel + Shift + G drücken und dann /usr/bin eingeben). Auf dem zweiten Rechner muss man unison ebenfalls in /usr/bin kopieren.
Prinzipiell kann man Unison nun schon vom Terminal aus nutzen. Das ist aber nicht das was ich wollte, denn ich wollte das ganze automatisiert ablaufen lassen.
Dazu muss man eine Preferences Datei erstellen (z.B. mit dem Texteditor aber ohne Formatierungen, sondern als reiner Text!), auf deren Grundlage Unison arbeitet. Meine sieht z.B. folgendermaßen aus:
# Unison preferences file
root = /Users/toby
root = ssh://toby@192.168.0.5//Users/toby
path = Downloads
path = Library/Application Support/LittleSnapper
path = Library/Application Support/Cultured Code
path = Library/Application Support/Fontcase
path = Library/Widgets
path = Programme
path = Sites
path = Public
path = Documents
path = Desktop
ignore = Name {.DS_Store}
log = false
silent = true
Wie man sieht wird bei root der lokale und der entfernte Ordner angegeben, der zu synchronisieren ist. Ich verwende SSH um mich mit dem anderen Rechner zu verbinden und werde dies auch anhand von SSH beschreiben (dass SSH funktioniert muss es in den Systemeinstellungen unter Freigabe aktiviert sein (Entfernte Anmeldung)). Natürlich funktioniert Unison auch mit einer verbundenen Freigabe.
Bei path werden alle Ordner innerhalb des root Ordners eingetragen, die synchronisiert werden sollen. Das ist nützlich, weil man so z.B. die Images und Music Ordner einfach auslassen kann, wenn sie, wie in meinem Fall, zu groß für das MacBook wären.
Mit ignore werden Dateien ignoriert, die man nicht synchronisiert haben will. Ich habe hier die .DS_Store Dateien von Mac OS X eingetragen, weil ich die nicht auf beiden Rechnern synchron brauche.
Wenn man ein log haben will, setzt man log auf true. Wenn man selbst entscheiden will, welche Dateien wo hin kopiert werden sollen, setzt man silent auf false. Dazu auch am Ende noch mehr.
In dieser Form ist die Preferences Datei für die automatische Synchonisierung gedacht und daher sollte silent = true sein.
Die Preferences Datei legt man nun unter ~/Library/Application Support/Unison/ ab (der Ordner wird nicht existieren, wenn man Unison noch nicht gestartet hat, daher einfach erstellen). Der Dateiname kann z.B. automated.prf sein.
Um die Synchronisierung mittles SSH automatisch durchzuführen, muss man einen SSH Key erstellen. Dazu startet man das Terminal und gibt
ssh-keygen -t dsa -b 1024
ein. Das Standardverzeichnis für den Key ist ok und Passphrase gibt man keine ein, da ich es nicht geschafft habe das ganze mit einer Passphrase zum laufen zu bekommen.
Jetzt hat man in dem .ssh Verzeichnis zwei Schlüssel, den private und den public. Den public muss man auf den anderen Rechner kopieren, mit dem synchronisiert werden soll. Das macht man mit folgendem Befehl:
cat ~/.ssh/id_dsa.pub | ssh toby@192.168.0.5 \
"mkdir -p .ssh; cat >> .ssh/authorized_keys"
Damit wird auf dem anderen Rechner das benötigte Verzeichnis erstellt und der public key hineinkopiert.
Jetzt kann Unison bereits synchronisieren und es wird auch kein Passwort mehr abgefragt. Aber automatisch läuft noch nichts. Früher hätte man jetzt einfach einen Cronjob gemacht. Heute macht man das aber nicht mehr. Man macht das jetzt mit launchd. Dazu müssen wir eine .plist Datei anlegen (am Besten wieder mit dem Texteditor im reinen Textmodus).
Ich habe hier mal meine als Beispiel angehängt. Man muss nur die Endung von _.txt in .plist ändern.
com.unison.wlan
Den String bei Label kann man nennen wie man will, aber diese Art wird von Apple empfohlen.
Bei ProgramArguments ist der auszuführende Prozess eingetragen zusammen mit dessen Optionen. Man sieht, dass Unison gestartet wird und Unison auf Basis der zuvor angelegten automated.prf Datei arbeiten soll.
Ausserdem wird ein StartInterval angegeben, das den Prozess alle 900 Sekunden starten soll.
Diese Datei speichert man mit dem Namen den man für das Label vergeben hat, in meinem Fall also com.unison.wlan,
unter ~/Library/LaunchAgents/com.unison.wlan.plist ab.
Jetzt meldet man sich entweder ab um den neuen LaunchAgent zu aktivieren oder macht es über das Terminal indem man
launchctl load ~/Library/LaunchAgents/com.unison.wlan.plist
eingibt. Damit sollte eine automatische Synchronisierung zwischen zwei Macs funktionieren.
Wenn man das ganze zum ersten mal machen will, empfehle ich es manuell zu machen. Also entweder den automatischen Prozess noch nicht einzutragen, oder ihn kurzzeitig mit
launchctl unload ~/Library/LaunchAgents/com.unison.wlan.plist
auszuschliessen. Denn bei der ersten Synchronisierung ist es ratsam ein Auge drauf zu werfen was Unison macht. Dazu sollte man in der automated.prf silent auf false stellen und eventuell das log auf true. Dann sollte man im Terminal
unison automated.prf
eingeben. Man sieht dann ganz genau was Unison macht. Am Anfang vergleicht es die beiden Datenbestände und fragt den User was mit den Dateien gemacht werden soll. Das nimmt je nach Größe des Datenbestandes sehr viel Zeit in Anspruch und sollte daher nicht unbedingt über WLAN, sondern wenn möglich über LAN oder FireWire gemacht werden. Auch kommt es vor, dass Unison bei diesem ersten Synchronisierungsprozess abbricht. Wenn dies geschieht sollte man die Ordner die man synchronisieren will einzeln synchronisieren. Z.B. so:
unison /Users/toby/Downloads ssh://toby@192.168.0.5//Users/toby/Downloads
Das macht man mit allen Ordnern die man in der automated.prf eingetragen hat. Wenn man dann fertig ist hat man auf beiden Rechnern einen identischen Datenbestand.
Nun kann man den LaunchAgent wieder aktivieren und er überprüft alle 15 Minuten ob Änderungen vorhanden sind und wenn ja werden die Rechner synchronisiert. Ist der Datenbestand einmal identisch und Unison hat seine Cache Dateien angelegt, geht das ganze auch sehr schnell und man merkt davon nichts.
Wenn der andere Rechner nicht läuft, passiert auch nichts weiter, ausser dass es einen Timeout gibt und der Prozess abbricht.
Verbesserungsvorschläge nehme ich natürlich gerne an. Oder habt ihr gar eine bessere Methode gefunden um zwei Macs synchron zu halten?
25 Kommentare zu “Synchronisierung mit Unison”
Quak los, Fremdfrosch...
« Windows auf Mac – Macs in einer Windowsumgebung #epicfail?

[ zitieren ]
RT @apfelquak: Frischquak: Synchronisierung mit Unison http://www.apfelquak.de/2009/1.....it-unison/
[ zitieren ]
Was spricht gegen Dropbox? Was noch die einzelnen Dateienversionen (wie Timemachine) speichert? Sogar ne iPhone Application gibt es mittlerweile
[ zitieren ]
Ich hab’ das mit der iDisk und mit DropBox probiert. Aber da muss ich dann auch wieder schauen, dass genau die Dateien drin sind, die ich brauche. Und die 2GB, die man bei DropBox gratis kriegt reicht mir nicht.
[ zitieren ]
kann es sein das hier nen dreher drin ist?
ssh-keygen -t das
ich meine das der typ dsa sein sollte?
übrigens gibts unison auch in den FreeBSD ports, ich nutze das als ersatz für Dropbox auf eigenem server.
[ zitieren ]
Klar, da hast Du recht. Muss natürlich dsa sein. Wird geändert
[ zitieren ]
Daim gab folgendes von sich:
Dropbox unterstützt, wie auch andere “Cloud” Dienste (z. B. SugarSync), die Meta Daten von OSX (noch) nicht. Arbeitet man also z. B. mit Etiketten, Spotlight Kommentaren oder Tags, so gehen diese beim Austausch zwischen zwei Macs verloren. Unison unterstützt das aber leider auch nicht!
Eine Lösung hierfür bietet ChronoSync, das aber mit $40 nicht gerade billig ist. Dafür bietet es volle OSX Unterstützung und zahllose andere Features. Ich sollte wirklich mal einen Apfelquak Artikel darüber schreiben…
[ zitieren ]
Acky gab folgendes von sich:
[ zitieren ]
Synchronisierung mit Unison http://j.mp/7uDDza
[ zitieren ]
Ein eigener Dropbox-Server wäre was feines. Die ganzen zeitgesteuerten Sync-Dienste und -Programme versagen dann, wenn man nach einer Änderung einer Datei den Rechner zu früh ausschaltet. Das kann bei Dropbox auch passieren, aber die Wahrscheinlichkeit, dass doch alles hochgeladen wurde ist deutlich höher, zumal Dropbox nur veränderte Bytes überträgt. Meinen Kostenlos-Account habe ich mittlerweile auf 5 GB hochgestuft. Hätte ich nicht MobileMe, würde ich auch für die 50 GB zahlen, da die iDisk für mich kaum zu gebrauchen ist. Allerdings brauche ich die anderen Dinge von MobileMe.
[ zitieren ]
Moin,
warum nimmst du für solche Aufgaben nicht einfach das bei jedem OSX mitgelieferte rsync und legst dafür einfach ein Script an? Mach im Endeffekt keinen Mehraufwand und man muss sich nicht darum kümmern, dass man eine funktionierende Programmversion findet.
Wenn das gewünscht ist, kann ich dazu bei mir gerne die Tage mal ein kleines HowTo schreiben.
Gruß, Knut
[ zitieren ]
Hallo.
1. Sehr schöner Bericht. Einsteigertaugliche Kommandozeilengeschichten sind in der Mac-Szene ja generell eher selten…
2. Ein HowTo zu rsync fände ich ebenfalls sehr spannend.
Bernd
[ zitieren ]
ich auch
[ zitieren ]
Im Grunde genommen gibt es so eine Lösung: nennt sich iFolder und stammt ursprünglich von Novell. siehe http://www.ifolder.com/ifolder
[ zitieren ]
Ein sehr interessanter, verständlich geschriebener Artikel. Anhand der Beschreibung werde ich das mal austesten. Danke!
Grüsse
oliver
[ zitieren ]
Mein Werkzeug der Wahl für die Synchronisation ist Dropbox. Der entscheidende Vorteil von Dropbox ist die nahtlose Integration ins Betriebssystem — egal ob Mac OS X, Windows oder Linux. Der Dienst arbeitet vollständig im Hintergrund und ich muss mich nicht immer daran erinnern, eine Synchronisation auszuführen.
Durch die Speicherung in der Cloud ist es nicht mal nötig die betreffenden Rechner im gleichen Netzwerk zu verbinden. Ich komme nach hause, schalte meinen Rechner an und alle Änderungen aus dem Büro stehen in wenigen Minuten zu Verfügung.
Dropbox ist sein Geld auf alle Fälle wert.
Wie Dropbox für mehr als nur Dokumentensynchronisation nutze, habe ich unter http://www.eigadget.com/tag/dropbox geschrieben.
[ zitieren ]
@iPhoneBlog wie wäre es mit Unison siehe http://bit.ly/5aEQqJ
[ zitieren ]
synchronisieren mmit unison http://icio.us/g2qjfq
[ zitieren ]
Bernd gab folgendes von sich:
Kann ich so nicht bestätigen. Es gibt unzählige einfache, aber dennoch nützliche Kommandozeilen-Befehle und Anleitungen dazu.
Bernd gab folgendes von sich:
Hat man nach lesen von ein paar Seiten “man rsync” drin. Im Regelfall reicht ja die Archivierung ohne Löschung.
[ zitieren ]
Knut gab folgendes von sich:
würde mich auch stark Interessieren.
[ zitieren ]
Synchronisierung mit Unison http://ff.im/-cNUuz
[ zitieren ]
Ich habe hiermit auch ein bisserl ein Problem … rsync und gut ist. Oder halt für einzelne Dateien Dienste wie Dropbox, wenn es “einfach” sein soll.
Ich will nicht ketzerisch klingen, aber nun ja … ich zahle für meine 10 Gigabyte Webserver rund 5 Euro im Monat. Kann 10 Domains draufklatschen, unlimitiert E-Mail-Adressen und Sub-Domains, und natürlich auch einen Ordner „Stuff“ wo halt meine verschlüsselten Backups druffgeladen werden … Und auch von anderswo zugänglich sind, wenn man denn die beiden Paßwörter kennt … Und wenn’s wirklich quasi-automatisch gesyncht werden soll, nun ja. Dropbox ahoi.
Das ganze Cloud-Zeug ist mir ein bisserl suspekt. Aber vielleicht werde ich auch einfach nur ein wenig alt.
[ zitieren ]
Synchronisierung mit Unison http://tinyurl.com/yf3wkyq
[ zitieren ]
Acky gab folgendes von sich:
Das stimmt so nicht. So wie ich Unison einsetze werden auch Etiketten synchronisiert. Tags und Spotlight Kommentare muss ich erst noch testen
[ zitieren ]
Sorry, mein Fehler: Finder Labels sind tatsächlich Teil der Dateiattribute von HFS und nicht der erweiterten Attribute.
[ zitieren ]
[...] Apfelquak abgelegt in Allgemein, bisher 0 Kommentare Trackback Permanenter Link Hier klicken, um die Antwort abzubrechen. [...]