Depuis un moment, je réfléchis à un système de sauvegarde pour mes fichiers. Je n'ai pas envie d'utiliser un service de "cloud" en ligne sur lequel je n'ai pas de prise et j'ai bien deux VPS chez OVH mais avec seulement 10 Gb d'espace de stockage, je ne vais pas aller bien loin... Une autre solution consiste à placer des disques chez différentes personnes et les synchroniser. À partir de trois disques, ça devient solide.

J'ai plusieurs Raspberry Pi chez moi, j'ai donc décidé de tester en local avant d'imaginer en placer ailleurs. Il faudra aussi trouver le bon moyen pour chiffrer les documents envoyés pour plus de sécurité mais sans que ça soit trop compliqué à utiliser. (Si ça prend 1h à chaque fois pour rajouter un fichier dans le système, je ne vais pas l'utiliser...)

Après plusieurs recherches, mon choix s'est tourné vers Syncthing. Ce programme est libre, il fonctionne sur les systèmes GNU/Linux, Android, Mac et même Windows. Je décrit ici les différentes étapes pour l'installer sur un Raspberry Pi mais l'installation sera similaire sur un autre Linux. Pour Android, on l'installera à partir de F-Droid.

Syncthing étant un programme libre, on peut le télécharger en toute légalité. Il est hébergé sur Github. Toutes les versions sont accessibles sur la page github.com/syncthing.

On télécharge la dernière release pour ARM de Syncthing, la v0.10.30 :

pi@raspberrypi ~ $ wget https://github.com/syncthing/syncthing/releases/download/v0.10.30/syncthing-linux-arm-v0.10.30.tar.gz

Note:

Sur une Debian 8 en 64 bits, par exemple, on changera de version et on prendra celle pour l'amd64 :

user@debian:~$ wget https://github.com/syncthing/syncthing/releases/download/v0.10.30/syncthing-linux-amd64-v0.10.30.tar.gz

Ensuite, on décompresse l'archive fraichement téléchargée dans le dossier syncthing et on supprime l'archive :

pi@raspberrypi ~ $ tar xvzf syncthing-linux-arm-v0.10.30.tar.gz
syncthing-linux-arm-v0.10.30/README.txt
syncthing-linux-arm-v0.10.30/LICENSE.txt
syncthing-linux-arm-v0.10.30/AUTHORS.txt
syncthing-linux-arm-v0.10.30/syncthing
syncthing-linux-arm-v0.10.30/syncthing.md5
syncthing-linux-arm-v0.10.30/etc/README.md
syncthing-linux-arm-v0.10.30/etc/linux-runit/README.md
syncthing-linux-arm-v0.10.30/etc/linux-runit/log/run
syncthing-linux-arm-v0.10.30/etc/linux-runit/run
syncthing-linux-arm-v0.10.30/etc/linux-systemd/README.md
syncthing-linux-arm-v0.10.30/etc/linux-systemd/system/syncthing@.service
syncthing-linux-arm-v0.10.30/etc/linux-systemd/user/syncthing.service
syncthing-linux-arm-v0.10.30/etc/macosx-launchd/README.md
syncthing-linux-arm-v0.10.30/etc/macosx-launchd/syncthing.plist
syncthing-linux-arm-v0.10.30/etc/solaris-smf/README.md
syncthing-linux-arm-v0.10.30/etc/solaris-smf/syncthing.xml
syncthing-linux-arm-v0.10.30/etc/windows/ReadMe.txt
syncthing-linux-arm-v0.10.30/etc/windows/SyncThingSetup.nsi
syncthing-linux-arm-v0.10.30/etc/windows/syncthingservice.xml
syncthing-linux-arm-v0.10.30/FAQ.pdf
syncthing-linux-arm-v0.10.30/Getting-Started.pdf

pi@raspberrypi ~ $ mv syncthing-linux-arm-v0.10.30/ syncthing/

pi@raspberrypi ~ $ rm syncthing-linux-arm-v0.10.30.tar.gz

On va dans le dossier et on démarre syncthing :

pi@raspberrypi ~ $ cd syncthing/
pi@raspberrypi ~ $ ./syncthing
[monitor] 16:04:53 INFO: Starting syncthing
16:04:53 INFO: Generating RSA key and certificate for syncthing...
[H2P4J] 16:06:39 INFO: syncthing v0.10.30 (go1.4.2 linux-arm default) unknown-user@syncthing-builder 2015-03-29 07:46:44 UTC
[H2P4J] 16:06:39 INFO: My ID: H2P4J43-xxxxxxx-xxxxxxx-xxxxxxx-xxxxxxx-xxxxxxx-xxxxxxx-xxxxxxx
[H2P4J] 16:06:39 INFO: No config file; starting with empty defaults
[H2P4J] 16:06:39 INFO: Edit /home/pi/.config/syncthing/config.xml to taste or use the GUI
[H2P4J] 16:06:39 INFO: Starting web GUI on http://127.0.0.1:8080/
[H2P4J] 16:06:39 INFO: Loading HTTPS certificate: open /home/pi/.config/syncthing/https-cert.pem: no such file or directory
[H2P4J] 16:06:39 INFO: Creating new HTTPS certificate
[H2P4J] 16:06:39 INFO: Generating RSA key and certificate for raspberrypi...
[H2P4J] 16:07:43 INFO: Starting UPnP discovery...
[H2P4J] 16:07:49 INFO: UPnP discovery complete (found 0 devices).
[H2P4J] 16:07:49 INFO: Starting local discovery announcements
[H2P4J] 16:07:49 INFO: Local discovery over IPv6 unavailable
[H2P4J] 16:07:49 INFO: Starting global discovery announcements
[H2P4J] 16:07:49 OK: Ready to synchronize default (read-write)
[H2P4J] 16:07:49 INFO: Device H2P4J43-xxxxxxx-xxxxxxx-xxxxxxx-xxxxxxx-xxxxxxx-xxxxxxx-xxxxxxx is "raspberrypi" at [dynamic]
[H2P4J] 16:07:49 INFO: Completed initial scan (rw) of folder default

Note:

Ça prend un peu de temps parce que les clés sont générées.

L'interface web est accesible depuis le Raspberry Pi. ( localhost:8080 ) mais il est évidemment intéressant de pouvoir y accéder depuis un autre ordinateur afin de laisser le Raspberry Pi dans un coin.

pi@raspberrypi ~ $ nano /home/pi/.config/syncthing/config.xml 

Il faut changer la ligne "address" et mettre "0.0.0.0:8080" :

<gui enabled="true" tls="false">
  <!-- config par défaut -->
  <!-- <address>127.0.0.1:8080</address> -->
  <!-- nouvelle configuration -->
  <address>0.0.0.0:8080</address>
  <apikey>A5RG4UMX-xx-xxxxxxxxxxxxxxxxxxxx</apikey>
</gui>

On va ensuite configurer Syncthing pour qu'il se lance automatiquement au démarrage. La première étape est de faire créer un fichier d'initialisation :

pi@raspberrypi ~ $ sudo vim /etc/init.d/syncthing
#!/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

#Sur Debian, j'ai eu une erreur "start-stop-daemon not found", j'ai rajouté la ligne suivante : 
# PATH=/sbin:/bin:/usr/sbin:/usr/bin #A decommenter si vous avez l'erreur

# Replace with users you want to run syncthing clients for
syncthing_USERS="pi"  #Remplacer par l'utilisateur qui lance syncthing
DAEMON=/home/pi/syncthing/syncthing   #Remplacer cette ligne par le bon chemin vers syncthing

startd() {
  for stuser in $syncthing_USERS; do
    HOMEDIR=$(getent passwd $stuser | awk -F: '{print $6}')
    if [ -f $config ]; then
      echo "Starting syncthing 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

Ensuite, on rend le script exécutable et on met à jour la séquence de démarrage.

pi@raspberrypi ~ $ sudo chmod +x /etc/init.d/syncthing 
pi@raspberrypi ~ $ sudo update-rc.d syncthing defaults 
update-rc.d: using dependency based boot sequencing

Pour voir le status du daemon et/ou le démarrer, nous pouvons utiliser les commandes suivantes :

pi@raspberrypi ~ $ /etc/init.d/syncthing status
syncthing for USER pi: not running.
pi@raspberrypi ~ $ /etc/init.d/syncthing start
Starting syncthing for pi
pi@raspberrypi ~ $ /etc/init.d/syncthing status
syncthing for USER pi: running (pid 15060
15068)

Sur Debian, j'ai eu cette erreur:

simon@debian8:~$ /etc/init.d/syncthing stop
Stopping syncthing for simon
/etc/init.d/syncthing: 35: /etc/init.d/syncthing: start-stop-daemon: not found

Pour résoudre ce problème, vous pouvez décommenter la ligne 15 du script ci-dessus.

Une fois l'installation terminée, on peut accéder à l'interface web depuis le Raspberry Pi ( avec localhost:8080 ) ou bien depuis une autre machine du réseau ( http://ip-du-raspberry-pi:8080/ ). Plus qu'à suivre la même méthode pour l'installer sur votre·vos autre·s machine·s et configurer quels dossiers synchroniser.

Nous aborderons la configuration dans un prochain article.

Sources :

https://syncthing.net/

http://techdelirium.blogspot.be/2015/02/how-to-install-syncthing-on-your.html

~~~