Unterabschnitte
Ab Version 0.1.6 - Stand 24.04.2007
Unison ist ein Werkzeug für die Datei-Synchronisation unter Unix und
Windows. Es ermöglicht es, zwei Kopien einer Ansammlung von Dateien
und Verzeichnissen auf getrennten Rechnern (oder getrennten Laufwerken
eines einzelnen Rechners) unabhängig voneinander zu modifizieren und
anschließend beide Kopien mit dem jeweils aktuellen Stand der Gegenseite
abzugleichen. Dabei werden die Änderungen jeder Kopie auf die jeweils
andere Kopie übertragen.
Unison hat eine Reihe von Eigenschaften mit Werkzeugen wie Versions-
verwaltungen (CVS, PRCS, Subversion), verteilten Dateisystemen (Coda,
etc.), Hilfsmitteln zur einseitigen Dateispiegelung (rsync, etc.) und
Synchronisierern (Intellisync, Reconcile, etc) gemeinsam. Es gibt jedoch
auch eine Reihe von Unterschieden:
- Unison ist sowohl auf Windows als auch auf vielen Unix Derivaten
lauffähig (Solaris, Linux, OS X, etc.). Zudem arbeitet Unison
plattformübergreifend, wodurch beispielsweise ein Windows Laptop
mit einem Unix-Server synchronisiert werden kann.
- Im Gegensatz zu vielen Spiegelungs- oder Sicherungsprogrammen,
kann Unison mit Änderungen in beiden Kopien einer verteilten
Verzeichnisstruktur umgehen. Änderungen, die keinen Konflikt
erzeugen, werden automatisch übertragen. Konflikte dagegen werden
erkannt und dargestellt.
- Ungleich eines verteilten Dateisystems ist Unison ein Werkzeug,
das auf der Anwenderschicht des Betriebsystems läuft und daher weder
eine Kernel-Modifikation noch Administratorrechte erfordert.
- Unison arbeitet zwischen paarweise über das Internet verbundenen
Rechnern entweder über eine direkte Socket-Verbindung oder über
einen verschlüsselten SSH-Tunnel. Es geht sorgsam mit der Netzwerk
bandbreite um und läuft auch noch über langsame PPP-Verbindungen
reibungslos. Übertragungen von kleinen Änderungen an großen Dateien
werden durch ein Kompressionsprotokoll optimiert, das identisch
mit rsync ist.
- Unison ist sehr fehlertolerant. Es achtet sorgfältig darauf, dass
die Kopien und seine eigenen Strukturen jederzeit in einem gültigen
Zustand bleiben, sogar im Falle eines unerwarteten Abbruchs oder
bei Übertragungsfehlern.
- Unison hat eine klare und präzise Spezifikation. Der Quellcode ist
frei verfügbar und steht unter der GPL Lizenz.
Quelle: http://www.cis.upenn.edu/ bcpierce/unison/
Zur Installation dieses Paketes ist die eisfair-Base-Version 1.1.0
oder höher notwendig. Zudem wird das Inet-Paket vorausgesetzt, da dieses
für SSH benötigt wird.
Soll Unison zur Synchronisation von Daten zwischen Rechnern im Netzwerk
verwendet werden, so ist darauf zu achten, dass auf allen Rechnern die
selbe Version von Unison eingesetzt wird. Die Installation selbst wird
auf die bekannte Weise über das Setup-Menü vorgenommen.
Bei der Einrichtung von Unison ist darauf zu achten, dass, falls nicht
nur lokal synchronisiert werden soll, auf beiden Synchronisationspartnern
Unison installiert sein muss.
Während des Abgleichs übernimmt einer der beiden Partner die Client Rolle
(steuert den Ablauf und erzeugt Textausgaben) während der andere
Rechner die Server-Rolle einnimmt und lediglich den Client bedient.
Daraus ergibt sich, dass auf der Client-Seite die Wurzelverzeichnisse
zur Synchronisation konfiguriert werden müssen und auf der Server-Seite
lediglich sichergestellt sein muss, dass der Client auf das Unison-
Programm (über ssh oder den Socket-Daemon) Zugriff hat.
Die Konfiguration kann über den Menüpunkt ”Edit configuration”
geändert werden. Es gibt folgende Einstellungsmöglichkeiten um
das Verhalten des Programms zu steuern:
-
- START_UNISON
-
Gibt an, ob Unison als Dienst gestartet werden soll, der Anfragen
über einen TCP/IP-Port annimmt. Ist diese Option aktiviert, kann
sehr einfach von einem entfernten Computer aus eine Synchronisation
mit diesem Rechner vorgenommen werden.
BITTE BEACHTEN: Unison als Dienst stellt ein erhelbliches Sicherheitsrisiko
dar, da jeder Angreifer mit einer lauffähigen Version
von Unison auf den Rechner zugreifen kann. Es wird daher empfohlen
den Dienst zudeaktivieren und statt dessen über SSH auf den Rechner
zuzugreifen.
Gültige Werte: ”yes”, ”no”
- UNISON_DAEMON_PORT
-
TCP/IP-Port auf dem der Unison-Dienst auf Anfragen lauschen soll.
Dieser Wert wird ignoriert, wenn START_UNISON den Wert ”no”
besitzt.
Beispiel: ”3000”
- UNISON_MAIL_NOTIFY
-
Hiermit wird eingestellt, ob unison seine Aktivitäten in Form von
E-Mails weiterleiten soll oder nicht. Wird hier ”no” vorgegeben,
dann erfolgt keine Benachrichtigung und man muss statt dessen
das Protokoll (/var/log/unison.log) prüfen.
Achtung: Nur wenn Änderungen abgeglichen werden, steht auch ein
Protokoll zur Verfügung. Sind die Kopien identisch erfolgt keine
Benachrichtigung.
Ebenfalls zu beachten ist, dass diese Benachrichtigung natürlich
nur funktioniert, wenn das Mail-Paket auf dem Rechner installiert
und korrekt konfiguriert ist.
Gültige Werte: ”yes”, ”no”
- UNISON_MAIL_ONERROR
-
Mit dieser Option kann die E-Mail-Benachrichtigung so eingeschränkt
werden, dass lediglich Fehlversuche als E-Mail versendet werden.
Erfolgsmeldungen dagegen unterbleiben.
BITTE BEACHTEN: Die Einstellung hat nur dann einen Effekt, wenn
UNISON_MAIL_NOTIFY den Wert ”yes” besitzt.
Gültige Werte: ”yes”, ”no”
- UNISON_MAIL_ADDR
-
Die hier angegebene E-Mail-Adresse wird verwendet um nach einer
automatischen Synchronisation (per Cron) dem verantwortlichen
Administrator das Ablaufprotokoll von Unison zukommen zu lassen.
BITTE BEACHTEN: Die Einstellung hat nur dann einen Effekt, wenn
UNISON_MAIL_NOTIFY den Wert ”yes” besitzt.
Beispiel: ”backup.admin@mydomain.local”
- UUNISON_DIR_N
-
Anzahl von Wurzelverzeichnissen, die entwerder mit lokalen oder mit
verteilten Kopien synchronisiert werden sollen. Die hier angegebenen
Verzeichnisse können anschließend entwerder zeitgesteuert oder
manuell miteinander abgeglichen werden.
Beispiel: ”1”
- UNISON_DIR_x_NETSYNC
-
Legt fest, ob die Synchronisation auf dem lokalen Rechner oder über
das Netzwerk mit einer entfernten Maschine stattfinden soll.
Gültige Werte: ”yes”, ”no”
- UNISON_DIR_x_HOST
-
Name des Rechners, auf dem die verteilte Kopie eines lokalen
Verzeichnisses liegt.
BITTE BEACHTEN: Dieser Parameter wird nur dann beachtet, wenn die
Variable UNISON_DIR_x_NETSYNC den Wert ”yes” besitzt.
Beispiel: ”backup.home.lan”
- UNISON_DIR_x_USESSH
-
Zugriffsmethode auf den entfernetn Rechner. Wird dieser Wert auf ”yes”
gestellt, dann wird über die Secure Shell auf den entfernten Rechner
zugegriffen, auf dem der ssh-Daemon ausgeführt werden muss, damit
die Verbindung funktioniert.
Der Zugriff über SSH ist die bevorzugte Methode, da sie die Daten
verschlüsselt austauscht und einen Anmeldemechanismus auf dem entfernten
Rechner verlangt. Allerdings muss ein dsa Schlüsselpaar erzeugt
und mit dem Partnerrechner ausgetauscht werden, damit die Synchronisation
auch automatisch ohne Kennworteingabe funktioniert.
BITTE BEACHTEN: Dieser Parameter wird nur dann beachtet, wenn die
Variable UNISON_DIR_x_NETSYNC den Wert ”yes” besitzt.
Gültige Werte: ”yes”, ”no”
- UNISON_DIR_x_SSHPORT
-
Die Port-Nummer, auf der der SSH-Dienst des entfernten Rechners auf
Anfragen wartet. Der Standardwert für SSH ist '22'.
BITTE BEACHTEN: Dieser Parameter wird nur dann beachtet, wenn die
Variable UNISON_DIR_x_NETSYNC den Wert ”yes” besitzt.
Beispiel: ”22”
- UNISON_DIR_x_SSHUSER
-
Benutzerkonto über das der SSH-Zugriff auf die entfernte Maschine
erfolgen soll. Dieser Wert wird ignoriert, wenn UNISON_DIR_x_METHOD
auf 'ssh' eingestellt ist.
BITTE BEACHTEN: Die automatische Synchronisation mittels des CRON-
Dienstes ist nur dann über SSH sinnvoll, wenn eine Anmeldung ohne
Kennworteingabe möglich ist. Dazu ist ein dsa-Schlüssel zu erzeugen
und auf dem entfernten Rechner unter 'authorized_keys' abzulegen.
Zudem ist darauf zu achten, dass der mit SSHUSER angegebene Anwender
auf der entfernten Maschine ausreichende Zugriffsrechte auf das
Dateisystem hat.
BITTE BEACHTEN: Dieser Parameter wird nur dann beachtet, wenn die
Variable UNISON_DIR_x_NETSYNC den Wert ”yes” besitzt.
Beispiel: ”root”
- UNISON_DIR_x_SSHCOMPRESS
-
Über diesen Schalter kann die Datenkompression für SSH-Verbindungen
aktiviert werden. SSH verwendet dabei den Kompressionsalgorithmus
von gzip und kann damit die Synchronisation über das Netzwerk beschleunigen.
Da jedoch zugleich die Reaktionszeiten länger werden,
macht die Aktivierung dieser Option nur für Verbindungen mit
niedrigen Bandbreiten Sinn.
Gültige Werte: ”yes”, ”no”
- UNISON_DIR_x_USESOCKET
-
Zugriffsmethode auf den entfernetn Rechner. Wird dieser Wert auf ”yes”
gestellt, dann wird über den unison socket daemon zugegriffen, der auf
dem entfernten ausgeführt werden muss, damit die Verindung funktioniert.
Diese Zugriffsmethode ist sehr viel einfacher einzurichten als die
SSH-Variante, da man sich nicht um die SSH-Authentifizierung kümmern
muss. Allerdings ist sie auch sehr viel unsicherer, da zum einen die
Daten unverschlüsselt ausgetauscht werden und zum anderen der Socket-
Dienst ohne Anmeldung den Zugriff auf Dateien des entfernten Rechners
zulässt.
BITTE BEACHTEN: Dieser Parameter wird nur dann beachtet, wenn die
Variable UNISON_DIR_x_NETSYNC den Wert ”yes” besitzt.
BITTE BEACHTEN: Es kann nur entweder USESSH oder USESOCKET gewählt
werden. Die Parameter schließen sich gegenseitig aus.
Gültige Werte: ”yes”, ”no”
- UNISON_DIR_x_SOCKPORT
-
Port auf dem der entfernte Unison-Dienst auf Anfragen wartet. Dieser
Wert wird ignoriert, wenn UNISON_DIR_x_METHOD auf 'ssh' eingestellt
ist.
BITTE BEACHTEN: Dieser Parameter wird nur dann beachtet, wenn die
Variable UNISON_DIR_x_NETSYNC den Wert ”yes” besitzt.
Beispiel: ”3000”
- UNISON_DIR_x_LOCAL
-
Pfad des lokalen Verzeichnisses, das mit einer verteilten Kopie abgeglichen
werden soll.
Beispiel: ”/data/files”
- UNISON_DIR_x_REMOTE
-
Pfad des Verzeichnisses auf dem entfernten Rechner, das mit dem
unter UNISON_DIR_x_LOCAL angegebenen Verzeichnis abgeglichen werden
soll.
Beispiel: ”/data/backup/files”
- UNISON_DIR_x_FORCE
-
Wird hier ”local” oder ”remote” angegeben, wird Unison dazu veranlasst
alle Änderungen, egal ob diese zu Konflikten führen oder
nicht, zum Vorteil des entsprechenden Wurzelverzeichnisses aufzu-
lösen.
Diese Option verwandelt Unison von einem Synchronisierer in ein
Spiegelungsprogramm (und ist daher mit Vorsicht zu genießen).
Gültige Werte: ”none”, ”local”, ”remote”
- UNISON_DIR_x_TIMES
-
Wenn diese Einstellung auf ”yes” gesetzt wird, dann werden die
Zeiten der letzten Änderung von Dateien (jedoch nicht von Verzeichnissen)
an die Gegenstelle übertragen.
Gültige Werte: ”yes”, ”no”
- UNISON_DIR_x_GROUP
-
Wenn diese Einstellung auf ”yes” gesetzt wird, dann werden die
Gruppenattribute von Dateien an die Gegenstelle übertragen.
Ob dabei die Gruppennamen oder die Gruppen-IDs übertragen werden
ist von der Option UNISON_DIR_x_NUMIDS abhängig.
Gültige Werte: ”yes”, ”no”
- UNISON_DIR_x_OWNER
-
Wenn diese Einstellung auf ”yes” gesetzt wird, dann werden die
Besitzerattribute von Dateien an die Gegenstelle übertragen.
Ob dabei die Besitzernamen oder die User-IDs übertragen werden
ist von der Option UNISON_DIR_x_NUMIDS abhängig.
Gültige Werte: ”yes”, ”no”
- UNISON_DIR_x_NUMIDS
-
Wenn diese Einstellung auf ”yes” gesetzt wird, dann werden
Gruppen und Anwender numerisch und nicht textuell anhand ihrer
Namen synchronisiert.
Die spezielle Benutzer-ID 0, wie auch die Gruppen-ID 0 werden
niemals textuell interpretiert. Dies gilt auch dann, wenn diese
Einstellung nicht gesetzt ist.
Gültige Werte: ”yes”, ”no”
- UNISON_DIR_x_PATH_N
-
Soll sich die Synchronisation innerhalb der oben angegebenen Wurzelverzeichnisse
auf eine Reihe von Unterverzeichnisse beschränken (und die übrigen ignorieren),
dann kann hier eine Liste dieser Unterverzeichnisse angegeben werden.
Die Variable UNISON_DIR_x_PATH_N erhält die Anzahl der Unterverzeichnisse
die angegeben werden sollen.
Beispiel: ”2”
- UNISON_DIR_x_PATH_x
-
Soll sich die Synchronisation innerhalb der oben angegebenen Wurzelverzeichnisse
auf eine Reihe von Unterverzeichnisse beschränken (und die übrigen ignorieren),
dann kann hier eine Liste dieser Unterverzeichnisse angegeben werden.
Die Variable UNISON_DIR_x_PATH_x erhält den Namen eines jeweiligen
Unterverzeichnisses.
- Beispiele:
”Entwicklung”
”Vertrieb”
”Verwaltung”
- UNISON_DIR_x_EXC_FILE_N
-
Anzahl der Einträge in der Liste von Dateien, die von der Synchronisation
ausgenommen sein sollen (EXCLUDE).
Beispiel: ”2”
- UNISON_DIR_x_EXC_FILE_x
-
Angabe von Dateien, die von der Synchronisation ausgenommen werden
sollen. Dabei können die Platzhalter ”?” für ein einzelnes Zeichen
und ”*” für mehrere Zeichen verwendet werden. Zudem ist die Angabe
einer Zeichenmenge [abcd] und die Angabe von Zeichenmustern a,bb,
ccc möglich.
- Beispiele:
”* ”
”*.{tmp,old,bak}”
”[0123456789]*”
- UNISON_DIR_x_EXC_PATH_N
-
Anzahl der Einträge in der Liste von Pfaden, die von der Synchronisation
ausgenommen sein sollen (EXCLUDE).
Beispiel: ”2”
- UNISON_DIR_x_EXC_PATH_x
-
Angabe von Pfaden, die von der Synchronisation ausgenommen werden
sollen. Dabei können die Platzhalter ”?” für ein einzelnes Zeichen
und ”*” für mehrere Zeichen verwendet werden. Zudem ist die Angabe
einer Zeichenmenge [abcd] und die Angabe von Zeichenmustern a,bb,
ccc möglich.
- Beispiele:
”*/.ssh”
”*/CVS,svn”
- UNISON_DIR_x_INC_FILE_N
-
Anzahl der Einträge in der Liste von Dateien, die wieder in die
Synchronisation einbezogen werden sollen, nachdem EXC_FILE_?
angewendet wurde (INCLUDE).
Beispiel: ”2”
- UNISON_DIR_x_INC_FILE_x
-
Angabe von Dateien, die wieder in die Synchronisation einbezogen
werden sollen. Dabei können die Platzhalter ”?” für ein einzelnes
Zeichen und ”*” für mehrere Zeichen verwendet werden. Zudem ist die
Angabe einer Zeichenmenge [abcd] und die Angabe von Zeichenmustern
a,bb,ccc möglich.
- Beispiele:
”* ”
”*.{tmp,old,bak}”
”[0123456789]*”
- UNISON_DIR_x_AUTO
-
Gibt an, ob die Synchronisation automatisch über den CRON-Dienst
gestartet werden soll.
Gültige Werte: ”yes”, ”no”
- UNISON_DIR_x_SCHEDULE
-
Falls UNISON_DIR_x_AUTO den Wert ”yes” besitzt, kann hier der
Zeitpunkt festgelegt werden, wann der geplante Vorgang ausgeführt werden
soll. Das Format ist dabei: Minute Stunde Tag Monat Wochentag.
Das Zeichen ”*” ist ein Platzhalter, der einen Wert als immer
zutreffend markiert.
Beispiel: ”5 1 * * *” = täglich um 1:05 Uhr
- UNISON_DIR_x_PRERUN
-
Hier kann ein Befehl (z.B. ein Shell-Skript) hinterlegt werden, das
vor der Synchronisation ausgeführt werden soll. Dies kann verwendet
werden, um ein Sicherungsmedium zu mounten, um temporäre
Dateien zu löschen, um über ssh Befehle auf dem entfernten Rechner
abzusetzen u.v.m.
Beispiel: ”mount -t vfat /dev/sda /mnt”
- UNISON_DIR_x_POSTRUN
-
Hier kann ein Befehl (z.B. ein Shell-Skript) hinterlegt werden, das
nach der Synchronisation ausgeführt werden. Dies kann verwendet werden,
um ein Sicherungsmedium zu mounten, um temporäre
Dateien zu löschen, um über ssh Befehle auf dem entfernten Rechner
abzusetzen u.v.m.
Beispiel: ”umount /dev/sda”
- View documentation
Dokumentation zum Paket Unison auf eisfair anzeigen.
- Edit configuration
Bearbeiten der Unison-Konfiguration.
- Start unison daemon
Starten des Unison-Socket-Daemons.
- Stop unison daemon
Beenden des Unison-Socket-Daemons.
- Unison synchronisation tools
Untermenü: Tools zur manuellen Synchronisation.
- Advanced configuration file handling
Versionsverwaltung der Unison-Konfiguration.
- Start normal synchronisation
Normale Synchronisation, lediglich
im Falle von Konflikten ist eine Benutzerinteraktion nötig, ansonsten
läuft der Vorgang automatisch ab.
- Start interactive synchronisation
Vollständig interaktive Synchronisation.
Jeder Unterschied wird angezeigt und der Anwernder wählt
eine mögliche Aktion.
- Synchronize all directories now
Synchronisation aller konfigurierter
Verzeichnisse. Der Vorgang läuft automatisch ab, Konflikte werden
lediglich angezeigt.
Damit Unison über SSH auf einen entfernetn Rechner zugreifen kann, muss
auf diesem ein SSH-Dienst (sshd) laufen. Man kann die Verbindung testen,
indem man auf der Kommandozeile den Befehl eingibt:
eis # ssh <sshuser>@<remote.machine>
Es wird zunächst das Kennwort für ”sshuser” erfragt und anschließend eine
Eingabe-Shell geöffnet. Unison verwendet diesen Mechanismus, um auf dem
entfernten Rechner den Unison-Server zu starten und mit diesem die
Synchronisation durchzuführen.
Soll der Abgleich automatisch über den Cron-Daemon ausgeführt werden, ist
jedoch die Eingabe eines Kennworts sehr hinderlich. Zu diesem Zweck unterstützt
SSH die Anmeldung über asymmetrische Schlüssel. Dazu geht man wie
folgt vor:
Zunächst sollte man als 'root' an der lokalen Maschine angemeldet sein,
da Unison unter dem 'root'-User ausgeführt wird. Nun wird folgender Befehl
auf der Kommandozeile eingegeben:
ssh-keygen -t dsa
Dieser Befehl erzeugt das Schlüsselpaar ” /.ssh/id_dsa” (der private
Schlüssel) und ” /.ssh/id_dsa.pub” (der öffentliche Schlüssel).
Der Schlüsselgenerator kann optional den Schlüssel mit einem Kennwort
(Passphrase) sichern - worauf hier im Sinne der Einfachheit jedoch verzichtet
wird. Falls doch ein solches Kennwort vergeben werden soll, muss später dafür gesorgt
werden, dass dieses bereits mit Hilfe von ”ssh-agent” zugriffsbereit
im Speicher liegt, bevor Unison über den Taskplaner ausgeführt wird.
Anderenfalls hat man nur eine Kennworteingabe gegen die andere vertauscht
und dabei (abgesehen von der verschlüsselten Übertragung) nichts gewonnen.
Für die Einrichtung von ”ssh-agent” sein hier jedoch auf das Internet
verwiesen.
Den in der Datei ”id_dsa.pub” abgelegten Schlüssel kopiert man nun auf
dem entfernten Rechner in die Datei ” /.ssh/authorized_keys”. Dabei
ist darauf zu achten, dass diese Datei mehrere Schlüssel enthalten kann
und darum der Text aus ”id_dsa.pub” an die Datei anzuhängen ist (anstatt
diese zu überschreiben). Nun sollte die Anmeldung über SSH (wie ohen) ohne die
Eingabe eines Kennworts möglich sein.