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.