JensDiemer

Syncthing muß man im prinzip nicht installieren. Es ist mehr so wie eine PortableApps.
Ich richte es so ein, das ich dafür einen seperaten user erstelle:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Create the user 'syncthing' and add him into 'users' group:
root@foobar# adduser syncthing --ingroup users --disabled-password --quiet

# Make synthing home directory accessable for all other users:
root@foobar# chmod 2770 /home/syncthing/
syncthing@foobar$ su -l syncthing -c 'echo "umask 007" >> /home/syncthing/.profile'
syncthing@foobar$ su -l syncthing -c 'echo "umask 007" >> /home/syncthing/.bash_profile'

# switch to synthing user:
root@foobar# su -l syncthing

# Download links: https://github.com/syncthing/syncthing/releases/latest
syncthing@foobar$ VERSION=v0.9.9
syncthing@foobar$ ARCH=386
syncthing@foobar$ ARCH=amd64
syncthing@foobar$ ARCH=armv7

syncthing@foobar$ wget https://github.com/syncthing/syncthing/releases/download/${VERSION}/syncthing-linux-${ARCH}-${VERSION}.tar.gz
syncthing@foobar$ tar xzfv syncthing-linux-${ARCH}-${VERSION}.tar.gz
syncthing@foobar$ rm syncthing-linux-${ARCH}-${VERSION}.tar.gz

# alles nach ~/bin verschieben:
syncthing@foobar$ mkdir ~/bin
syncthing@foobar$ mv syncthing-linux-${ARCH}-${VERSION}/* ~/bin/
syncthing@foobar$ rm -r syncthing-linux-${ARCH}-${VERSION}

Um den Download zu verifizieren:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
syncthing@foobar$ cd ~/bin
syncthing@foobar ~/bin $ gpg --recv-key BCE524C7
gpg: fordere Schlüssel BCE524C7 von hkp-Server keys.gnupg.net an
gpg: /home/syncthing/.gnupg/trustdb.gpg: trust-db erzeugt
gpg: Schlüssel BCE524C7: Öffentlicher Schlüssel "Jakob Borg (calmh) <jakob@nym.se>" importiert
gpg: keine uneingeschränkt vertrauenswürdigen Schlüssel gefunden
gpg: Anzahl insgesamt bearbeiteter Schlüssel: 1
gpg:                              importiert: 1  (RSA: 1)

# Vergleich mit https://nym.se/gpg.txt
syncthing@foobar ~/bin $ gpg --fingerprint BCE524C7
pub   4096R/BCE524C7 2014-03-20
  Schl.-Fingerabdruck = 9DCC 29A8 312F 5C0F 2625  E76E 49F5 AEC0 BCE5 24C7
uid                  Jakob Borg (calmh) <jakob@nym.se>
sub   4096R/276E301D 2014-03-20

# Der eigentliche Vergleich:
syncthing@foobar ~/bin $ gpg --verify syncthing.asc
gpg: Unterschrift vom Fr 16 Mai 2014 16:30:25 CEST mittels RSA-Schlüssel ID BCE524C7
gpg: Korrekte Unterschrift von "Jakob Borg (calmh) <jakob@nym.se>"
gpg: WARNUNG: Dieser Schlüssel trägt keine vertrauenswürdige Signatur!
gpg:          Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen Besitzer gehört.
Haupt-Fingerabdruck  = 9DCC 29A8 312F 5C0F 2625  E76E 49F5 AEC0 BCE5 24C7

syncthing starten

Manuelles starten:

1
2
3
4
5
# als syncthing user
syncthing@foobar$ ~/bin/syncthing

# Von einem anderen user aus, bsp:
root@foobar# su -l synthing -c /home/syncthing/bin/syncthing

Nach dem starten horcht die WebGUI auf 127.0.0.1:8080 wenn man ihn von einem anderen Rechner erreichen will, muß man die config.xml anpassen:

Nach dem ersten starten, wird die Konfigurationsdatei bei /.config/syncthing/config.xml abgelegt, also bsp:

1
2
3
4
5
# als syncthing user
syncthing@foobar$ mcedit ~/.config/syncthing/config.xml

# oder als jemand anderes:
root@foobar# su -l syncthing -c "mcedit ~/.config/syncthing/config.xml"

Automatisches starten via rc.local:

1
2
3
4
5
6
# backup rc.local and remove "exit 0" from the end:
root@foobar# cp /etc/rc.local /etc/rc.local.bak
root@foobar# sed -e 's/^exit 0//g' /etc/rc.local.bak > /etc/rc.local

# add synthing
root@foobar# echo 'nice -n 19 ionice -c3 su -l syncthing -c "/home/syncthing/bin/syncthing" &' >> /etc/rc.local

Der Eintrag in der rc.local sieht also so aus:

1
nice -n 19 ionice -c3 su -l syncthing -c "/home/syncthing/bin/syncthing" 2>&1 | logger -s -t syncthing &

syncthing_loop.sh

Leider kommt es auch mal vor, das syncthing sich ungewollt beendet. Deswegen starte ich es in einem loop immer wieder neu.
Jedoch ist es auch so, das der prozess sich selber neu startet (Wenn die settings sich ändern) deswegen ist ein neustart loop nicht ganz so einfach:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/bin/bash

SYNCTHING_BIN=/home/syncthing/bin/syncthing
SYNCTHING_USER=syncthing


print() {
    echo "$(whoami) --- $* ---" | logger -s -t syncthing_startup
}
echo "starting $0"


if [ "$(whoami)" != "root" ]; then
    print "ERROR: This script should run as 'root' / via sudo !"
    exit 1
fi


trap "exit" INT


while true
do
    TEST=$(ps aux | grep ${SYNCTHING_BIN} | grep -v grep)
    if [ "${TEST}" != "" ]; then
        print "Info: Syncthing seems to run!"
        (
            set -x
            sleep 30
        )
    else
        print "start syncthing"
        (
            set -x
            nice -n 19 ionice -c3 su -l syncthing -c ${SYNCTHING_BIN}
            #~ nice -n 19 ionice -c3 su -l syncthing -c ${SYNCTHING_BIN} | logger -s -t syncthing 2>&1
        )
        print "syncthing has exit with exit status: $?"
        (
            set -x
            sleep 10
        )
    fi
done

und in der rc.local trage ich nur dieses Skript ein, bsp:

1
/home/syncthing/syncthing_loop.sh &

Wenn man die loop Lösung nutzt, kann man mit killall syncthing nur die laufenden Prozesse beenden. Das Skript ist davon allerdings nicht betroffen, sodas alles wieder gestartet wird.
Alles beenden geht mit sudo pkill -e syncthing

syncthing updaten

Der client hat eine eingebaute Update Funktion. Diese Funktioniert allerdings z.Z. nicht auf Windows und ARM Systemen.

Bsp:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
syncthing@foo:~$ sudo pkill -e syncthing
# Warten bis auch alle instanzen beendet sind

~$ sudo su -l syncthing -c "/home/syncthing/bin/syncthing -upgrade"
11:48:18 INFO: Attempting upgrade to v0.8.9...
11:48:18 INFO: Downloading syncthing-linux-386-v0.8.9.tar.gz...
11:48:22 OK: Upgraded "/home/syncthing/bin/syncthing" to v0.8.9.
11:48:22 OK: Previous version saved in "/home/syncthing/bin/syncthing.v0.8.7".

~$ sudo /home/syncthing/syncthing_loop.sh &