Sauvegarde en ligne automatique de fichiers avec Sparkleshare sous Fedora
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
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 :
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
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 :
- Configurer Gitweb (wiki d'Alwaysdata)
- Mettre en ligne un site chez Alwaysdata avec Git et Capistrano
- How to set up your own server
- Gérez vos codes source avec Git
- How to connect to the design team sparkleshare
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 !