Unison

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 : 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~~

fr/ressources/articles/unison.txt · Last modified: 2011/03/16 01:41 (external edit)
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0