Syncthing

with tags "Freie" Software Android G33KY.de Open Source Softwareschrott Technik -

Seit Juni verwende ich kein Seafile mehr um meine Daten zu synchronisieren. Stattdessen bin ich auf Syncthing umgestiegen.

Warum? Hauptgrund Nr. 1 ist dass der Seafile-Client für Android einfach nur abartig untauglicher Schrott ist. Angefangen dabei dass Dateien nur heruntergeladen werden wenn man sie öffnet, Synchronisierung dieser Dateien dann auch manuell zu triggern ist (vergessen vor dem Öffnen zu aktualisieren? pech gehabt!) über die Dateizuordnung die komplett kaputt ist (seadroid will selbst verwalten welche Datei mit welchem Intent geöffnet wird statt Android die Wahl zu überlassen) bis dahin dass Updates bei FDroid eher Glückssache sind als etwas mit dem man fest rechnen kann.

Also Syncting. Das hat auch gleich den Vorteil dass es eine deutlich dezentralisiertere Infrastruktur mitbringt. Jede Node synchronisiert sich mit jeder anderen Node (wenn beide die gleichen Freigaben besitzen) und abgesehen von einem "Verteilergerät"-Bit das entscheidet ob man bekannte Nodes von einer anderen automatisch übernimmt, gibt es keinen wirklichen Server.

BTW: niemals mehrere Verteilergeräte verwenden, noch weniger welche die sich gegenseitig als solche betrachten! (sonst wird es unmöglich Nodes zu löschen)

Gesteuert werden Nodes hauptsächlich über eine Config-Datei oder das mitgelieferte Webinterface. Alles läuft recht angenehm minimalistisch ab. Syncthing kümmert sich einzig darum dass Dateien synchronisiert werden. Wo Seafile noch versucht ein Web-Frontend oder WebDAV-Server anzubieten, Nachrichten zwischen Nutzern auszutauschen oder Markdown zu einem Wiki zu parsen tut Syncthing... nichts.

Synthing-Web-Interface

Du brauchst mehr Funktionalität? Kein Problem! Nutze ein Tool das diese Funktionalität bietet und werf' es auf das synchronisierte Verzeichnis!

Vorteile:

  • Daten werden direkt nur im Dateisystem abgelegt, keine kryptischen Block-Daten mit denen man auf Serverseite nicht ohne weiteres Arbeiten kann (weshalb ich bei Seafile vieles an Daten auf meinem Server doppelt vorhalten und per seaf-cli mit dem Server selbst synchronisieren musste)
  • der Android-Client ist einfach nur der Desktop-Client mit einer zusätzlichen GUI die die API des Web-Frontends parst, wenn die GUI irgendwas nicht kann, kann man noch immer jenes verwenden. Es existieren keinerlei funktionale Einschränkungen
  • Client (und Server natürlich erst recht) benötigt weit weniger Ressourcen
  • Syncthing bietet ähnlich viele Optionen selbst eine Versionierung vorzunehmen. Das aber halt auf jedem Client getrennt (z.B. kann ich 1 Jahr lang jede Dateiänderung auf meinem Server aufheben lassen und auf meinem Telefon nur die letzte Version) UND eine Option um externe Tools anzubinden (Git any1?)
  • man kann sich relativ einfach eine portable-Version von Syncthing basteln und auf einen USB-Stick werfen

Nachteile:
  • Syncthing kennt keine Benutzer, daher auch keine Verwaltung von Zugriffsrechten oder Sharing zwischen Nutzern - jede Freigabe ist entweder für jeden Host schreibbar oder man definiert auf einem Host dass er keinerlei Änderungen von außen annimmt
  • Syncthing ist definitiv nicht DAU-tauglich (ein DAU wird auch keinen Seafile-Server aufsetzen wollen, verwenden wäre da hingegen möglich)

Aber $Zusatzfunktion?

Wie bereits geschrieben kümmert sich Syncthing nur um seine einzige Aufgabe und macht diese gut.

Das bedeutet dass vieles an Funktionalität die Seafile mitbringt nicht vorhanden ist. Das ist gut so! Seafiles viele Funktionen bieten immer jeweils Möglichkeiten etwas grundsätzlich zu versuchen um dann wieder qualvoll an den Einschränkungen zu scheitern.

Dateifreigaben public alá Dropbox-Link sind ohne Zusatztools nicht möglich (oder gar zeitlich ablaufende Links und Aufrufstatistiken für jene), da kein zentraler Server definiert. Also einfach NGinx o.ä. auf eine "public"-Freigabe werfen und das Problem ist geklärt. Größere Verzeichnisse in Seafile will man eh niemandem freigeben, da die Möglichkeit zum Download als Zip ab einer gewissen Größe einfach deaktiviert ist und man keinesfalls händisch Links aus dem HTML-Code rausfrickeln will. (Ich hatte mal versucht per wget 5K Dateien von einem Seafile-Share runterzuladen, sollte man gar nicht erst versuchen...)

WebDav-Anbindung von Seafile war ebenfalls eine existierende Funktion. Ich habe sie vlt. 2-3x verwendet (dafür gefühlt einen halben Tag an Einstellungen rumgefrickelt), ansonsten war das für mich toter Code von dem ich nie etwas hatte. Versuche darüber meine Fritzbox anzubinden sind grandios gescheitert, ansonsten wäre das eine Möglichkeit gewesen ohne spezielle Client-Software zu arbeiten.

Ein eingebundenes Markdown-Wiki existierte in Seafile ebenfalls. Jenes konnte man natürlich auch nur per Web-Frontend nutzen, Links auf Unterverzeichnisse funktionierten gar nicht, ganz zu schweigen davon ein Wiki für nicht-angemeldete Nutzer sinnvoll lesbar zu machen. Bei Syncthing werfe ich im Zweifelsfall einfach etwas vergleichbares 'drauf, kann Layout/Funktionalität frei wählen und habe meine Ruhe.

Also alles Sonnenschein?

Nein. Wie bereits geschrieben würde ich Syncthing nicht gerade technisch unbedarfteren Leuten in die Hand drücken. Meiner Frau habe ich einen Client aufs Telefon gepackt und da das Familien-Wiki hin synchronisiert, aber da muss sie sich mit der Software selbst halt auch überhaupt nicht mehr beschäftigen. Sie hat einen Ordner der aktuell gehalten wird und brauch in dem nur mit einem Texteditor arbeiten.

Ich habe aber auch meinen Verwandten (z.B. Eltern) Accounts auf meinem Seafile-System gegeben gehabt, wenn die dies' ernsthafter verwendet hätten, wäre Syncthing schlicht keine Alternative gewesen.

Und dann war da noch das Problem mit den Versionssprüngen...

Versionssprünge?

Syncthing befindet sich noch in der Entwicklung. Bis zum Erreichen der Version 1.0 werden Versionssprünge wie 0.11 zu 0.12 zu einander inkompatibel sein (danach nur noch Sprünge wie 1.0 zu 2.0). Das ist auch dokumentiert, man muss es nur halt auch lesen.

Ich habe das nicht getan.

Als also mein Client auf der einen OSX-Arbeitskiste meldete "Es gibt ein Update auf 0.12.0" hab ich mich gefreut und auf Installieren geklickt. Danach habe ich gemerkt dass irgendein Depp die OSX-Sachen so eingestellt hat dass sie per Default den Beta-Kanal aktualisieren und ich damit eine inkompatible Version installiert habe die sich mit all' meinen anderen Kisten nicht versteht.

Das war nervig, aber die OSX-Kiste ist nicht sonderlich wichtig. Ich war dann doch froh als 0.12 offiziell released wurde und meine anderen Kisten fast alle zueinander kompatibel aktualisiert werden konnten. Und wieder habe ich vorher nicht genug nachgedacht und nicht bemerkt dass der Android-Client eben noch nicht aktualisiert wurde. Das wurde er dann auch für fast 2 Wochen nicht, was für mich sehr nervige Auswirkungen hatte.

Sprich: Bei ernsten Syncthing-Versionssprüngen immer PRÜFEN OB MAN WIRKLICH ALLE CLIENTS AKTUALISIEREN KANN, sonst zerschießt man sich selbst seine Synchronisation.

Geschrieben von Dr. Azrael Tod
Later article
Kekse
Older article
Pseudo-Nobelpreis