6.5. Dateisynchronisation (DaSo)

Die erste Methode zur erfolgreichen Kooperation zwischen den Geräten ist die Dateisynchronisierung. Hier wird auf ein Publish und Fetch Prinzip gesetzt. Ein “privilegiertes” Gerät, also Eines, an dem die Lehreransicht freigeschaltet wurde, kann einen bestimmten Zustand seiner Dateien öffentlich freigeben, welche die restlichen Geräte zu sich herunterladen können.

Der Einfachheit halber werden alle zu synchronisierende Dateien, sowie zusätzliche Meta-Dateien in einem extra Verzeichnis innerhalb des SSH-Verzeichnis abgelegt.

sync

Abb. 6.9 “share”-Verzeichnis im “.ssh”-Verzeichnis

Bei besagten Meta-Dateien handelt es sich um einen codierten Zeitstempel der letzten Veröffentlichung und einer Datei, die die Prüfsumme der ganzen Dateien in diesem Ordner enthält. Diese sind für den späteren Fetch-Prozess notwendig, um entscheiden zu können, welche der Dateien zum Einen valide und zum Anderen neuer als die eigenen sind.

Zur tatsächlichen Übertragung der Dateien eignen sich zwei Tools die über SSH agieren. Das Simplere der beiden ist “scp”. Dieses überträgt spezifizierte Dateien und/oder Verzeichnisse vollständig von einem Gerät in ein spezifiziertes Verzeichnis auf dem Remote-Gerät. Besser ist aber in der Regel “Rsync”, was in diesem Projekt auch zur Dateisynchronisation benutzt wird. Der Vorteil von Rsync ist dass hier nur das Delta, also die Unterschiede zwischen Quell- und Zielverzeichnis übertragen wird. Außerdem bietet Rsync nützliche Funktionen, wie Dateien vor dem Senden zu verpacken und komprimieren, oder nicht vorhandene Dateien im Quellverzeichnis im Zielverzeichnis zu löschen. Im Hinblick auf Situationen, in denen Dateien zwischen vielen Geräten synchronisiert werden sollen, ist die Bandbreitenoptimierung von Rsync eine sehr gute Wahl.

Führt ein Gerät den Publish-Prozess aus, so wird zunächst der eigene Zeitstempel aktualisiert. Danach wird eine Prüfsumme erstellt, die alle zu synchronisierenden Dateien sowie den Zeitstempel umfasst. Hier ist anzumerken, dass diese Prüfsumme nicht der Sicherheit dient. Sie hilft nicht der Identifikation böswilliger Dateien eines Gerätes welches nicht von einem Lehrer bedient wird. Die Prüfsumme ermöglicht lediglich das Erkennen, ob sich die Dateien seit des letzten Updates des Zeitstempel verändert haben.

Ab diesem Zeitpunkt sind alle Voraussetzungen, um sich diese Dateien zu holen, erfüllt. Zusätzlich werden aber direkt alle Dateien per Rsync an alle bekannten Geräte im Netzwerk versendet. Somit können sich die Fetch-Prozesse allen erreichten Geräten gespart werden.

Der Fetch-Prozess ist für diejenigen Geräte gedacht, welche zu der Zeit der Veröffentlichung nicht im Netzwerk erreichbar waren. Hier wird iterativ bei jedem Gerät der Wert in der Prüfsummen-Datei mit der aktuellen Prüfsumme, die sich im Verzeichnis vorfinden lässt, verglichen. Stimmen diese überein, so wird sich dieser Host als möglicher Spender vermerkt. Nachdem alle durchgelaufen sind, besitzt man eine Liste aller Geräte mit valider Prüfsumme. Nun kann man sich denjenigen mit dem aktuellsten Zeitstempel heraussuchen und die Dateien von diesem beziehen.

post_fetch

Abb. 6.10 Ablauf der Post- und Fetch-Skripte