# Plusieurs /home synchronisés 2021-05-11T21:07:51Z J'utilise principalement 2 ordinateurs : * Un PC fixe installée dans mon mini bureau à la maison. Il me sert à travailler et préparer mes cours au calme avec un casque anti bruits. * Un PC portable que je trimballe au boulot et sur lequel je travaille aussi le soir à la maison pour éviter de déranger ceux qui dorment. J'ai besoin que le contenu de mes documents sur ces 2 ordinateurs soit identique. Pour cela, j'ai jusqu'à présent utilisé 2 solutions qui marchaient très bien : syncthing et l'implémentation de rsync "openrsync". À chaque fois, mon serveur sert d'intermédiaire pour stocker les fichiers. En effet, ces 2 machines sont rarement allumées en même temps. Toutefois, ils avaient chacun des défauts un peu gênants. * syncthing est un peu lourd. Il tourne toujours en arrière-plan. Je devais absolument penser à lancer la synchronisation avant d'éteindre mon ordinateur ou avant de commencer à travailler dessus pour être sûr d'être bien synchrone. * openrsync apporte l'avantage d'être installé de base sous OpenBSD. Je lançait la synchronisation avec une tâche cron au démarrage et via le script "/etc/rc.shutdown" à l'extinction. Il était toutefois un peu lent. Des soucis apparaissaient en cas de coupure de connexion au milieu d'un transfert. Le problème venait uniquement de mon script qui laissait un indice sur le serveur pour savoir quelle machine avait la dernière version des documents. => https://dataswamp.org/~solene/2021-05-04-synchronizing-files.html Solène a récemment publié un article sur les outils de synchronisation. C'est elle qui m'a rappelé l'existence d'unison. Après relecture de sa description, il semblait tout à fait approprié pour répondre à mes besoins. Son seul défaut était de ne pas être présent de base sous OpenBSD. Toutefois, les avantages sont nombreux : * Il repose sur des technologies peu récentes et donc éprouvées. On évoquera ssh et l'algorithme rsync. * Il assure l'intégrité des données, laissant le soin de choisir si il y a un doute concernnat le fichier à supprimer * Il est très rapide pour repérer les changements. VRAIMENT rapide, rien à voir avec les 2 outils précédents. * Définir une liste de dossiers ou fichiers à synchroniser est très simple et contrairement à d'autres peut se faire de 2 façons différentes : syncrhoniser tout sauf des exceptions, ou bien synchroniser au cas par cas. Je l'utilise pour synchroniser tous mes documents avec le profil suivant : ``` # Unison preferences root = /home/prx root = ssh://batman@ledzep/bckp/prx sshargs = -C # dirs path=docs path=bin path=work path=Maildir # dots path=.bookmarks path=.config path=.fceux path=.fonts path=.newsboat path=.templates path=.unison/prx_bckp.prf path=.xsession # ignores ignore=Name .*~ ignore=Name *.tmp ignore=Name *cache.db.lock ``` La liste est assez longue, et sera peut-être complétée petit à petit. Il y a des trucs pas vraiment utiles, car ils changent peu. Le tout pèse tout de même 44G. Afin de m'assurer de récupérer les derniers changements lorsque j'allume ma machine, j'édite mon crontab avec la commande "crontab -e" pour y ajouter : ``` @reboot /home/prx/bin/xunison >/dev/null 2>&1 ``` De même, lorsque j'éteins, je veux envoyer tous mes documents donc j'ai ajouté dans "/etc/rc.shutdown" ceci : ``` su prx /home/prx/bin/xunison ``` Cela lance le script "xunison" en tant qu'utilisateur "prx". On pourrait faire avec "doas" aussi. Le contenu du script "xunison" lance la synchronisation. Cependant, elle le fait dans une session tmux de façon à l'afficher dans un terminal. Ça me permet d'avoir un oeil sur ce qu'il se passe, et résoudre les conflits s'il en apparaît un jour (je retirerai l'option "-batch" dans ce cas) : ``` #!/bin/sh # display unison in a terminal s="xunison" export DISPLAY=:0 tmux has-session -t "$s" && exit MAX=10 i=0 /usr/X11R6/bin/xwininfo -root > /dev/null while [ $i -lt $MAX ]; do /usr/X11R6/bin/xwininfo -root > /dev/null && break sleep 1 i=$(($i+1)) done tmux new -s "$s" -d /usr/local/bin/unison -auto -batch prx_bckp /usr/X11R6/bin/xterm -e tmux attach-session -t "$s" ``` En quelques secondes, la synchronisatoin est réalisée. C'est peu intrusif et économe en ressources. Je vous invite à tester cet outil. Il y a même une version "no_x11" sous OpenBSD qui s'affranchit de l'interface graphique et pèse environ 6,3M. => https://syncthing.net/ syncthing => http://www.openrsync.org/ openrsync => https://www.cis.upenn.edu/~bcpierce/unison/ unison ## Une réaction? => mailto:bla@bla.si3t.ch?subject=unison Envoyez votre commentaire par mail. => /log/commentaires Mode d'emploi de la liste de diffusion pour recevoir les réponses.