Unison zwischen Windows und Linux/Unix

Gespeichert von Erik Wegner am/um Do., 01.04.2010 - 22:27
Body

Ziel

Das Programm unison dient der Synchronisation zweier Verzeichnisse, diese können dabei lokal oder im Netzwerk erreichbar sein. In diesem Szenario teilen sich ein Windows- und ein Linux-Rechner je eine Replik des Verzeichnisses. Der Synchronisationsaufruf erfolgt auf der Seite des Windows-Rechners.

Voraussetzungen

Folgende Voraussetzungen müssen erfüllt sein:

  1. Auf beiden Systemen läft eine identische Version des unison-Programms
  2. Auf dem Linuxrechner kann sich ein Benutzer mit Schreibrechten im Zielverzeichnis interaktiv anmelden

Benötigte Programme

  • PuTTY zum Aufbau der SSH-Verbindung
  • Plink zum Aufbau der SSH-Verbindung
  • Pageant zur Vereinfachung des Verbindungsaufbaus
  • PuTTYgen zur Erzeugung eines SSH-Schlüssels
  • WinMerge zur Darstellung der Dateiunterschiede

Ablauf

Zuerst muss mittels PuTTYgen ein Schlüsselpaar erzeugt werden. Die Voreinstellungen können beibehalten werden, einfach auf "Generate" klicken und den Vorgang entsprechend den Bildschirmvorgaben vollziehen. Ein Passwort zum Schutz des Schlüssels ist optional, sollte aber verwendet werden. Anschließend muss der private Teil des Schlüssels auf der Festplatte abgelegt werden, z. B. als unison_win32_private_key.ppk. Der öffentliche Teil sollte ebenfalls mit abgelegt werden (z. B. als unison_win32_public_key.txt, falls er für ein späteres System ebenfalls zum Einsatz kommen soll (z. B. nach einer Neuinstallation).

Als nächstes wird dem Linuxsystem das neue Schlüsselpaar bekannt gemacht, indem der öffentliche Teil des Schlüssels in die Datei ~/.ssh/authorized_keys kopiert wird. Entweder wird dazu der Ausschnitt im PuTTYgen-Fenster kopiert oder aus der Textdatei, die den öffentlichen Schlüsselteil enthält, wird die mehrzeilige Zeichenkette als eine Zeile zusammengefügt in die genannte Datei übernommen. Vor dem eigentlichen Schlüsselteil steht die Art des Schlüssels, dahinter ein Kommentar. Die Datei kann nun so aussehen (ohne Zeilenumbrüche):

ssh-rsa AAAAB3NzaCfsdlklssFDSw
  AAAIEA6gfkjkgld/5439391QowfopS
  DGkmfnv7jnfjdjnndekjddtdc8y4ky
  RQLmfjMFjnrlsmlrorxmkkDEGVCsSQ
  Ik5jndhc879jmmg8djn4bfEwFPC963
  YavfjklsdjfNXJKJF934jdsmfskfrr
  nmpR3ROLdxJNxTyXcq7AcqmWimc= rsa-key-20051214

Um die Verbindung zu testen, kann nun "pageant" gestartet werden. Es erscheint als kleines Icon im Tray. Im Kontextmenü (rechte Maustaste auf dem Icon) fügt man durch Aufruf von "Add Key" den geheimen Schlüssel ein, dazu wird das Passwort benötigt. Pageant sorgt nun dafür, dass alle folgenden Aufrufe von PuTTY oder Plink, die diesen Schlüssel benutzen, kein Passwort abfragen müssen.

Nun werden einige Dateien benötigt, die die Steuerung der Programmaufrufe übernehmen. Als erstes eine Profildatei für unison, die Ignorierpfade und -dateinamen können natürlich angepasst werden. Im Beispiel heißt die Datei hubble.prf. Angepasst werden müssen die Verzeichnisnamen, der Benutzername und der Servername. Achtung: Die Datei muss in einem Verzeichnis liegen, das so heißt, wie unison in der sync.cmd aufgerufen wird (hier unison)

root = e:\entwicklung\latex
root = ssh://user1@servername//home/user1/daten/texte/latex
sshcmd = e:\entwicklung\unison-launcher.cmd
ignore = Path .svn
ignore = Path */.svn
ignore = Name *~
ignore = Name #*#
diff = e:\programme\winmerge\winmergeu.exe

Die Datei unison-launcher.cmd kapselt den Plink-Aufruf:

@e:\entwicklung\plink.exe -ssh -2 -l user1 servername unison -server

Wichtig ist das @-Zeichen am Anfang, damit die zusätzliche Ausgabe der Kommandozeile unterdrückt wird. Die Parameter besagen, dass das SSH-Protokoll in Version 2 benutzt werden soll, es wird der Benutzer user1 angemeldet und anschließend das unison-Programm im Servermodus auf dem Fremdrechner gestartet.

Die dritte benötigte Datei enthält den Aufruf des unison-Programms selbst und heißt sync.cmd:

@ECHO OFF
SET UNISON=e:\entwicklung\unison
SET UNISONPROFILE=hubble

@ECHO ON
%UNISON% %UNISONPROFILE%
pause

Abschließend erfolgt nochmal die schematische Darstellung aller Dateien im Dateisystem:

e:\
	entwicklung\
		pageant.exe
		plink.exe
		putty.exe
		puttygen.exe
		unison.exe
		unison-launcher.cmd
		unison_win32_private_key.ppk
		unison_win32_public_key.txt
		latex\
			datei-1.tex
			datei-2.tex
			...
		unison\
			hubble.prf