Outils du site

pratique:informatique:syncthing

Syncthing

À la recherche d'une alternative à dropbox pour partager mes dossiers entre mes divers appareils, je teste Syncthing.

Notes prises au fur et à mesure, pour repartager si c'est utile.

Syncthing existe sur tous les OS, un bon point. Il est dans les dépôts d'Archlinux et Debian. Installer le paquet syncthing suffit pour tester, il y a un “gui” via une adresse web. Il y a aussi des versions graphiques, pas testé encore.

À noter qu'il existe en français, entre autre, pour l'interface.

L'installer sur un serveur permet de synchroniser entre les appareils sans avoir besoin de les allumer en même temps.

pour Archlinux :

yaourt -S syncthing

Pour Debian, ajouter le dépôt comme indiqué ici (faut ptet installer curl, aussi).

Une fois le paquet installé, il faut lancer syncthing pour qu'il créé le dossier.

syncthing

Une page web s'ouvre à l'adresse http://localhost:8384/ ou 8384 : c'est l'interface pour gérer le truc. On peut aussi modifier la configuration en modifiant le fichier /home/user/.config/syncthing/config.xml

Il faut sans doute lancer syncthing automatiquement au démarrage ?

En ajoutant un répertoire (où qu'il soit sur l'ordi), on va indiquer à Syncthing qu'on pourra potentiellement le partager.

Il faut aussi sélectionner les machines amies (Ajouter un périphérique). Il faut pour ça l'ID des machines qui vont se connecter ensemble. En haut, dans la configuration “montrer l'ID”. C'est pas court à partager… Lorsque l'ID de la machine A est ajouté sur la machine B, la machine A reçoit en retour automatiquement une demande pour synchroniser aussi, puis l'accord pour partager certains dossiers.

Synchronisation via un serveur

Avec l'option de base, pour synchroniser ses dossiers il faut avoir tous ses appareils allumés.

On peut aussi se simplifier tout ça en installant Syncthing sur un serveur (toujours allumé), nos divers appareils se synchronisant dessus.

Installer Syncthing sur le serveur (installer en root, mais lancer la première session en user !).

Modifier le fichier /home/user/.config/syncthing/config.xml : à la place

<gui enabled="true" tls="false">
        <address>127.0.0.1:8384</address>

Mettre :

<gui enabled="true" tls="false">
        <address>0.0.0.0:8080</address>

0.0.0.0 indique d'utiliser l'adresse ip. Pourquoi changer le port, je ne sais pas trop… On peut sans doute mettre ce qu'on veut ?

Taper l'adresse du serveur suivi de 8080 (http://153.81.158.610:8080/ par exemple). Aller dans la configuration, mettre un nom pour Utilisateur autorisé GUI et un mot de passe à Mot de passe d'authentification GUI. En cas d'oubli, il suffira de rééditer /home/user/.config/syncthing/config.xml et d'enlever les deux lignes sous <address>0.0.0.0:8080</address>, puis de remettre un mot de passe.

Ajouter les ID des divers appareils. Sur chaque appareil, ajouter uniquement l'ID du serveur. Synchroniser les dossiers nécessaire.

Derrière un proxy

Danx le cas de Xen avec une VM qui fait parefeu/proxy et une autre où est installé Syncthing, il faut mettre sur la VM proxy (avec l'ip 192.168.20.12 adaptée pour correspondre à la VM de syncthing):

ProxyRequests off
ProxyPreserveHost on

        ProxyPass /syncthing/ http://192.168.20.12:8384/
        <Location /syncthing/>
            ProxyPassReverse http://192.168.20.12:8384/
            Require all granted
        </Location>

Et sur la VM de syncthing :

ProxyRequests off
ProxyPreserveHost on

        ProxyPass /syncthing/ http://192.168.20.12:8384/
        <Location /syncthing/>
            ProxyPassReverse http://192.168.20.12:8384/
            Require all granted
        </Location>

Allumer au démarrage

Avec SystemD, taper les commandes suivantes devrait suffire ?

systemctl enable syncthing@user.service
systemctl start syncthing@user.service

Remplacer “user” par le nom de l'utilisateur qui lance le service !

Sur les anciens systèmes où le démarrage se fait toujours via init.d, copier ce fichier (en adaptant au début les variables) dans /etc/init.d/syncthing (source : https://forum.syncthing.net/t/keeping-syncthing-running-systemd-regular-etc-init-d/402

#!/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="nom_de_l'utilisateur"
DAEMON=/usr/bin/syncthing

startd() {
  for stuser in $syncthing_USERS; do
    HOMEDIR=$(getent passwd $stuser | awk -F: '{print $6}')
    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

Rendre le script executable :

chmod a+x /etc/init.d/syncthing

Pour lancer le service :

/etc/init.d/syncthing start
pratique/informatique/syncthing.txt · Dernière modification: 16/09/2018 11:41 par Lyz Lach'lan