Raspberry Pi: BitTorrent Sync Alternative Syncthing installieren
Wer eine Daten-Cloud ohne zentralen Server aufbauen möchte, der wird schnell bei BitTorrent Sync landen, welches auch auf dem Raspberry Pi läuft. Jedoch stören sich einige Nutzer daran, dass BitTorrent Sync nicht Open Source ist und folglich den Code nicht auf Wasserdichte überprüft werden kann. Abhilfe möchte die BitTorrent Sync Alternative Syncthing schaffen. Das Projekt setzt auf Open Source, ein offenes Protokoll und offene Diskussionen mit der Community. Mit Windows, Mac OS X und Linux Clients (Mobile Apps in Entwicklung), einer webbasierten Benutzeroberfläche, wie auch einer gesicherten Datenübertragung mittels TLS Verschlüsselung mit perfect forward secrecy scheint die technische Basis solide zu sein. Wie man Syncthing auf dem Raspberry Pi als einen dauerhaft laufenden Node installiert, erkläre ich im Folgenden.
Voraussetzung: Raspbian oder vergleichbare Distribution installiert
Zunächst müssen wir die aktuelle Version von Syncthing in der ARMv5 Variante von dem Git Repository des Projektes herunterladen und entpacken. Zum Zeitpunkt als dieses Tutorial entstand war Version 0.9.15 aktuell.
sudo mkdir /etc/syncthing
cd /etc/syncthing
sudo wget https://github.com/syncthing/syncthing/releases/download/v0.9.15/syncthing-linux-armv5-v0.9.15.tar.gz
sudo tar xvzf syncthing-linux-armv5-*.tar.gz
sudo rm syncthing-linux-armv5-*.tar.gz
sudo mv syncthing-linux-armv5-*/* .
sudo rm -r syncthing-linux-armv5-*
Anschließend verlinken wir die Binärdatei so, dass wir sie einfach ohne Pfadangabe ausführen können.
sudo ln -s /etc/syncthing/syncthing /usr/bin/syncthing
Nun starten wir Syncthing erstmalig. Dabei werden RSA Keys und Zertifikate erzeugt, weshalb dies etwa drei Minuten dauern kann. Anschließend wird im Terminal u.a. My ID ausgegeben. Die darauffolgende ID, bspw. U5UYXAG-O37XLYZ-FGM8PRC-VSD4YVP-ULZVQNW-23CF6RG-5IVVKZ6-EFQJTAR sollte man sich notieren, da dies die eindeutige Identifikation eures Raspberry Pis in Syncthing ist. Anschließend kann die Software zunächst mittels STRG + C vorerst wieder geschlossen werden.
syncthing
Damit das Webinterface nicht nur auf dem Raspberry Pi selbst, sondern im internen Netzwerk ansprechbar ist, müssen wir dieses in der Syncthing Konfiguration entsprechend ändern. Dabei aktivieren wir gleich den Zugriff mittels SSL-Verschlüsselung, weshalb auch der nächste Start der Anwendung wieder etwa drei Minuten dauern wird, da ein SSL-Zertifikat geniert wird. In dem Editor nano kann man mittels STRG + X, Y und Enter speichern.
nano ~/.config/syncthing/config.xml
ersetze
<gui enabled="true" tls="false"> <address>127.0.0.1:8080</address> </gui>
durch (IP durch IP-Adresse des Raspberry Pis ersetzen)
<gui enabled="true" tls="true"> <address>IP:8080</address> </gui>
Wir starten Syncthing erneut.
syncthing
Jetzt können wir unter https://IP:8080/ (IP durch IP-Adresse des Raspberry Pis ersetzen) im Browser das Webinterface der Anwendung öffnen. Oben rechts befindet sich ein kleines Zahnrad, über welches man zu dem Menüpunkt Einstellungen gelangt. In diesem können wir dem Raspberry Pi Syncthing Node einen anderen Namen geben, den Datendurchsatz beschränken und weitere Einstellungen vornehmen. Außerdem sollten wir einen Benutzernamen und Passwort für den Zugriff auf das Webinterface setzen. Falls die Synchronisierung nur innerhalb des eigenen Heimnetzwerkes stattfinden soll, können wir den Haken bei Globale Auffindung entfernen. Dies hat auch zur Folge, dass Syncthing sich nicht am zentralen Vermittlungsserver anmeldet (darüber werden keine Dateien ausgetauscht, sondern nur Verbindungen hergestellt). Nach dem Speichern der Einstellungen werden wir aufgefordert Syncthing neuzustarten, was mir bequem über das Webinterface durchführen können.
Wir sollten nun an das Ende des Webinterfaces scrollen. Wenn wir dort eine Benachrichtigung mit dem Text Failed to create UPnP port mapping finden, so sollte im Router die Kommunikation über UPnP zur Netzinternen Synchronisierung aktiviert werden.
Im oberen Teil des Webinterfaces finden wir einen voreingestellten Ordner zum Synchronisieren namens default. Diesen können wir über Einstellungen bearbeiten entweder unseren Wünschen anpassen (bspw. Versionierung aktivieren) oder auch löschen. Über den Button Verzeichnis hinzufügen können wir gewünschte weitere Ordner zur Synchronisierung definieren.
Es ist an der Zeit, den Syncthing Client auf allen anderen Geräten, die in die Synchronisierung eingebunden werden sollen, zu installieren. Außerdem sollten wir dort die gleichen Verzeichnisse wie auf dem Raspberry Pi anlegen. Auch sollten wir die IDs der Geräte notieren.
Um die Synchronisation zu starten müssen nun auf den Geräten gegenseitig im Webinterface mit dem Button Knoten hinzufügen die IDs der Geräte geaddet werden. Anschließend müssen Syncthing auf allen Geräten neugestartet werden, die gewünschten gleichnamigen Verzeichnisse freigegeben werde (in den Einstellungen der Verzeichnisse zu finden) und Syncthing erneut neugestartet werden.
Abschließend sollten wir ein Startscript anlegen, damit die Software beim Boot des Raspberry Pis automatisch startet. Falls Syncthing nicht unter dem Benutzer pi ausgeführt wird muss dies in Zeile 15 ersetzt werden.
sudo nano /etc/init.d/syncthing
#!/bin/sh ### BEGIN INIT INFO # Provides: syncthing # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # Should-Start: $network # Should-Stop: $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Multi-user daemonized version of syncthing. # Description: Starts the syncthing daemon for all registered users. ### END INIT INFO # Replace with users you want to run syncthing clients for syncthing_USERS="pi" DAEMON=/etc/syncthing/syncthing startd() { for stuser in $syncthing_USERS; do HOMEDIR=$(getent passwd $stuser | awk -F: '{print $6}') config=$HOMEDIR/.config/syncthing/config.xml if [ -f $config ]; then echo "Starting syncthiing for $stuser" start-stop-daemon -b -o -c $stuser -S -u $stuser -x $DAEMON else echo "Couldn't start syncthing for $stuser (no $config found)" fi done } stopd() { for stuser in $syncthing_USERS; do dbpid=$(pgrep -fu $stuser $DAEMON) if [ ! -z "$dbpid" ]; then echo "Stopping syncthing for $stuser" start-stop-daemon -o -c $stuser -K -u $stuser -x $DAEMON fi done } status() { for stuser in $syncthing_USERS; do dbpid=$(pgrep -fu $stuser $DAEMON) if [ -z "$dbpid" ]; then echo "syncthing for USER $stuser: not running." else echo "syncthing for USER $stuser: running (pid $dbpid)" fi done } case "$1" in start) startd ;; stop) stopd ;; restart|reload|force-reload) stopd && startd ;; status) status ;; *) echo "Usage: /etc/init.d/syncthing {start|stop|reload|force-reload|restart|status}" exit 1 ;; esac exit 0
Zuletzt geben wir dem Startscript die Rechte ausgeführt zu werden, aktivieren es und starten den Raspberry Pi neu.
sudo chmod +x /etc/init.d/syncthing
sudo update-rc.d syncthing defaults
sudo reboot
Geschafft! Die BitTorrent Sync Alternative Syncthing ist fertig eingerichtet und synchronisiert vortan die Daten, mit dem Raspberry Pi als dauerhaft teilnehmender Node.
36 Kommentare. Hinterlasse eine Antwort
Kannst Du schon was zur Performance/Stabilität sagen im Vergleich zu BTsync? Denn das ist ja wirklich extrem einfach überall einzurichten und läuft zumindest bei mir bis jetzt ohne jedes murren und kann mittlerweile sogar das Fotosyncen anstelle von dropbox auf dem Handy übernehmen.
Ich selbst habe es nur angetestet und habe dabei keine Probleme festlegen können. Auf Google+ schrieb mir John Doe als Kommentar auf den Artikel:
„Ich nutze Syncthing schon eine ganze Weile und kann nur bestätigen, dass es ein großartiges Tool ist.
Im Gegensatz zu ownCloud kann es wenigstens auch mit großen Dateien arbeiten :)“
Hallo Jan, schönen Dank dafür, dass du dich daran erinnert hast das Tool hier einmal vorzustellen – samt tadelloser Anleitung. Eines vorweg: Syncthing heisst nun Pulse.
https://ind.ie/pulse/
Die Versionsnummer ist allerdings unverändert v0.10.1 seit dem 12.10., wie man Github entnehmen kann, wo die Dateien auch noch unter dem alten Namen stehen.
Ein paar Problemchen habe ich dennoch mit dem Programm. Und zwar würde ich gerne einen Ordner synchronisieren, welcher sich auf einem USB-Stick befindet. Gemäß deiner Anleitung habe ich diesen auch problemlos auf dem Raspi einbinden können.
https://jankarres.de/2013/01/raspberry-pi-usb-stick-und-usb-festplatte-einbinden/
Dateiformat ist FAT32 und ich vermute genau dort liegt evtl. auch der Hund begraben?
Versuche ich nun einen Ordner auf dem besagten Stick zu synchronisieren, bekomme ich die Fehlermeldung:
9:03:50: puller: final: chmod /media/usb-stick/sync-ordner/.syncthing.323213: operation not permitted
und kurz darauf kommt dann:
9:04:51: Folder „sync-ordner“ isn’t making progress – check logs for possible root cause. Pausing puller for 1m0s.
Desweiteren habe bekomme ich mit der Windowsversion einfach keine Verbindung zu bestehenden Devices auf einem meiner Raspis (innerhalb und ausserhalb meines LAN) zustande. Dem Webinterface von Syncthing (Pulse) kann ich dann nur entnehmen, dass das Device „Disconnected“ ist (lila Balken) und unter dem Punkt „Address“ steht lediglich ein Fragezeichen (?).
Es gib übrigens eine Erweiterung für Windows, damit Pulse nicht ständig ein Konsolenfenster geöffnet haben muss. Die Bedienung landet dann im Systray.
Das Teil nennt sich dann SyncthingTray:
https://github.com/iss0/SyncthingTray
Erstens ist FAT32, wie du angenommen hast, auf Grund der Beschränkung auf 4GB je Datei, keine gute Idee. Das Problem liegt aber meines Erachtens nach wo anders. Die Fehlermeldung besagt, dass die Anwendung nicht das Recht hätte auf die benötigen Daten zuzugreifen. Folglich nehme ich am, dass der Benutzer, der Syncthing ausführt, keine Berechtigung hat auf das USB-Speichermedium zuzugreifen. Vielleicht hast du es als Root-Benutzer gemountet und versuchst nun mit dem Benutzer pi darauf zu schreiben?
Verstehe. Danke für den Hinweis auf die 4GB Beschränkung.
>Vielleicht hast du es als Root-Benutzer gemountet und versuchst nun mit dem Benutzer pi darauf zu schreiben?
Genau so ist es wohl. Allerdings ist mir gerade nicht klar, wie ich das nun ändern könnte. Kannst du mir dazu einen Tipp geben? Danke.
Ich tippe mal darauf, dass du es via fstab mountest. Da solltest du dich mal mit dem Rechtesystem in dessen Dokumentation auseinandersetzen. Das andere Problem würde ich tippen erledigt sich dann von alleine 😉
so sieht mein Eintrag in /etc/fstab aus:
UUID=ABCD-1234 /media/usb-stick vfat defaults,auto,umask=000,users,rw 0
Hast du noch eine Idee zu der genannten Thematik (kein Connect zu den Devices) bei der Windowsversion von Syncthing/Pulse?
Hi, da mir noch immer nicht klar ist, was das automatische Update verhindert, habe ich ein Script geschrieben, welches sich sehr stark an Jan´s Verfahren für die Erstinstallation anlehnt. Wäre Cool, wenn mir jemand behilflich sein könnte, wie ich es anstelle, nicht jedes Mal von Hand auf die aktuelle Versionsnummer mittels Nano anzupassen.
#!/bin/sh
sudo /etc/init.d/syncthing status
sudo /etc/init.d/syncthing stop
sleep 3
sudo /etc/init.d/syncthing status
# die jeweils aktuelle Version herunterladen
sudo wget https://github.com/syncthing/syncthing/releases/download/v0.10.3/syncthing-linux-armv5-v0.10.3.tar.gz
# das Archiv entpacken und anschliessend loeschen
sudo tar xvzf syncthing-linux-armv5-*.tar.gz && sudo rm syncthing-linux-armv5-*.tar.gz
sudo mv syncthing-linux-armv5-*/* /etc/syncthing/
sudo rm -r syncthing-linux-armv5-*
# den Syncthing-Daemon wieder starten
sudo /etc/init.d/syncthing start
Hallo zusammen!
Aus einem mir nicht bekannten Grund (bin jetzt nicht so der Linux-Pro), funktioniert das Startskript bei mir nicht. Ich habe im Skript lediglich den Benutzer „pi“ abgeändert und dann die Befehle wie beschrieben ausgeführt. ich muss syncthing immer manuell starten. Woran könnte das liegen?
Was auch nicht geht sie die automatische Upgrade-Funktion, er gibt immer: Permission denid aus. Was kann ich dagegen tun?
Klingt ganz schwer nach einem Rechte Problem. Wenn du einen Benutzer änderst, der eine Anwendung ausführt, musst du die Rechte an den auszuführenden bzw. zu ändernden Dateien ebenfalls ändern. Stichwort: chown.
Hallo Jan, erst einmal Dir und allen anderen ein gutes neues Jahr. Syncthing ist zwischenzeitlich bei Version 0.10.19 angekommen. Ich habe den Eindruck es haben sich ein paar Veränderungen ergeben bei der Installationsroutine. So gibt es bswp. im Installationsordner einen Unterordner /etc/. Von daher denke ich müsste deine Installationsanleitung überarbeitet werden. Wäre sehr nett, wenn Du dafür vielleicht kurz die Zeit finden würdest. Auch ist nun eine automatische Upgrade-Funktion implementiert worden, welche aber nicht funktioniert, wenn die Installation in /etc/syncthing geschieht? (fehlende Rechte).
Hier kann man dazu etwas lesen:
https://discourse.syncthing.net/t/permission-denied-when-updating-from-webgui/721
Desweiteren frage ich mich ob Syncthing evtl. in einer anderen ARM-Version (v6 oder v7) laufen würde:
http://www.webupd8.org/2014/06/syncthing-open-source-bittorrent-sync.html
Danke für den Hinweis. Eine Überarbeitung des Artikels steht schon auf der Todo-Liste 😉
Eigentlich geht es ja nur darum, das ganze im /bin/ Verzeichnis auszuführen, oder?
Das könnte man machen, ist aber keine schöne Lösung. Dafür gibt es die globalen Zugriffsmöglichkeiten, wie im Artikel ergänzt.
Danke für die Anleitung. Bei mir werkelt noch Bittorrentsync, aber wegen der ausgesprochen selbstbewussten Preispolitik, werde ich über kurz oder lang umsteigen. Ich freue mich schon auf dein Update. Ach ja: Syncthing bleibt doch syncthing:
https://discourse.syncthing.net/t/syncthing-is-still-syncthing/1372
Hallo Jan! Vielen Dank für deine Anleitung.
Kannst du mir bitte sagen was macht dein Befehl:
sudo mv syncthing-linux-armv5-*/* .
weil bei dem Versuch ein neue Syncthing version zu installieren habe ich die Meldung:
mv: cannot move `syncthing-linux-arm-v0.10.29/etc‘ to `./etc‘: Directory not empty
Er verschiebt alle Dateien aus dem Verzeichnis syncthing-linux-armv5-* in das Verzeichnis in dem du dich momentan befindest.
Vielen Dank.
das startskript hat nen kleinen fehler:
nach zeile 20 sollte die var config noch gesetzt werden. sonst klappt der startaufruf nicht:
config=$HOMEDIR/.config/syncthing/config.xml
Hab bislang funktioniert, kann aber durch ein Update gekommen sein. Habe es ergänzt. Danke!
Vielen Dank für die tolle Anleitung!
Ich hatte BTSync auf meinem Cubietruck unter Debian laufen. Es wurden zwei Windows-PCs mit Cubietruck synchronisiert. Seit dem Update von BTSync auf V2 konnte/wollte das aus irgendwelchen Gründen nicht mehr miteinander synchronisieren. Jetzt war dank der guten Anleitung innerhalb einer Stunde BTSync weg und syncthing drauf und es synchronisiert wieder.
Freut mich zu lesen 🙂
Danke für die Anleitung! Hast du eine Idee, wie man den Output von Syncthing vernünftig loggen kann? Ich habe es mit folgender Anpassung im init.d-Script versucht:
start-stop-daemon -b -o -c $stuser -S -u $stuser -x $DAEMON > /home/pi/syncthing/output.log
Allerdings wird das als nicht-root mit einem „Permission denied“ quittiert, obwohl die Datei output.log die richtigen Berechtigungen bekommen hat.
Ich denke diese Lösung sollte dir weiterhelfen.
Es gibt jetzt für Debian/Ubuntu Pakete…gerade gibt es noch Probleme mit dem „arm“ Paket, das ist aber schon im Blick…
Problem sollte behoben sein und die Installation über http://apt.syncthing.net/ laufen…
Danke für den Hinweis! Steht schon auf der Liste der zu überarbeitenden Artikel.
Hallo Jan, Dank diese Tutorials Syncthing auf 2 RPi, 2 PC und 1 Smartphone installiert. BitTorrentSync war nach dem Update leider nicht mehr zu gebrauchen. Gruß aus deiner ehemaligen Heimat 😉
Hallo,
ich arbeite jetzt seit einigen Wochen mit syncthing und meine Erfahrungen sind gemischt.
Bei mir läuft bzw. lief es auf diesen Maschinen, die untereinander diverse Verzeichnisse synchronisieren (pro PC jeweils ca. 500 GB daten):
1. HP 8540p mit Win 7: läuft gut
2. cubietruck mit Debian: Läuft zufriedenstellend. Nicht ganz so schnell wie 1., aber ok.
3. Atom D525-Cpu mit Win 8.1 (Familien-PC):
Syncthing lief zwar und hat auch leidlich synchronisiert, aber die Kiste wurde dermaßen ausgebremst, dass das Arbeiten damit keinen Spaß mehr gemacht hat (das Ding ist ja von Haus aus nicht das schnellste). Deswegen hier syncthing wieder entfernt.
4. Raspberry Pi B (nicht Pi 2) mit Raspbian: Eine reine Performance-Katastrophe. Das Ding läuft schon eine Woche und ist ständig nur am scannen, obwohl die Kiste nichts anderes zu tun hat. Immerhin sind die Dateien dann doch irgendwann synchronisiert, aber so macht das keinen Spass. Der Raspi hat allerdings auch eine Sonderaufgabe. Er synchronisiert die Daten von Nr. 3 ins Netz, die ich dem Raspi per smb-Freigabe „untergeschoben“ habe. Dadurch wird 3. nicht mehr ausgebremst, nimmt aber dennoch am synchonisieren teil. Das ist vielleicht eine seltsame Lösung, mir fällt aber gerade nichts besseres ein.
5. HP Touchpad mit Android: syncthing zwar installiert, aber noch nicht ernsthaft mit den anderen Teilnehmern synchronisiert.
6. Motorola Droid 4 mit Android: wie 5.
Gruß,
Georg
Hallo Georg,
ich weiß ja nicht welche Datenmengen synchronisierst, aber bei mir ist der RPi, der nebenbei noch als Druckserver werkelt, mit 1-2 % belastet. Wenn er scannt, geht es bis 22 % hoch, wenn er synct dann bis zu voller Auslastung. Bockig verhält sich nur die App auf meinem Androiden, da ist ab und an ein Neustart fällig.
Ich synche 4 Ordner mit 8GB, insgesamt 5620 Dateien verteilt auf 477 Verzeichnisse…
Mein Raspi mühte sich mit 8 Ordnern ab, darin 165836 Einträge, ~483 GiB Daten. Das war vielleicht ein bisschen zuviel für das arme Kerlchen.
Ich gebe das jetzt auf dem Raspi auf.
Ich lasse syncthing wieder direkt auf der Atom-CPU laufen, setze aber die Umgebungsvariable „GOMAXPROCS=1“. Damit belastet syncthing die CPU im schlimmsten Fall nur bis ca. 50%. Ich hoffe, damit bleibt genug CPU zur Bedienung unseres Familen-PCs übrig.
Super Anleitung, danke mal dafür! Beim init-Script ist ein Tippfehler in Zeile 23, dort steht „syncthiing“, ansonsten top Anleitung!
Mal wieder eine tolle Anleitung, Jan. Vielen Dank dafür.
Warum genau kann ich syncthing nicht einfach per cronjob beim boot starten?
Hi Jan, danke für die Anleitung,
habe heute die neueste Version von https://github.com/syncthing/syncthing/releases/download/v0.14.9/syncthing-linux-arm-v0.14.9.tar.gz
installiert, es ist alles bis auf das Startscript gut verlaufen.
Beim Booten erscheint die Fehlermeldung „Failed to start LSB: Multi-user daemonized version of syncthing.. See ’systemctl status syncthing.service‘ for details
Hallo Jan,
tolles Tutorial, wie immer. Ich habe Syncthing erfolgreich installiert und getestet. Alles prima. Nun möchte ich es aber deinstallieren.
der Befehl:
sudo apt-get autoremove syncthing
bleibt allerdings erfolglos. Wie bekomme ich es hin?
Jens
Wenn Du es nach der oben beschriebenen Anleitung installiert hast wird der apt-get Befehl nicht funktonieren da Syncthing ausserhalb der Paketverwaltung installiert wurde.
Da sollte dann ein einfaches rm -rf /etc/syncthing reichen.