Lors de l'acquisition de mon portable il y a quelques années, tout de suite s'est fait ressentir le besoin de synchroniser les données entre le portable et mon LAN, et ce que ce soit du texte ou du binaire. CVS n'étant pas très adapté au binaire, je me suis tourné vers rsync. Mais seul, rsync n'était pas suffisant : il a fallu mettre en oeuvre toute l'infrastructure permettant la synchronisation rapide et automatique des données.
La solution retenue est celle du montage de répertoires NFS (et en
particulier le home du LAN) et une synchronisation de fichiers
et répertoires spécifiés dans un fichier de configuration par
utilisateur.
Ainsi chaque utilisateur possède un fichier dans lequel se trouve
la liste des fichiers et répertoires à synchroniser. Évidemment il
a aussi un répertoire personnel monté par NFS ainsi qu'un répertoire
local sur le portable.
Il est à noter que les outils de synchro ne sont nécessaire que sur
le portable.
La synchronisation se fait de façons différentes, le principal étant
le script de synchronisation lui-même. Celui-ci peut être appelé depuis
la ligne de commande, soit par un utilisateur, soit par root afin de
faire la synchro de tous les utilisateurs automatiquement.
Elle peut se faire à n'importe quel moment tant que les 2 éléments à
synchroniser sont accessibles en même temps : à l'insertion de la
carte PCMCIA (via la config PCMCIA), à la connexion au réseau, au
login, etc...
Personnellement j'utilise la détection PCMCIA en conjonction avec DHCP
afin de permettre une configuration dépendante du réseau sur lequel
le portable se trouve (il ne sert à rien de tenter de synchroniser
avec le /home du LAN si on ne se trouve pas sur ce LAN, ou il peut être
utile de ne pas synchroniser de la même façon des éléments sur 2 LANs
différents.
Le script permettant la synchronisation est utilisable dans tous les cas. Son principal défaut est qu'il synchronise les fichiers et répertoires sans destruction. Ce qui signifie que les suppressions de fichiers ne seront pas effectuées et les fichiers effacés seront remis à moins d'être effacés des 2 côtés (LAN et portable).
La synchronisation s'effectue par la commande rsync -Caqu sur
chacun des éléments (fichier ou répertoire) du fichier de config :
rsync -Caqu /home/$USER/fich-ou-rep $HOMENFSMNT/$USER/fich-ou-rep
rsync -Caqu $HOMENFSMNT/$USER/fich-ou-rep /home/$USER/fich-ou-rep
Le script est disponible ici.
Les options de ce script sont les suivantes :
Le script de synchronisation peut s'utiliser dans les scripts de boot
par root. Suivant la distribution, on peut y faire appel à partir du
moment où le répertoire home-NFS est monté, par exemple en rajoutant
un script style System V (pour les distro style Debian, RedHat, Mandrake)
ou quelques lignes dans un des scripts existants (toutes distros
confondues). Ces lignes (qui sont les mêmes pour le script) sont les
suivantes :
for LOCAL_USER in `ls /home --ignore=lost+found`; do /usr/local/bin/filesync -u $LOCAL_USER done
Le réseau n'étant pas forcément en marche au moment du boot, il peut
être utile d'utiliser ces lignes dans la configuration PCMCIA si on
utilise une telle carte réseau.
Sur une Debian, la configuration PCMCIA se trouve dans /etc/pcmcia/ et
le fichier concerné (/etc/pcmcia/network.opts) permet de
configurer 2 fonctions pré-inscriptes. Les fonctions initialement codées
de la façons suivante :
start_fn () { return; } stop_fn () { return; }peuvent être modifiées de la façon suivante :
start_fn () { /path/to/detect start; return; } stop_fn () { /path/to/detect stop; return; }en remplaçant /path/to/ par le chemin complet de l'accès au script contenant les 3 lignes indiquées plus haut insérées à la suite des montages NFS.
Personnellement j'ai même rajouté 2 fonctions (resume_fn et suspend_fn) afin de pouvoir utiliser les modes suspend et resume du PCMCIA, mais peu de rapport avec la synchro...
Pour les portables ayant une interface ethernet intégrée, alors la configuration de l'interface et de la connexion doit se faire soit automatiquement au boot ce qui revient au premier paragraphe, soit à la demande. Dans ce cas, il suffit de modifier le script de connexion qui effectue la configuration (que ce soit manuellement ou par DHCP, les montages NFS, etc.) afin de lui adjoindre les 3 lignes de synchro.
DHCP n'a pas grand chose à voir avec la synchro. Si j'en parle ici c'est
que c'est un moyen très pratique de pouvoir gérer la synchronisation en
fonction du réseau sur lequel on se branche en se basant sur le nom de
domaine et en laissant la configuration de la carte réseau non pas à
PCMCIA, mais au client DHCP.
Dans mon cas, ça revient à faire appel à /etc/dhcpc/detect qui
contient les lignes nécessaires à la différenciation des réseaux (pour
l'instant il n'y en a qu'un seul).
Le script de détection complet est ici.
Ce script est adapté pour prendre en compte les modes suspend et resume du PCMCIA dont j'ai parlé plus haut.
Il est enfin possible de faire une synchro spécifique par utilisateur en insérant la commande filesync dans les scripts de login ou de logout du shell utilisé ou encore dans le script .xsession ou .xinitrc pour le mode graphique.
La mise en oeuvre de ce système est très simple et ne se base que sur
des outils standards des unix actuels (rsync, grep, awk, etc.). Elle est
de plus assez efficace lorsqu'il s'agit de modifications simples
(modifications non-destructives de fichiers et création de fichiers).
Les fichiers de configuration des éléments à maintenir synchronisés (dont
voici un exemple) sont de simples fichiers textes
dans lesquels les lignes vides et celles commençant par # ne sont pas
prises en compte. ATTENTION : les répertoires doivent
impérativement avoir un / à la fin.