====== Unison ====== {{tag>unison ssh debian}} Petit article rapide pour decrire la mise en place de la synchronisation de repertoire entre deux debian, l'une Etch, l'autre Lenny, via ssh. Unison est un logiciel de synchronisation ; à la différence de rsync celui-ci réalise une synchronisation bidirectionnelle. ===== Les Installs ===== Etch et Lenny utilisent des versions de unison qui sont incompatibles (2.13.16 et 2.27.57). Il faut donc installer une version plus recente de unison sur Etch. Une solution est d'effectuer l'installation sur Etch via le apt-get install unison qui va bien, bien de remplacer le binaire dans /usr/bin par celui ci : {{ressources:articles:unison-2.27.57-binary-for-debian-etch.gz|}} faites un gunzip sur le fichier et vous recuperer un binaire compile en version 2.27.57 qui fonctionne sur x86. ===== Le SSH ===== Les deux machines doivent pouvoir se parler en SSH sans echanger de mot de passe. Sur l'une d'elle, on va donc generer une paire de cle SSH et l'on va positionner la partie publique sur le serveur distant. Sur **Lenny** : # pwd /root/.ssh # ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: blablablablablablablablablabla The key's randomart image is: +--[ RSA 2048]----+ | ooo| | . .=| | . ...| | o o + . | | U = . X | | o o | | . + | | W + v | | Ma= | +-----------------+ Verifier maintenant que la configuration du client SSH autorise l'utilisation de la cle dans le repertoire qui va bien : # cat /etc/ssh/ssh_config |grep -v "^#" Host * PasswordAuthentication yes IdentityFile ~/.ssh/id_rsa SendEnv LANG LC_* HashKnownHosts yes GSSAPIAuthentication yes GSSAPIDelegateCredentials no Maintenant, sur Etch, on va positionner la cle publique de Lenny dans la liste des cles autorisees : # cat /root/.ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyXXvWEkv2HQFlOxZ1IhM0758CU1pvDlYndOqznjn82EY2IxE1Juh00uv9y+wqBlRy8IKJVMFtDqQTsIe30tjuRgz9f6MjQsV8Nx8KsV+68va72TOg0e7cIIHQhF9Gw6VXhiqQ9pCzhtGqAS8CQ/5i/zcofuZ4WnSBqAaTE6Gsh30zvLou30QtuSW+8NwL2vO2RnMLcGT4DOskIeyVZXwCgmQZdEWzV/4Wwyh6qMB5Sw9Ql70LAYdPrCJjRVvxZAMcevUIAiWGco6DtmWx1zAc1JP5u/ZcwhyNyxSh58BeIDorfW/5rqFtf3yALN7495y5WcbZwyavVfoP+OQpSw3AbQ== root@lenny Et on verifie que le daemon ssh (serveur cette fois) controle bien ce fichier # cat /etc/ssh/sshd_config |grep -v "^#" PermitRootLogin yes PubkeyAuthentication yes Et hop, Lenny doit maintenant pouvoir se connecter a Etch sans avoir a taper de mot de passe. ===== La synchronisation ===== Maintenant, on peut rentrer dans le vif du sujet. Lenny va appeler unison en lui disant de fusionner deux repertoires. La commande a utiliser est la suivante : unison /data/www/folder ssh://root@etch.linuxwall.info:1234//home/www/folder unison etablit le SSH vers etch sur le port 1234 et regarde les contenus des repertoires. Si c'est la premiere fois que la synchro est effectuee, unison le remarque et pose des questions particuliere. Lors d'une synchro reguliere, il est possible de rajouter le flag "-silent" a la fin de la ligne de commande pour ne pas avoir de sortie de commande. Pratique dans un crontab. unison demande dans stdin dans quel sens les fichiers doivent etre synchro, la premiere fois. Pour connaitre les details des commandes, utilisez '?'. Unison conserve les permissions par defaut, mais comme les commandes sont lances par root, c'est ce dernier qui sera proprio des fichiers. Pour pallier a cela, je rajoute un check des permissions dans crontab pour les repertoires synchronises. On pourrait faire plus propre, mais cette solution est la plus simple. # cat /etc/crontab */5 * * * * root chown www-data /home/www/folder -R ; chmod o-rwx /home/www/folder -R ~~DISCUSSION~~