Aktionen

Raspberry Pi Syncthing installieren

Aus znilwiki

Version vom 6. August 2017, 19:51 Uhr von BLinz2 (Diskussion | Beiträge) (Textersetzung - „<comments>“ durch „<comments />“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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.



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.



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 /




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


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.



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.



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.



Kommentare

Loading comments...