Bruno, notre professeur Systèmes et Réseaux, a demandé à chaque élève de préparer un PowerPoint sur Google Drive, Dropbox ou tout autre stockage « nuageux » de son choix.

Je n’étais pas très motivé, pour deux raisons : PowerPoint m’endort, et tous les « Drive » se ressemblent.

Alors j’ai détourné la commande.

Côté forme : point de PowerPoint mais du Prezi, un concurrent hongrois où tout tient sur une même page, extensible à l’infini. On s’y ballade à coups de zooms et de rotations. Avalez une Dramamine avant de regarder mon premier essai.

Côté fond, je cherchais un service qui permette aux membres d’un même LAN ou WAN de se synchroniser directement de poste à poste, sans passer par Internet. Ceci pour faciliter notre travail au lycée : travail de groupe oblige, nous faisons circuler quantité fichiers. Mais vu la connexion ADSL qui dessert tout l’établissement, si on passe par la case Internet, on risque d’attendre longtemps.

Je me suis donc intéressé à Syncthing : un service de synchronisation with a twist.

Caractéristiques

Trois différences d’avec un Drive classique.

  1. Syncthing est un projet open-source à héberger soi-même. L’installation est des plus simples (nous y reviendrons).

  2. Syncthing est un système de synchronisation distribué. Ici plus de serveur central et de clients périphériques ; chaque instance est à la fois cliente et serveuse (si, si, je tiens au féminin), dans un mode peer-to-peer.

  3. Syncthing est extrêmement souple et paramétrable. On peut partager une infinité de dossiers répartis n’importe où dans l’arborescence du système de fichiers, spécifier quels fichiers la synchro doit ignorer (à la manière d’un .gitignore), et paramétrer quelles machines doivent participer à telle ou telle synchro.

Attention, Syncthing n’est pas :

  • un service de sauvegarde – si vous effacez un fichier dans un dossier synchronisé d’une de vos machines, il disparaîtra également de toutes les autres. (Il est néanmoins possible de configurer des méthodes de préservation des fichiers, qui déplace les fichiers « périmés » vers un répertoire spécifique en vue d’une éventuelle récupération.)

  • une suite complète d’outils organisationnels (à commencer par un agenda et un carnet d’adresses) comme peuvent l’être OwnCloud ou NextCloud. Syncthing n’accomplit qu’une seule tâche – la synchro – mais il le fait bien.

Genèse

Utilisateur occasionnel du protocole BitTorrent (pour des téléchargements parfaitement légaux, il va de soi), j’avais eu l’occasion d’essayer leur solution BTSync, aujourd’hui renommée Resilio, dont Syncthing s’est largement inspiré. Inconvénient : c’est une solution propriétaire freemium, avec toutes les frustrations que cela implique.

Syncthing a été lancé en 2014 et en est aujourd’hui à sa version 0.14. Le projet est donc loin d’être abouti. Pas étonnant vu son ambition, non seulement de proposer un front-end, mais surtout de définir un protocole robuste pour la synchronisation peer-to-peer. La communauté est à dominante germanique et scandinave. Des clients sont disponibles pour un large éventail de systèmes d’exploitation : Linux, Mac, Windows et Android, notamment. Un absent de poids : iOS. Dommage, car la portabilité est au cœur du concept : plus on a de machines reliées entre elles, plus on monte en débit et en disponibilité.

Principes

Quatre grands avantages sautent immédiatement aux yeux, par rapport à un Drive classique.

  • La vitesse de votre synchro ne dépend pas de la qualité de votre connexion ADSL, puisque vous ne passez pas forcément par Internet : entre machines connectées au même LAN / WAN, la synchro ne transite que par votre routeur.
  • Le peer-to-peer est garant de la résilience du service. Une machine qui tombe en panne n'empêche pas les autres machines de continuer à se synchroniser.
  • Vous synchroniser autant de fichiers que vous le voulez, avec pour seule limite la taille de vos propres disques durs.
  • Vous restez maître de vos données, puisqu'elles ne résident pas sur le serveur d'un tiers.

Autre particularité, cette fois à double tranchant : vous pouvez partager n'importe quels dossiers (au pluriel) de votre arborescence. Pas besoin de les regrouper dans un seul dossier racine, comme par exemple avec Google Drive. Attention quand même : à force de multiplier les partages, vous risquez de perdre de vue avec qui vous partagez quoi, d'autant que rien ne distingue visuellement les dossiers partagés des autres (il faut consulter l'interface de Syncthing pour en obtenir la liste).

Voilà qu'un beau jour, vous effacez un fichier d'une machine en vous disant : « J'en ai une copie sur mon portable ». Seulement ce dossier était synchronisé, et la copie disparaît en même temps que l'original ! Mais si vous êtes prévoyant, vous avez sans doute pensé à activer le "versioning" de Syncthing. J'utilise son réglage basique : dans chaque partage, un sous-dossier caché conserve les 5 dernières versions des fichiers effacés ou modifiés, juste au cas où.

Notons enfin que la synchronisation n'est possible que si au moins deux machines sont actives en même temps. C'est potentiellement gênant dans ma situation : j'éteins mon laptop en quittant le travail, et en arrivant à la maison, j'allume ma tour. Pour faire le tampon, il faut une troisième machine, toujours active. Ce rôle revient à mon Virtual Private Server. Rassurez-vous, l'installation est simplissime.

Installation

Windows

Sous Windows, le plus simple est d’installer un front-end graphique qui incorpore le moteur de Syncthing, par exemple SyncTrayzor (je dois admettre que ces noms sont imbuvables). SyncTrayzor s’occupe de tout : installer Syncthing, le démarrer automatiquement en arrière-plan à l’ouverture de session si on le souhaite, afficher un résumé dans la zone de notifications…

Néanmoins, on pourra toujours interagir avec Syncthing via son interface par défaut : une application web accessible sur le port localhost:8384.

Ubuntu

Sous Ubuntu Server, on ajoute le dépôt officiel aux sources, puis on installe avec le gestionnaire de paquets habituels. Reste alors à « démoniser » le service, pour qu’il se relance automatiquement lorsque le serveur reboote. On peut attribuer le nouveau service soit à root, soit à un utilisateur ordinaire, suivant les permissions des dossiers où Syncthing aura à écrire. J’ai choisi la seconde option (root me rend parano).

$ curl -s https://syncthing.net/release-key.txt \| sudo apt-key add -
$ echo "deb http://apt.syncthing.net/ syncthing release" \| sudo tee /etc/apt/sources.list.d/syncthing.list
$ sudo apt-get update
$ sudo apt-get install syncthing
$ systemctl --user enable syncthing.service
$ systemctl --user start syncthing.service

Redémarrez votre serveur et vérifiez que le service Syncthing s'est bien relancé automatiquement, avec systemctl --user status syncthing.service.

Reste un problème : notre serveur étant dépourvu d’interface graphique, et donc de navigateur Internet, comment accéder à l’interface web du nouveau service ?

Première solution : paramétrer Syncthing pour qu’il accepte les connexions non seulement de localhost, mais aussi d’IP (au singulier ou au pluriel) à spécifier. Cela passe par l’édition de \~/.config/syncthing/config.xml : si l’on change \<address\>127.0.0.1:8384\</address\> en \<address\>0.0.0.0:8384\</address\>, on pourra se connecter à Syncthing de partout, quitte à ajouter une règle à son pare-feu avec les commandes suivantes :

sudo ufw allow syncthing
sudo ufw allow syncthing-gui

Cela dit, ce n’est pas tous les jours qu’on a besoin d’accéder aux paramètres de partage de Syncthing : la plupart du temps, on laisse le service ronronner tranquillement en tâche de fond. Alors, pour éviter d’ouvrir le serveur plus que de nécessaire sur l’extérieur, l’autre solution consiste, quand vraiment on a besoin de se connecter, à créer un tunnel SSH ad hoc avec redirection de ports.

Sur ma machine distante, j’exécute donc dans une invite de commande ou dans un PowerShell la commande suivante :

ssh -L 9090:127.0.0.1:8384 -i
[chemin-de-ma-cle-rsa-au-format-openssh][mon-username]@[ip-de-mon-serveur]

Et hop, j’accède au Syncthing de mon serveur depuis ma machine distante, à l’adresse localhost:9090.

Si vous avez installé Git pour Windows, vous avez déjà installé SSH sans le savoir. Chez moi, il se trouve dans C:\\Program Files\\Git\\usr\\bin. Allez voir là-bas si ssh.exe y est. Le cas échéant, rajoutez ce dossier à votre Path.

Article suivant Article précédent