Unterabschnitte

Unison - File Synchronizer

Ab Version 0.1.6 - Stand 24.04.2007

Allgemeines

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:

Quelle: http://www.cis.upenn.edu/ bcpierce/unison/

Installation

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.

Konfiguration

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”

Das Paketmenü

Unison Administration

Unison Synchronisation Tools

Zugang über SSH

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.