Já faz alguns meses que uso o Syncthing para sincronizar minha cópia de trabalho com um servidor de desenvolvimento local.
No começo, eu o usava logando e rodando manualmente pela CLI. Estava funcionando bem, então nem pensei duas vezes quando passei a rodá-lo como serviço. Ele iniciou, sincronizou alguns dados, tudo certo.
Até que não estava, claro! 🙂
Acontece que eu não percebi um monte de erros aparecendo nos logs dizendo que o sistema de arquivos no servidor de desenvolvimento era somente leitura, e isso estava fazendo o Syncthing não sincronizar nada.
Achei que fosse um bug e que ele só estava mostrando Out of Sync para as pastas, mas que na verdade estava sincronizando. Pois é, eu estava errado.
Depois de algumas horas depurando e sem encontrar nenhuma pista nos fóruns em algumas buscas no Google, cheguei a um artigo sobre o Syncthing na ArchWiki, que mencionava exatamente o meu caso:
read-only file system error on /etc although run as root
Era exatamente o meu caso de uso, exceto que a pasta problemática não era /etc, e sim /usr/local/src.
Bem, depois de ler o que dizia, descobri que, se você roda o Syncthing (ou qualquer coisa) via systemd e tem ProtectSystem configurado como full para o serviço, alguns diretórios ficam somente leitura por padrão. /usr é um desses caminhos.
Para resolver, você precisa adicionar uma nova linha na configuração do serviço e reiniciar o serviço (e rodar daemon-reload):
ReadWritePaths=/usr/local/src
Depois disso, o Syncthing deve funcionar normalmente.