FLR personal CMS

Accueil du site > Technique > Cygwin et tunnelling > Cygwin : rsync configuration

Cygwin : rsync configuration

lundi 22 mars 2004, par François Le Ralle

Rsync est un outil Unix puissant pour synchroniser des arborescences de fichiers entre machines distantes. Utile pour éviter des copies complètes systématiques (par pscp de putty par exemple).

Principe de la connexion

Sur le PC serveur, rsync tourne en mode serveur sous cygwin. Il faut donc créer une configuration adéquate.

Sur le PC client, le rsync (dans un autre cygwin) se connecte sur un nom de host qui est équivalent à 127.0.0.1 (par biais du fichier hosts). C’est putty qui fournit un tunnel ssh sur le port 873 pour le rsync, et non cygwin. Tout se passe pour le client rsync comme s’il se connectait directement sans ssh.

Je n’utilise pas les mécanismes d’authentification propres à rsync, car la sécurité est déjà assurée par le ssh.

Pour résumer :
- coté client : cygwin fait tourner rsync en ligne de commande.
- Le tunnel ssh est fourni par putty (port 873 vers localhost)
- coté serveur : cygwin fait tourner rsync en mode serveur, et une configuration fichier pour les modules à synchroniser est nécessaire.

Vérification de la bonne installation de rsync

Cette manipe est valable aussi bien côté serveur que client.


$ rsync --help
rsync  version 2.6.0  protocol version 27
Copyright (C) 1996-2004 by Andrew Tridgell and others
<http://rsync.samba.org/>
Capabilities: 64-bit files, socketpairs, hard links, symlinks, batchfiles,
             no IPv6, 64-bit system inums, 64-bit internal inums
.........

Installation de rsync comme serveur

Ajouter la ligne suivante au fichier /etc/services :

rsync    873/tcp

Ajouter la ligne suivante dans /etc/inetd.conf (créer au besoin le fichier) :

stream tcp nowait root /usr/bin/rsync rsyncd --daemon

- Sous Unix Il faut ensuite placer un script de démarrage contenant la commande :


rsync --daemon

Ainsi rsync sera démarré automatiquement comme un serveur qui écoute sur le port 873.

- Sous cygwin La commande peut être lancée à la main dans une session interactive. Si on veut qu’elle reste lancée en permanence, il faut installer un service (NT, 2000, XP que ce soit Server ou Worsktation) par la commande suivante (le lecteur d’installation de cygwin est c dans l’exemple) :


cygrunsrv.exe -I "Rsync" -p /cygdrive/c/cygwin/bin/rsync.exe -a "--config=/cygdrive/c/cygwin/etc/rsyncd.conf --daemon --no-detach"

Ensuite lancer le service par :


net start rsync

Cette méthode a été trouvée sur la page Rsync for Windows de Gaztronics.

Documentation

La configuration est décrite sur Internet sur le site rsync.samba.org (le site officiel avec toute la documentation).

On peut obtenir de l’aide sur les options par :

rsync --help

Et bien sur le manuel en ligne est disponible par :

man rsync

Configuration détaillée

La configuration de rsync consiste a modifier plusieurs fichiers :

- /etc/rsyncd.conf (seul fichier à modifier dans notre cas)
- /etc/rsyncd.pid (créé par le process lui-même)
- /etc/rsyncd.secrets (non utilisé dans notre cas car pas d’authentification rsync)

Exemple de fichier /etc/rsyncd.conf

Ce fichier correspond à notre cas d’utilisation. Voir la doc en ligne pour d’autres besoins. Créer et éditer le fichier (vi) :


####### rsyncd.conf file ######
uid = UserName
pid file = /etc/rsync.pid
[test]
read only = false
path = /cygdrive/f/test/
comment =  File synchronization test
use chroot = true

Problèmes rencontrés :

Le service rsync ne démarre pas car le fichier rsyncd.conf n’est pas trouvé (d’après l’observateur d’événement Windows). Il faut vérifier puis modifier les droits dans le répertoire : /cygdrive/j/cygwin/etc (par : chmod 755 *).

"@ERROR : chroot failed" : le uid est nécessaire sinon le user utilisé est "nobody" par défault. Il n’a surement pas les droits pour écrire, et cela provoque cette erreur. Le UserName que j’utilise est le même que celui qui est utilisé sur la connexion ssh (ça peut aider ?). Cette erreur peut aussi se produire si les répertoires cibles n’existent pas, ou si le path d’un module contient un espace (je n’ai pas trouvé comment permettre un espace dans le path d’un module).

"ERROR : module is read only" : par défaut le paramètre de configuration "read only" est à true !

"@ERROR : chdir failed" : vérifier les droits en écriture sur le répertoire cygwin pour l’utilisateur par : ls -iul répertoire Cette erreur peut apparaître après passage du rsync serveur en mode service Windows (voir plus loin) alors que tout marchait bien avant. En effet par défaut le service se lance en tant que SYSTEM, et SYSTEM n’a pas forcément les droits (du point de vue de cygwin). Solutions : lancer le service sous le même utilisateur que le possesseur des répertoires à synchroniser, ou changer les droitssur ces répertoires pour autoriser l’écriture. Au pire ( !), faire chmod 777 -R path-of-the-directory-to-synchronise

Vérification de la connexion

Depuis le client, la commande suivante va lister les modules (répertoires) disponibles pour rsync sur la machine distante :

rsync machine.mon.nomdns.net::

Le module "test" doit être présenté. Noter le " ::" qui signifie que l’on se connecte directement par rsync (rsync ne voit pas le ssh de putty).

Lignes de commandes côté client

J’ai choisi de ne pas utiliser la conservation des user et group, ni d’archive ou de conservation de Device Name. En effet je ne fais pas une archive Unix mais une copie de PC à PC. Les seules options utilisées sont :

- r : récursivité
- t : conservation des "time stamp" des fichiers (nécessaire pour la synchro).
- v : mode verbose
- z : compression (pour économiser la bande passante).

La ligne de commande pour copier du client vers le serveur est :

rsync -rtvz /cygdrive/e/temp/ machine.mon.nomdns.net::test

La ligne de commande pour copier du serveur vers le client est :

rsync -rtvz machine.mon.nomdns.net::test /cygdrive/e/temp/

(Noter au passage la façon d’accéder aux lecteurs du PC depuis cygwin)

Et ensuite...

Vous pouvez ajouter d’autres "modules" une fois le bon fonctionnement validé.

Enfin, coté client, vous pouvez automatiser le lancement du script contenant les commandes rsync dans un ".bat" de lancement de cygwin. Voici un exemple :


@echo off

C:
chdir C:\Cygwin\\bin
bash --login -c "e:\MyBatchs\rsync-cygwin.sh"

Nota : le fichier rsync-cygwin.sh contient les lignes de commande rsync.


Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | SPIP | squelette