Nei primi due articoli di questa serie ho descritto in generale cos’è Syncthing e come lo si può installare ed usare con le opzioni di default del programma.
Questo articolo, invece, è dedicato ad un uso un po’ più avanzato di Syncthing, che permetta di ottenere qualcosa di più dal programma, diminuendo allo stesso tempo il rischio di perdere i nostri preziosi file.
Aumentare la sicurezza
Di questo ho già scritto, ma è utile ripetersi: definiamo fin da subito un nome utente ed una password (sicura!) con cui autenticarci prima di accedere all’applicazione web di configurazione di Syncthing.
Per farlo dobbiamo cliccare sul tasto Settings
, selezionare il pannello GUI
e riempire i campi GUI Authentication User
e GUI Authentication Password
.
Già che ci siamo, attiviamo l’opzione Use HTTPS for GUI
per crittografare la comunicazione con il server web di Syncthing e, nel campo GUI Listen Address
, modifichiamo la porta utilizzata dal server web da 8384 a un altro numero a piacere (vanno bene tutti i numeri da 1024 a 65535 che non siano già usati da altri servizi).
C’è chi potrebbe chiedersi a che servano tutte queste precauzioni, visto che l’accesso al server web è comunque limitato alla rete locale. È vero, ma ormai sulla rete la sicurezza non è mai troppa, meglio prevenire che subire conseguenze sgradevoli a posteriori. E comunque questi piccoli accorgimenti in più non fanno male di certo.
In aggiunta, dopo aver attivato utente, password e https (e magari anche porta custom), e solo dopo aver fatto tutto questo, potremo pensare di utilizzare l’applicazione web di Syncthing da remoto, una cosa utile non solo per gestire Syncthing su un server o su un NAS, ma anche per farlo su un normale computer a cui non possiamo accedere fisicamente senza dover stabilire una intera sessione di controllo remoto, magari solo per aggiungere una nuova cartella di sincronizzazione.
In questo caso, dovremo anche cambiare l’indirizzo IP mostrato nel campo GUI Listen Address
da 127.0.0.1
(cioè localhost
, che significa che si può configurare Syncthing solo dallo stesso computer su cui è installato) all’indirizzo IP del nostro server, NAS o computer remoto.
Spostare la cartella di sincronizzazione di default
Questa frase l’ho letta qui pochi giorni fa, “Aggiungere una nuova cartella alla directory Home è un peccato capitale della programmazione sul Mac” e non potrei essere più d’accordo. Non a caso la mia Home
ospita pochissime cartelle oltre a quelle di default e mi dà molto fastidio quando qualche programma ne aggiunge una nuova senza chiedermelo.
Syncthing è uno di questi, infatti una delle prime cose che faccio dopo averlo installato su un nuovo Mac è modificare la posizione della cartella di sincronizzazione di default Sync
dalla Home
a ~/Documents
(~/Documenti
per chi usa macOS in italiano).
Purtroppo però, forse per una svista degli sviluppatori, l’applicazione web di Syncthing non permette di modificare il percorso della cartella Sync
già esistente, ma solo di rinominarla. La cosa più semplice da fare è cancellare questa cartella con il tasto Remove
, per poi crearne una nuova con il percorso corretto.
Syncthing mostrerà un messaggio di errore,
che scomparirà appena creata la nuova cartella di sincronizzazione di default nella posizione desiderata (per evitare confusioni, io cambio anche l’etichetta di questa cartella, da Default Folder
a Sync Folder
o semplicemente a Sync
).
Sincronizzare altre cartelle
Comunque, io uso la cartella Sync
solo per i file che voglio trasferire occasionalmente da un Mac all’altro; anzi al suo interno ho creato delle cartelle ad hoc, con i nomi dei computer su cui gira Syncthing, proprio per vedere a colpo d’occhio dove finisce ciascun file.
Per tutto il resto sfrutto la possibilità di scegliere a piacere le cartelle da sincronizzare, che non devono risiedere necessariamente dentro Sync
come succede con i servizi concorrenti. Per non complicarmi la vita, però, non cambio né il nome né tantomeno la posizione della cartella fra i computer interessati alla sincronizzazione, perché la flessibilità va bene ma è sempre meglio non esagerare.
Per farlo basta ripetere quanto già fatto per sincronizzare il Default Folder
, con l’unica differenza che questa volta dovremo inserire nel Folder Path
il percorso della cartella da sincronizzare.
Gestire i conflitti
Syncthing funziona bene, ma non sopporta che uno stesso file sia aperto contemporaneamente su due computer diversi, magari solo perché lo abbiamo lasciato aperto ma inutilizzato su un altro computer. Non è nemmeno colpa sua, perché con tanti formati di file (sì, sì, proprio quelli a cui state pensando!) non è affatto facile gestire le modifiche effettuate su uno dei due computer prima che queste si siano propagate all’altro dispositivo.
Infatti non sono mai riuscito a far andare in conflitto i file di nvALT
, perché sono così piccoli che qualunque modifica si propaga pressoché istantaneamente, rendendo molto improbabile che lo stesso file venga salvato nello stesso momento su due computer diversi.
Quando due file vanno in conflitto, per evitare perdite Syncthing aggiunge ad uno dei due l’estensione .sync-conflict-<più altra roba>
(i criteri in base al quale sceglie il file da rinominare sono spiegati qui).
Con i soliti documenti da ufficio creati con Word, Excel, PowerPoint o simili (e immagino anche con le immagini e i file multimediali in genere) non è un grosso problema, basta aprire i due file uno accanto all’altro e verificare ad occhio qual’è il più aggiornato, buttando via l’altro ed eventualmente rinominando quello con l’estensione .sync-conflict-...
.
Se invece i file in conflitto sono sorgenti di programmi, documenti laTeX o Markdown o comunque documenti di testo è ancora più facile, perché qualunque editor, o anche semplicemente il Terminale, permette di vedere chiaramente cosa è cambiato fra un file e l’altro e di decidere di conseguenza.
I file più problematici in cui mi sono imbattuto in tanti anni di uso di Syncthing sono i segnalibri di Firefox, che preferisco sincronizzare fra un computer e l’altro tramite Syncthing dopo una pessima esperienza con lo strumento di sincronizzazione integrato nel browser. Ogni volta che lascio Firefox aperto su due Mac diversi i file dei segnalibri vanno in conflitto, e dato che sono dei database sqlite
non è possibile capire con facilità cosa è cambiato e dove. In questo caso le date dei due file aiutano a risolvere il conflitto, e comunque perdere qualche segnalibro non è una tragedia.
Comunque quello dei conflitti è un problema di cui è bene essere consapevoli, soprattutto se si usa Syncthing per sincronizzare file con formati poco diffusi.
Conservare più versioni dei file
Un’opzione utile ma piuttosto trascurata di Syncthing (e non solo), è la possibilità di conservare più versioni dei file di una cartella sincronizzata.
È un sistema di controllo delle versioni dei file piuttosto rozzo (non è git
per intenderci), però è molto granulare, nel senso che si può decidere di attivare il controllo delle versioni solo per determinate cartelle e per certi computer della rete di sincronizzazione. Per ognuna di queste cartelle si può definire un tipo diverso di controllo delle versioni e conservare un numero differente di versioni dello stesso file.
Per attivare il sistema di controllo delle versioni si deve cliccare sulla cartella desiderata, premere il tasto Edit
e selezionare la scheda File Versioning
.
Da qui potremo decidere quale sistema di controllo delle versioni usare, dal più semplice che emula il cestino (Trash Can File Versioning
) ad uno più sofisticato che mantiene un numero di versioni via via decrescente con il passare del tempo (Staggered File Versioning
), un po’ come fa Time Machine. Si può anche usare un sistema di versioni esterno a Syncthing, ma francamente mi sembra eccessivo.
Nella stessa scheda possiamo decidere dopo quanto tempo cancellare i file più vecchi e persino cambiare il percorso della cartella dove vengono conservate le varie versioni dei file (ma perché?). Normalmente le varie versioni dei file vengono salvate nella cartella nascosta .stversions
posta all’interno della cartella sincronizzata, una scelta sensata ma che pone un problema se vogliamo recuperare una vecchia versione di un file sincronizzato, perché il Finder
non ce la fa vedere e lo stesso succede con i gestori dei file di Windows e di Linux.
Dal Finder, la cosa più semplice da fare è cliccare sulla voce di menu Vai -> Vai alla Cartella...
e scrivere a mano il percorso della cartella sincronizzata (per fortuna il Finder ci aiuta via via che scriviamo il percorso), seguito da /.stversions
. Procedure analoghe si possono usare su Windows e Linux. Altrimenti possiamo usare il Terminale e spostarci nella cartella desiderata con il solito comando cd
. In ogni caso, questo è un aspetto di Syncthing a cui gli sviluppatori dovrebbero porre più attenzione.
Ma non c’è Time Machine? Sì certo ma Time Machine salva solo le versioni dei file locali, mentre Syncthing conserva le versioni dei file modificate sugli altri dispositivi sincronizzati, per cui ci possono essere casi in cui può essere utile.
Definire la struttura della rete
Usare Syncthing per sincronizzare i dati di due o tre computer è facile, ma se il numero dei dispositivi cresce diventa importante definire una strategia efficiente e sicura per collegare i vari dispositivi uno all’altro.
Dopo aver collegato i primi due dispositivi tramite Syncthing, la strategia più immediata per aggiungerne un terzo è quella di sincronizzarlo solo con uno dei due. Allo stesso modo, il quarto viene sincronizzato con il terzo e così via, creando una struttura lineare dove ciascun computer è connesso solo ad altri due dispositivi della rete.
Il problema nasce quando uno dei computer viene spento o smette di funzionare, perché a quel punto i dispositivi a monte dell’interruzione non riescono più a sincronizzarsi con quelli a valle.
Per ovviare si può chiudere l’anello, consentendo di mantenere comunque la sincronizzazione fra tutti i dispositivi rimanenti ma complicando l’inserimento di un nuovo computer in una rete già attiva
Meglio, a questo punto, definire una struttura a server, dove ciascun dispositivo è collegato solo ed esclusivamente ad un unico dispositivo che agisce da server, minimizzando così il numero di collegamenti reciproci fra i vari dispositivi della rete, ma rendendo tutto dipendente dalla buona salute del server.
Non c’è bisogno di dire che il metodo di collegamento di gran lunga più affidabile e resiliente è quello a maglia (mesh), dove ogni computer è collegato a tutti gli altri dispositivi della rete. Una struttura di questo tipo continua a funzionare tranquillamente se uno o più dispositivi smettono di funzionare, ma il numero di collegamenti reciproci da stabilire cresce rapidamente all’aumentare di dispositivi coinvolti.
Un buon compromesso, in particolare quando abbiamo parecchi computer sincronizzati fra loro, è quello di collegare ciascun computer solo a due, tre, quattro altri dispostivi della rete in modo semi-casuale, un po’ come accade per la rete internet. L’ennesima dimostrazione che spesso la causalità è meglio del determinismo.
Non toccate quella cartella!
Se provate ad andare in una delle cartelle sincronizzate da Syncthing con il Terminale, troverete una directory nascosta .stfolder
che è sempre vuota e che apparentemente non serve a niente. Non è così, la presenza di questa directory segnala a Syncthing che la cartella in questione è disponibile per la sincronizzazione, per cui lasciatela stare. Se l’avete cancellata per errore, basta ricrearla a mano dal Terminale (mkdir .stfolder
) e tutto torna a posto.
Conclusioni
Con questo articolo potrebbe concludersi il nostro lungo viaggio alla scoperta di Syncthing, uno strumento di sincronizzazione dei nostri dati fra computer diversi poco conosciuto ma molto efficiente, che lascia i nostri preziosi file sempre e solo sotto il nostro controllo.
Ma manca ancora un particolare, e cioè come usare Syncthing su iOS, che è poi la ragione principale per la quale, pur usando Syncthing da anni, non ne ho mai parlato prima. Ma lo spazio per oggi è finito 😂, e quindi questo sarà l’argomento dell’ultimo articolo (lo prometto!) di questa serie.