J'ai lu récemment un billet chez Máirín Duffy : Version-controlled, automagical backup and file sharing system with Sparkleshare and Fedora [1].
Mis de côté, j'ai pris le temps aujourd'hui de mettre en œuvre cette solution sur mon pc sous Fedora et mon hébergeur Alwaysdata.

NB : Ce billet n'est pas vraiment une traduction, mais le contenu est en très grande partie repris du blog de Máirín.

Ce dont vous avez besoin :

  • un PC sous Fedora, par exemple Fedora 15
  • SparkleShare : logiciel libre écrit en Mono [2] qui assurera le transfert de fichier sur votre serveur
  • un hébergement supportant Git, ça tombe bien, c'est le cas d'Alwaysdata
  • ssh, pour le transfert des fichiers sur le serveur

sparkleshare-logo.png

Installation de Sparkleshare

Comme indiqué dans le billet de Máirín, il existe un dépôt pour Fedora 13, 14 et 15 (ce n'est toutefois pas encore le dernier paquet).

Ouvrir un terminal avec les droits administrateur et configurer le dépôt :

$ su
# cd /etc/yum.repos.d
# curl -O http://repos.fedorapeople.org/repos/alexh/sparkleshare/fedora-sparkleshare.repo

Puis installer Sparkleshare et le paquet ssh-askpass

# yum install sparkleshare ssh-askpass

Accéder en ssh à votre compte Alwaysdata

Je vous laisse en compagnie de la documentation disponible sur le wiki d'Alwaysdata : Se connecter en SSH.

Il peut être utile voire indispensable de rajouter sa clé publique sur votre serveur distant. Consultez l'article Se connecter en SSH avec sa clé publique.

Vous pourrez ainsi vous connecter à votre serveur sans devoir saisir de mot de passe :

$ ssh votreuser@ssh.alwaysdata.com

Configuration du dépôt Git principal

Restons connecté à notre serveur distant. Nous allons créer notre dépôt git et se déplacer dans le répertoire (le répertoire git était déjà créé à la racine de mon répertoire) :

$ ls
admin  cgi-bin  git  www

Je vais nommer mon dépôt moncloud.

$ mkdir -p git/moncloud.git
$ cd git/moncloud.git

Initialiser le dépôt :

$ git --bare init

Ce qui nous renvoie le résultat de la commande :

Initialized empty Git repository in /nfs/http4/votreuser/git/moncloud.git/

Configuration du clone de votre dépôt git

Nous allons maintenant cloner notre dépôt, pour que les fichiers mis en ligne puisse être accessible depuis une URL de votre domaine.

$ cd ~/www
$ git clone ~/git/moncloud.git/

Si tout se passe bien, nous avons le retour suivant :

Initialized empty Git repository in /nfs/http4/votreuser/www/moncloud/.git/
warning: You appear to have cloned an empty repository.

Ci-après, je ne fait que suivre le test de Máirín pour vérifier que mon dépôt git fonctionne, avec diverses commandes :

$ cd moncloud/
$ echo 'Premier fichier' >> test.txt
$ git add test.txt; git commit test.txt -m 'Premier import'
[master (root-commit) 7d28ec2] Premier import
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 test.txt
$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 226 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /home/votreuser/git/moncloud.git/
 * [new branch]      master -> master

On peut à présent sortir de la session ssh :

$ exit
logout
Connection to ssh.alwaysdata.com closed.

Paramétrer votre système local avec votre serveur git distant

Si Sparkleshare fonctionne, fermez le programme, et se positionner dans le répertoire Sparkleshare qui a été créé dans votre home :

$ sparkleshare stop
Stopping SparkleShare... Done.
$cd ~/SparkleShare

Clonons le dépôt git distant.

$ git clone ssh://votreuser@ssh.alwaysdata.com/home/votreuser/git/moncloud.git
Cloning into moncloud...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), 226 bytes, done.

Avec Nautilus, dans le répertoire /home/utilisateur/SparkleShare/moncloud, vous devriez voir le fichier test.txt que nous avons créé tout à l'heure via ssh sur le serveur distant. Ou alors en ligne de commande :

$ cd ~/SparkleShare/moncloud; ls

Modifions donc ce fichier pour vérifier que les modifications seront répliquées sur le serveur distant :

$ echo 'Pandas rule.' >> test.txt; git commit -a -m 'panda PSA'; git push

 1 files changed, 1 insertions(+), 0 deletions(-)
Counting objects: 5, done.
Writing objects: 100% (3/3), 266 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://votreuser@ssh.alwaysdata.com/home/votreuser/git/moncloud.git
   7d28ec2..88a31fc  master -> master

Direction notre serveur distant cloné :

$ ssh votreuser@ssh.alwaysdata.com
$ cd ~/www/moncloud
$ git pull
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /home/votreuser/git/moncloud
   7d28ec2..88a31fc  master     -> origin/master
Updating 7d28ec2..88a31fc
Fast forward
 test.txt |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

Vous devriez voir en ligne votre fichier via son URL, par exemple http://votreuser.alwaysdata.net/moncloud/, avec son contenu modifié :

Premier fichier
Pandas rule.

Ou en ligne de commande à partir de votre terminal ssh :

$ cat test.txt
Premier fichier
Pandas rule.

Retour à Sparkleshare

Lancer Sparkleshare via son raccourci dans Activités/Applications de Gnome3 ou en ligne de commande :

sparkleshare start

La ligne de commande vous permettra de vérifier que la synchronisation s'effectue bien.

Si l'on regarde les dernières activités de Sparkleshare, on peut constater la création du fichier test et sa mise à jour :

Sparkleshare_evenements_moncloud.png

Si en local vous ajoutez à présent un fichier dans le répertoire /home/utilisateur/SparkleShare/moncloud, une image par exemple (roses.jpg) vous devriez le voir apparaître en ligne avec un rafraîchissement du dépôt git :

$ cd ~/www/moncloud/
$ git pull
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /home/votreuser/git/moncloud
   88a31fc..ccd7a99  master     -> origin/master
Updating 88a31fc..ccd7a99
Fast forward
 roses.jpg |  Bin 0 -> 176487 bytes
 1 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 roses.jpg

Automatiser la mise à jour du serveur distant

De fait, vous pourrez ainsi sauvegarder vos fichiers en local, et sous la surveillance de SparkleShare, les fichiers seront copiés sur votre serveur web et disponibles au travers de l'URL de votre site comme vu précédemment.

Accédez au répertoire hooks de votre dépôt git principal (pas le clone) :

$ cd ~/git/moncloud.git/hooks

En anglais, hook est un crochet/hameçon. Cela va nous permettre de d'automatiser la récupération des fichiers locaux sur le serveur distant. Créez un fichier nommé post-receive dans le répertoire ~/git/moncloud.git/hooks, et y copier/coller les lignes suivantes (adapter votre user) :

#!/bin/sh
while read oldrev newrev refname
do
true
done
cd /home/votreuser/www/moncloud
GIT_DIR=/home/votreuser/www/moncloud/.git git pull

Voilà, normalement c'est tout bon.
Copiez un nouveau fichier dans le répertoire local de Sparkleshare, une deuxième image bouquet.jpg par exemple.
Nous avons bien notre nouveau fichier en ligne sur le serveur distant :

$ ls
bouquet.jpg  roses.jpg  test.txt

Sparkleshare_Evenements_2.png

Y'a plus qu'à lancer Sparkleshare automatiquement à l'ouverture de la session Gnome si vous le souhaitez :

$ cp /usr/share/applications/sparkleshare.desktop ~/.config/autostart

Done !

Pour les plus courageux [3], ou si comme moi vous débutez, voici d'autres ressources que j'ai lu :

Notes

[1] j'adore ce mot automagical !

[2] pas de troll ici et rien à voir, mais ne trouvez-vous pas que la page d'accueil du projet ressemble à Windows Mobile 7 ^^'

[3] oui, il en faut ou être un peu trop git geek pour lire ce genre de billet !