J’utilise Syncthing depuis un moment pour synchroniser ma copie de travail avec un serveur de dev local, depuis quelques mois.
Au début, je l’utilisais en me connectant et en le lançant à la main via la CLI. Ça marchait bien, donc je n’ai pas réfléchi à deux fois quand je suis passé à un lancement en tant que service. Il a démarré, il a synchronisé des données, tout allait bien.
Jusqu’à ce que ça ne soit plus le cas, bien sûr ! 🙂
Il s’avère que je n’avais pas remarqué toute une série d’erreurs qui apparaissaient dans les logs, indiquant que le système de fichiers du serveur de dev était en lecture seule, ce qui empêchait Syncthing de synchroniser quoi que ce soit.
Je pensais que c’était un bug et qu’il affichait simplement Out of Sync pour les dossiers, mais qu’il synchronisait quand même. Eh bien, je me trompais.
Après avoir débogué pendant quelques heures sans trouver le moindre indice sur les forums à coups de recherches Google, je suis tombé sur un article sur Syncthing dans l’ArchWiki, qui décrivait exactement mon cas :
read-only file system error on /etc although run as root
C’était exactement mon cas d’usage, sauf que le dossier problématique n’était pas /etc, mais /usr/local/src.
Bref, après avoir lu ce que ça disait, il s’avère que si vous lancez Syncthing (ou n’importe quoi d’autre) via systemd et que ProtectSystem est réglé sur full pour le service, certains répertoires seront en lecture seule par défaut. /usr fait partie de ces chemins.
Pour corriger ça, il faut ajouter une nouvelle ligne dans la configuration du service et redémarrer le service (sans oublier daemon-reload) :
ReadWritePaths=/usr/local/src
Après ça, Syncthing devrait fonctionner correctement.