Llevo un tiempo usando Syncthing para sincronizar mi copia de trabajo con un servidor de desarrollo local, unos cuantos meses ya.
Al principio lo usaba iniciando sesión y ejecutándolo manualmente desde la línea de comandos. Funcionaba bien, así que no lo pensé dos veces cuando pasé a ejecutarlo como servicio. Arrancó, sincronizó algunos datos, todo iba bien.
Hasta que dejó de ir bien, ¡por supuesto! 🙂
Resulta que no me di cuenta de que en los logs estaban apareciendo un montón de errores que decían que el sistema de archivos del servidor de desarrollo era de solo lectura, y eso hacía que Syncthing no sincronizara nada.
Pensé que era un bug y que simplemente mostraba Out of Sync en las carpetas, pero que en realidad sí estaba sincronizando. Pues me equivocaba.
Después de depurar durante varias horas y de no encontrar ninguna pista en los foros con unas cuantas búsquedas en Google, llegué a un artículo sobre Syncthing en la ArchWiki, que mencionaba justo mi caso:
read-only file system error on /etc although run as root
Era exactamente mi caso de uso, salvo que la carpeta problemática no era /etc, sino /usr/local/src.
Bueno, después de leer lo que decía, resulta que si ejecutas Syncthing (o cualquier cosa) mediante systemd y tienes ProtectSystem configurado en full para el servicio, algunos directorios se vuelven de solo lectura por defecto. /usr es una de esas rutas.
Para solucionarlo, hay que añadir una nueva línea en la configuración del servicio y reiniciarlo (y hacer daemon-reload):
ReadWritePaths=/usr/local/src
Después de esto, Syncthing debería funcionar bien.