Un clone Dropbox avec des logiciels libres 3/4

Portable windows XP

On installe Cygwin puis on choisit dans l’interface les paquets supplémentaires suivants : Openssh, Make, Ocaml, Python. Petit guide illustré (bien noter la modification du « Path » windows).

Installation d’Unison

Lancez le terminal Cygwin et allez dans un répertoire qui vous plaît ou créez en un.

#Ici on crée le répertoire unison-code
mkdir unison-code
#On rentre dedans
cd unison-code

Compilation comme sur Ubuntu :

#Comme sur Ubuntu on récupère les sources
svn checkout https://webdav.seas.upenn.edu/svn/unison
cd trunk
#on compile en mode "texte"
make UISTYLE=text
# on récupère nos fichiers pour les mettre au bon endroit
sudo cp src/unison /usr/local/bin/
sudo cp src/fsmonitor.py /usr/local/bin/

Installation du serveur OpenSSH

Ensuite il faut configurer le serveur SSH que vous avez installé sur le portable XP au début (le paquet Openssh). Lancez le terminal Cygwin puis lancez la commande :.

ssh-host-config -y

Le « -y » répond oui à toutes les questions par défaut, ce qui nous convient. Quand on vous demande ensuite « CYGWIN= » pour demande l’émulateur de terminal à utiliser, tapez ce qui suit :

Mintty ntsec

Ensuite il faut lancer le service (qui démarrera tout seul les fois suivantes)

cygrunsrv -S sshd

Bien penser à ouvrir le port 22 dans le parefeu Windows pour votre PC fixe uniquement (on n’est jamais trop prudent).

A faire sur le PC fixe sous Ubuntu :

Enfin il convient d’installer aussi un serveur Openssh pour pouvoir recevoir des connexions ssh (chiffrées donc).

sudo apt-get install openssh-server

On fait la même chose sur le parefeu pour ne permettre la connexion que de l’ordinateur portable sur votre réseau local. J’utilise GUFW (pour Graphical uncomplicated firewall) mais chacun ses goûts.

Vous devriez maintenant pouvoir vous connecter du portable ou du PC fixe. Exemple du PC portable :

ssh login_ubuntu@192.168.xx.xx

Il doit vous demander le mot de passe et ensuite vous laisser entrer. Idem en sens inverse du fixe vers le portable (Attention les logins Windows sont sensibles à la casse !).

Une fois que ça marche il faut sécuriser tout ça (et ne plus permettre de se connecter avec mot de passe). Voici donc un tutoriel très bien fait pour sécuriser un peu et ajouter les clefs SSH qui permettent de se connecter d’un PC à l’autre sans mot de passe. Lisez tout avant de faire vos modifications !

Et maintenant on teste le tout ! Mettez des fichiers dans le répertoire Image sur le PC et le fixe. Du Pc fixe tapez :

unison masynchro

« masynchro » est le nom du profil que nous avons défini dans l’étape précédente. Unison devrait vous proposer des actions à faire, tapez « f » (pour « follow ») pour suivre ses recommandations et appliquer les changements. Et voilà, vous devriez avoir deux répertoires identiques de part et d’autre.

On va enfin faire un script pour lancer tout ça en automatique sur le PC sous Ubuntu et surveiller le répertoire à chaque changement :

#!/bin/bash
#set -e  force exit code
#on redirige les erreurs et le smessages standard vers un fichier log.
exec 1>>/home/votrelogin/scripts/sync/sync.log 2>&1
#on met la date dna sle fichier log
echo "`date +%F" "%T` début script synchro";
# début d'une boucle : on pingue toutes les 60 secondes jusqu'à ce que ça marche.
while :; do
  if ping -c 1 192.168.0.12 > /dev/null;  then
    #si ça pingue, on lance le programme de suivi de log avec les règles contenues dans swatchrc_unison
    swatch --daemon -c /home/votrelogin/scripts/sync/swatchrc_unison -t /home/votrelogin/scripts/sync/sync.log;
    # un petit pop up sur le bureau + ligne dans les logs
      notify-send "Portable en ligne";
    echo "`date +%F" "%T` portable en ligne, début synchro initiale";
    #on lance l'unison qu'on a compilé avec l'argument -batch pour éviter
    #toutes questions qui interromprait le processus
 /usr/local/bin/unison -batch masynchro;
 notify-send "syncro active";
 echo "`date +%F" "%T` synchro initiale ok, début surveillance";
#ensuite on surveille le répertoire pour répercuter tout changements suivants en temps réel.
/usr/local/bin/unison -batch -repeat watch masynchro;
 break
 fi
sleep 60s
done
exit

Je couvrirai swatch (surveillance de log) et notify-send dans le prochain billet. Ne pas oublier de passer ce script comme étant executable (clic droit puis propriétés sur le fichier). Le plus simple est est lancer ce script à la connexion de votre session via le module standard « applications au démarrage ».

Idéalement il faut faire la même chose sur le PC Windows. Le logiciel gratuit qui s’approche le plus de cette fonctionnalité est « Directory monitor« , sans être parfait il permet d’avancer. Pour chaque changement il faut lancer la commande :

ssh login_ubuntu@192.168.xx.xx 'touch /home/votrelogin/Images'

La commande « touch » met à jour la date et l’heure du répertoire visé sur le poste Ubuntu, Unisson va détecter le changement, lancer la synchronisation et récupérer du coup les nouveaux fichiers du Portable Windows sans risque de conflit.

Il ne reste plus qu’à mettre en place un moyen de suivre simplement ce qui se passe, c’est ce qu’on verra dans le prochain billet !

Un clone Dropbox avec des logiciels libres 1/4

Je cherche à synchroniser des photos entre mon pc fixe sous Ubuntu 12.10 et le portable de ma femme sous windows XP dans les deux sens afin que les ajouts ou tags soient disponibles chez l’autre. Les machines n’étant pas toujours allumées en même temps la synchronisation en temps réel est très utile pour maximiser leur temps d’allumage commun et éviter d’avoir des conflits qui ne peuvent se résoudre que manuellement (même fichier modifié des deux côtés). Vu le volume des données (plusieurs Gigaoctets), utiliser une solution comme Dropbox n’est pas envisageable (et ce serait suicidaire au niveau du respect de la vie privée ainsi que de la sécurité). Je ne cherche pas non plus spécialement à garder des versions antérieures car j’utilise déjà Back In Time pour ça.

Après avoir fait le tour des solutions existante (très bien résumées sur le blog de François Boulogne) et avoir essayé sans succès lyncd + Unison (comme évoqué ici) mon choix se porte sur Unison, mais la toute dernière version alpha.

Avantage :

  • Gestion des changements en temps réels;
  • traitement des déplacements et renommages de répertoires intelligemment (ne retransfère pas les données);
  • utilise rsync pour les gros fichier (gage d’efficacité);
  • prudent lorsqu’il réplique des changements.

La fonctionnalité que je cherche n’existe que dans la toute dernière version d’Unison, j’utilise donc la version alpha du code (2.44.13 au moment d’écrire ces lignes). Si c’est la première fois que ça vous arrive, vous verrez que ce n’est pas sorcier !
Nous allons faire la même chose sur le portable mais dans Cygwin, un logiciel qui permet de faire tourner des programmes Linux sur Windows. C’est légèrement différent mais pas tant que ça.

Au final, il ne s’agit que d’une solution pour un an ou deux à mon avis, le temps que que Syncany ou Sparkleshare mûrissent et soient utilisables dans mon cas (tout comme j’utilisais un script utilisant Rdiff-backup avant Back In time). SyncApps est intéressant mais non libre…

Le concept général est le suivant : un script tourne sur le pc fixe (le « serveur ») qui surveille si le portable est en ligne et lance Unison si c’est le cas. Ce dernier initie la synchronisation dès qu’un changement survient dans le répertoire « photos » du fixe.
Sur le portable windows, un logiciel dédié effectue une surveillance analogue et lance une commande qui modifie à distance le répertoire « photos » sur le pc fixe en cas de changement. L’avantage de ne lancer la synchro du même pc à chaque fois évite des situations ou deux programmes essaient de synchroniser sans fins les changements faits par l’autre.

La démarche se résume aux actions suivantes :

  • Compiler Unison sur le pc fixe sous Ubuntu et le configurer
  • Compiler Unison sur le portable (après installation de Cygwin)
  • Mettre en place une authentification sans mots de passe entre les deux pcs via ssh
  • Installer et configurer Directory Monitor pour surveiller le répertoire sur le Pc portable
  • Mettre en place un script sur le fixe pour déclencher la synchro dès que le portable est en ligne et la surveillance en cas d’erreurs.
  • Mettre en place un script pour notifier lors des transferts réussis ou surtout, échoués.

Dans mon prochain billet nous commencerons par traiter le PC fixe.