Aktionen

Raspberry Pi Syncthing installieren

Aus znilwiki

Ich habe immer gerne Bittorrent Sync genutzt ... doch seit es die neue Version 2.0 gibt habe ich ständig Probleme damit, insbesondere was das Verbinden von Geräten angeht.

Als Alternative nehme ich nun Syncthing: https://syncthing.net/

Es gibt zwar schon Anleitungen wie man die Software auch auf einem Raspberry Pi zum laufen bekommt ... doch die sind leider wieder nicht ganz aktuell. Deshalb lohnte sich eine eigene Version.



1 Zum root wechseln

Egal was Ihr denkt und meint - ich arbeite als dauerhaft als root. Wenn Ihr als ein anderer Benutzer angemeldet seit so wechselt mit

sudo -i

zum root - ansonsten müsst Ihr vor jede der nachfolgenden Zeilen immer ein sudo stellen.



2 Variante 1: Manuell Herunterladen, Entpacken und installieren

cd /usr/src
wget https://github.com/syncthing/syncthing/releases/download/v0.11.22/syncthing-linux-arm-v0.11.22.tar.gz
tar xvzf syncthing-linux-arm-*.tar.gz
cd syncthing-linux-arm-*


Wir Installieren in das /usr/bin Verzeichnis:

cp syncthing /usr/bin/
cd /




3 Variante 2: Quellen hinzufügen und installieren (Empfohlen)

curl -s https://syncthing.net/release-key.txt | apt-key add -
echo "deb http://apt.syncthing.net/ syncthing release" | tee -a /etc/apt/sources.list.d/syncthing-release.list
apt-get update
apt-get install syncthing

Das Programm ist nun unter

/usr/bin/syncthing

installiert ... warum auch immer gibt es aber kein Start-Skript ... das kommt wieder unten


4 Erster Start und Konfiguration

Wir starten das Programm einfach über den Aufruf

syncthing

Das dauert nun beim ersten mal einige Minuten da er erst noch einige Dateien und Zertifikate erzeugt.

Beispielausgabe:

[monitor] 23:59:28 INFO: Starting syncthing
[start] 23:59:28 INFO: Generating RSA key and certificate for syncthing...
[ABCDE] 00:00:47 INFO: syncthing v0.11.16 (go1.4.2 linux-arm default) unknown-user@syncthing-builder 2015-07-19 11:34:11 UTC
[ABCDE] 00:00:47 INFO: My ID: 3YTRG4L-LYF32BL-5WGIN5K-N3LQ4RJ-CIRN3LE-YIJKHTY-HTW6MWR-4FECVAC
[ABCDE] 00:00:47 INFO: No config file; starting with empty defaults
[ABCDE] 00:00:47 INFO: Edit /root/.config/syncthing/config.xml to taste or use the GUI
[ABCDE] 00:00:47 INFO: Database block cache capacity 8192 KiB
[ABCDE] 00:00:47 OK: Ready to synchronize default (read-write)
[ABCDE] 00:00:47 INFO: Starting web GUI on http://127.0.0.1:8384/
[ABCDE] 00:00:47 INFO: Loading HTTPS certificate: open /root/.config/syncthing/https-cert.pem: no such file or directory
[ABCDE] 00:00:47 INFO: Creating new HTTPS certificate
[ABCDE] 00:00:47 INFO: Generating RSA key and certificate for bananapi...
[ABCDE] 00:00:47 INFO: Completed initial scan (rw) of folder default
[ABCDE] 00:01:08 INFO: Starting local discovery announcements
[ABCDE] 00:01:08 INFO: Starting global discovery announcements
[ABCDE] 00:01:08 INFO: Device ABCDEFG-ABCDEFG-ABCDEFG-ABCDEFG-ABCDEFG-ABCDEFG-ABCDEFG-ABCDEFG is "bananapi" at [dynamic]
[ABCDE] 00:01:08 INFO: API listening on 127.0.0.1:8384
[ABCDE] 00:01:18 INFO: New UPnP port mapping: external port 26917 to local port 22000.

Er hat nun die initialen Konfigurationsdateien erzeugt und unter

/root/.config/syncthing/

gespeichert:

ls -l /root/.config/syncthing/

Ausgabe:

root@bananapi ~ # ls -l /root/.config/syncthing/
insgesamt 28
-rw-r--r-- 1 root root 1411 Jul 25 00:00 cert.pem
-rw------- 1 root root 2209 Jul 25 00:00 config.xml
-rw-r--r-- 1 root root   33 Jul 25 00:01 csrftokens.txt
-rw-r--r-- 1 root root 1407 Jul 25 00:00 https-cert.pem
-rw------- 1 root root 2455 Jul 25 00:00 https-key.pem
drwxr-xr-x 2 root root 4096 Jul 25 00:00 index-v0.11.0.db
-rw------- 1 root root 2459 Jul 25 00:00 key.pem



Im Moment lauscht die Konfigurations-Webseite leider nur lokal auf der IP 127.0.0.1 - weshalb wir nur lokal über einen Webbrowser an diesen Dialog kämen.
Meine Raspberry Pi / Banana Pi laufen ohne GUI und ich möchte von extern an den Dialog.

Zunächst beenden wir syncthing per STRG + C bzw. mit CTRL + C
Dann bearbeiten wir die Konfigurationsdatei:

nano /root/.config/syncthing/config.xml

sucht den folgenden Abschnitt:

<gui enabled="true" tls="false">
    <address>127.0.0.1:8384</address>
    <apikey>xu2Y-Ian-jVkADUWCPZxgVfBd0mQ7TDX</apikey>
</gui>

und ändert die 127.0.0.1 zu 0.0.0.0 ab:

 <gui enabled="true" tls="false">
    <address>0.0.0.0:8384</address>
    <apikey>xu2Y-Ian-jVkADUWCPZxgVfBd0mQ7TDX</apikey>
</gui>

Wenn Ihr tls="false" auf tls="true" setzt müsst ihr die Verbindung über https:// statt http:// erstellen.
Nach dem Speichern starten wir das Programm noch einmal:

syncthing

Nun könnt Ihr von einem anderem Rechner aus per Webbrowser auf die Weboberfläche zugreifen:

http://1.2.3.4:8384
https://1.2.3.4:8384

die 1.2.3.4 müsst Ihr natürlich über eure Adresse ersetzen.

RaspberryPi-Syncthing-001.png

Über Aktionen --> Einstellungen könnt Ihr nun Bequem einen Benutzernamen und Passwort angeben damit nicht jeder im internen Netzwerk auf die Oberfläche zugreifen kann.



5 Syncthing als Dienst starten

Wenn das mit dem Zugriff geklappt hat ist es Zeit das wir das ganze als Dienst starten.
Hierzu brauchen wir ein init-Skript

nano /etc/init.d/syncthing

mit folgendem Inhalt:

#!/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: Single-user daemonized version of syncthing.
# Description: Starts the syncthing daemon
### END INIT INFO

DAEMON=/usr/bin/syncthing
PID=/tmp/syncthing.pid

case "$1" in
  start)
        echo "Starting syncthing ..."
        ## start-stop-daemon --start --oknodo --pidfile $PID --exec $DAEMON
        start-stop-daemon --start --background --oknodo --pidfile $PID --make-pidfile --chuid root --user root --exec $DAEMON
        sleep 6
        ;;
  stop)
        echo "Stopping syncthing ..."
        start-stop-daemon --stop --pidfile $PID --chuid root --user root --retry=TERM/10/KILL/5 && exit 0
        start-stop-daemon --stop --oknodo --exec $DAEMON --name syncthing --retry=TERM/10/KILL/5
        ;;
  restart|force-reload)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: syncthing {start|stop|restart|force-reload}" >&2
        exit 1
        ;;

esac

exit 0

Jetzt noch Ausführbar machen und zum Autostart hinzufügen:

chmod +x /etc/init.d/syncthing
update-rc.d syncthing defaults


Ab jetzt könnt Ihr per

service syncthing start
service syncthing stop
service syncthing reload

den Dienst beenden und starten.
Beim Starten ist eine künstliche Pause von 6 Sekunden eingebaut - syncthing braucht nach dem Aufruf ein paar Sekunden bis es wirklich erreichbar ist.



6 Firewall

Ab Werk versucht der Client über UPnP sich "ein Loch in die Firewall zu bohren" über das er von extern zu erreichen ist:

[ABCDE] 13:09:05 INFO: New UPnP port mapping: external port 48521 to local port 22000.

Port 22000 ist hierbei der Standard-Port.
Wenn der Client eine Zeile wie zuvor ausspuckt ist alles ok.
Steht da aber so etwas wie:

[ABCDE] 13:13:11 INFO: UPnP parse: unrecognized UPnP device of type uuid:F07D687D44FC-4190-170B-7508-F9C79521
[ABCDE] 13:30:20 INFO: No UPnP device detected

kann es sein das die Firewall dies nicht zuläst.
In diesem Fall empfehle ich folgendes:

Unter Aktionen -> Einstellungen deaktiviert Ihr das UPnP:

RaspberryPi-Syncthing-002.png

In der Firewall macht Ihr für

  • IPv4 ein Portforwarding / NAT von extern 22000 auf intern 22000 auf die IPv4 eures Clients für TCP und UDP
  • IPv6 eine Firewall regel für TCP und UDP auf Port 22000 für den Client

habt Ihr mehrere Clients im Netzwerk so müsst Ihr jeden eine anderen Port nehmen und auch an den Clients einstellen:

RaspberryPi-Syncthing-003.png

Ersetzt die 22000 durch einen anderen Wert und leitet von extern wiederum auf diesen um.


Bei einer Fritz!Box etc. müsst ihr das alles nicht, hinter einer Watchguard und einer pfSense war es notwendig.



7 Kommentare


andy@foxwerk.de

45 Monaten zuvor
Punktzahl 0++

Hi, leider habe ich kein Datum für den Beitrag gesehen, aber die Logs zeigen Ende Juli an... daher mal eine Frage:

Hat sich Syncthing bei Dir bewährt (also eher grundsätzlich, aber auch auf dem RPI)?

Grüße

andy

BLinz

45 Monaten zuvor
Punktzahl 0++

Datum steht auch immer ganz unten auf jeder Seite (zuletzt geändert).

Beim Syncthing / BitTorrent Sync ging es mir darum an Ziel und Quelle nutzbare Dateien zu haben. Im Moment transportiere ich damit die Backups von 4 Servern über das Internet auf meinen Banana Pi. Das funktioniert scheinbar ganz gut.

Syncthing scheiterte aber an meinem 600GB Installationsordner ... den Sichere ich nun per Seafile auf den gleichen Banana Pi

Wolf

38 Monaten zuvor
Punktzahl 0++

Ich hatte diese Fehler (RPi2 - Noobs 1.8 - raspbian jessie) bei der Installation, wobei da ein htp: Gedöns fehlt, was meinen ersten Beitrag wohl kommentarlos killte.

[4UCZS] 17:45:55 INFO: API listening on htp 127.0.0.1:8384 [4UCZS] 17:45:55 INFO: GUI URL is 127.0.0.1:8384/ [4UCZS] 17:45:56 WARNING: Failed to set UPnP port mapping: external port 0 on device 'FRITZ!Box 7490 (UI)' (192.168.178.1). [4UCZS] 17:45:56 WARNING: Failed to set UPnP port mapping: external port 0 on device 'InternetGatewayDeviceV2 - FRITZ!Box 7490 (UI)' (192.168.178.1).

Ich habe noch 10 Minuten gewartet und dann mit STRG + C die Installation abgebrochen.

Für die Fälle wäre es für Anfänger wie mich gut, wenn da ein troubleshooting Hinweis steht, wie man die angefangene Installation zurück abwickelt.

Von Kodi kannte ich einen Deinstallationsbefehl (für dessen vorige Installation mit apt-get), mit dem ich es eben nun probierte und schaffte, aber nicht sicher bin, ob ich damit voll erfolgreich oder es nur so schien:

sudo dpkg -r syncthing (Lese Datenbank ... 132672 Dateien und Verzeichnisse sind derzeit installiert.) Entfernen von syncthing (0.12.20) ... Trigger für man-db (2.7.0.2-5) werden verarbeitet ...

Bei Wiederholung des Befehls kam jedenfalls "syncthing ist nicht installiert"

Welche Alternativen gibt es zu syncthing?

(Jetzt habe ich den Kommentar in die Zwischenablage kopiert, bevor das wieder alles gelöscht werden sollte, weil da ein Unwort drin steht - Hinweis wäre jedenfalls schöner, als einfach wegwerfen, denn ich hatte das htp im Log beim einfügen nicht bemerkt gehabt)

BLinz

38 Monaten zuvor
Punktzahl 0++

Ich nutze Syncthing inzwischen nicht mehr und kann zur aktuellen Version nichts mehr sagen. Ich hatte zum einen das Problem das die Updates schwierig waren (war bei einem großen Versionssprung) und das es eben NICHT mit großen Datenmengen zurecht kam. Eigentlich ist das ja die Domäne des BitTorrent Protokolls auch große Datenmengen (nicht nur große Dateien) zu übertragen.

Ich hab in den sauren Apfel gebissen und nutze nun Seafile. Sauer aber nur deswegen weil es dadurch noch eine Stelle mit Kopien der Daten gibt - was aber auch als Vorteil gesehen werden kann.

Florian

2 Monaten zuvor
Punktzahl 0++

Herzlichen Dank für die Anleitung! Ich habe Syncthing (mittlerweile in der Version 1.0.1 !) seit ca. 2 Jahren in Betrieb und synchronisiere damit erfolgreich 200 GB auf einem Mac Mini, zwei Raspberry Pies und ein Windows-Notebook. Ganz selten hängt Syncthing an einem Ordnernamen, bei dem ich die nachträglich die Groß- / Kleinschreibung geändert habe (z. B. Ordner "FAchschaft" angelegt und nach dem Synchronisieren in "Fachschaft" umbenannt.) Kann man aber z. B. mit kompletten Umbenennen (in "Fachschaft neu") beheben. Ansonsten klappt alles reibungslos :-) Nochmals Danke!

Florian
Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen. Bei einem Kommentar wird deine IP-Adresse zusammen mit dem Text, den angegebenen Namen bzw. der Email-Adresse in der Datenbank für die Kommentare dauerhaft gespeichert. Genaueres kannst du hier nachlesen: Datenschutzerklärung