Raspberry Pi Syncthing installieren: Unterschied zwischen den Versionen
Aus znilwiki
BLinz (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
BLinz (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
||
Zeile 37: | Zeile 37: | ||
<!-- | <!-- | ||
<nowiki>curl -s https://syncthing.net/release-key.txt | apt-key add -</nowiki> | <nowiki>curl -s https://syncthing.net/release-key.txt | apt-key add -</nowiki> | ||
<nowiki>echo "deb | <nowiki>echo "deb https://apt.syncthing.net/ syncthing release" | tee -a /etc/apt/sources.list.d/syncthing-release.list</nowiki> | ||
--> | --> | ||
<nowiki>sudo curl -s -o /usr/share/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg</nowiki> | <nowiki>sudo curl -s -o /usr/share/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg</nowiki> |
Version vom 15. Februar 2022, 12:36 Uhr
Changelog:
- 06.08.20217 erste Version
- 15.02.2022 URLs angepasst - danke an Matthias F.
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)
sudo curl -s -o /usr/share/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg echo "deb [signed-by=/usr/share/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list apt update apt 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.
Ü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:
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:
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.