Salve a tutti,
sto scrivendo uno scriptino bash per i computer della mia lan affinché, con la presenza di un piccolo serverino domestico targato Debian che sia di appoggio, venga emulata grosso modo la funzionalità offerta da Dropbox.
Non vi posto lo script, perché è ancora parziale e perché il quesito che pongo è solo concettuale. Vi dico però che ho deciso di ricorrere all'accoppiata rsync+ssh. Probabilmente potrei utilizzare il demone di rsync, ma se ho capito bene (soltanto in quest'occasione mi sono fatto una lettura approfondita del manuale, nonostante lo utilizzi da un bel po') il risultato è identico, cambiano solo gli agenti nel contesto.
Il mio dilemma nasce dal funzionamento di rsync. Che (se ho ben capito, correggetemi):
1) permette di sincronizzare indefinite sorgenti con una e una sola destinazione;
2) permette di sincronizzare le sorgenti con la destinazione (e non e, cioè è a senso unico, solo la destinazione può essere aggiornata).
Qui sta la questione. Ne consegue che quella che dovrebbe essere chiamata "sincronizzazione" è in realtà una fase "di lettura" più una fase "di scrittura" (per ora non puntualizzo sull'ordine tra le due). Cioè sincronizzo dal server (perché altri client potrebbero aver apportato cambiamenti) e sincronizzo verso il server (per apportare i miei cambiamenti).
Primo problema. Si suppone che per comodità sul server sia presente un'unica directory (es: /var/backup/) per accogliere tutti i file in questione.
Sincronizzando verso il server il problema non si pone: posso indicare tutti i file sorgente che desidero e come destinazione la sola /var/backup/.
Il problema si pone invece al contrario, cioè sincronizzando dal server: posta che la sorgente sarà /var/backup/, cosa imposto come destinazione, sapendo che ne posso impostare una e soltanto una?
Posso impostare solo un'unica cartella, appunto e appunto come mi pare avvenga con Dropbox (ammesso che tutti i file da sincronizzare non siano anche nel client in un'unica). Sì che posso creare dei link simbolici nell'unica cartella, ma altre soluzioni? Possibile non ce ne sia?
Secondo problema, il più grave. Prima la fase "di lettera" ("dal server") o prima la fase "di scrittura" ("verso il server")?
Il problema qui sta nell'opzione --delete, che cancella nella destinazione i file non più presenti nella/e sorgente/i e che è necessario per una vera sincronizzazione. Si traduce così:
1) se viene prima la fase "di lettura" -> i client sono tutti sincronizzati. Da un client cancello un file, ovviamente lo stesso dovrà accadere prima sul server, poi sugli altri client (è quello che mi aspetto). Ma se eseguo prima la fase "di lettura", andrò a riscaricare quel file, quindi nella "fase di scrittura" verrà confermato e quindi rimarrà intoccato;
2) se viene prima la fase "di scrittura" -> i client sono tutti sincronizzati. Da un client cancello un file, quindi questo verrà correttamente cancellato sul server perché avviene prima la fase "di scrittura".
Ma quando andrò a sincronizzare un secondo client, questo andrà a riscrivere il file (perché ancora presente), perché avviene prima la fase "di scrittura", e poi verrà confermato nella fase "di lettura" (certo, è stato ricreato sul server da un altro client!).
Suggerimenti? Indizi? Non ho capito niente io? Come si può organizzare un simile lavoro?
Grazie :-)