EDIT 24/02/2015 : ‘Il n’est plus nécessaire d’utiliser cloudfiles comme backend pour duplicity. À la place, il faut utiliser un backend spécial hubic intégré à duplicity récemment » voir le commentaire de blankoworld
EDIT 02/2015 : suppression du « DeprecationWarning » dans le log.
EDIT 17/02/2014 : suite à des changements sur Hubic.com, Gu1 à mis à jour python-cloudfiles-hubic. J’ai donc mis à jour mon script en conséquence
Mon ADSL est depuis peut chez OVH. De ce fait je bénéficie d’un compte hubiC avec un espace de stockage d’1To. Quelle aubaine pour des sauvegardes ! Mais bon donner mes mails, mes sites, mes documents administratifs à un tiers… bof bof. Il faudrait un minimum de chiffrage !
Et bien comme disait les autres nuls : « Hassan Cehef c’est possible » avec duplicity et python-cloudfiles-hubic !
python-cloudfiles-hubic est nécessaire car duplicity n’intègre pas nativement le service cloud « HubiC » pour une sombre histoire de protocole d’authentification non standard de la part d’OVH (détail par l’auteur)
Installation
On commence par le plus simple (duplicity) :
aptitude install duplicity
Maintenant python-cloudfiles-hubic :
aptitude install python-setuptools git cd /usr/src git clone https://github.com/Gu1/python-cloudfiles-hubic.git cd python-cloudfiles-hubic python setup.py install
Utilisation
Dans vos paramètre sur hubic.com dans votre menu « Vos application » il va falloir ajouter une application :
- Nom : cequevousvoulez
- Domaine de redirection : http://localhost/
Quand l’application est créer récupérer le « client id » ainsi que le « client secret » dans l’interface
Quelques petits tests pour la prise en main :
# Désactiver le bash_history (c'est pénible avec les mots de passes) unset HISTFILE # Les variables export CLOUDFILES_USERNAME=toto@toujours.lui export CLOUDFILES_APIKEY=je.vais.pas.vous.donner.le.mot.de.passe.de.toto # CLOUDFILES_AUTHURL="hubic|client id|client secret|http://localhost/" export CLOUDFILES_AUTHURL="hubic|api_hubic_XXXX|YYYYY|http://localhost/" # Sauvegarde duplicity /root cf+http://default # Observer l'état duplicity collection-status cf+http://default # Liste les fichiers distants duplicity list-current-files cf+http://default # Test la restauration d'un fichier duplicity --file-to-restore .bash_alias cf+http://default /tmp/bash_alias_recup
Rendez-vous ensuite dans votre interface hubiC. Et là normalement il y a plein de fichier duplicity-BLABLA-blabla.bla ! On supprime tout ! (c’était juste pour les tests)
Il ne semble pas possible d’écrire dans un sous répertoire. Mais, comme je l’ai signalé dans mon commentaire, il semble possible d’écrire dans un autre « container » sur hubiC (autre que default). Il ne sera visible qu’après modification de l’URL. Exemple si vous avez écrit dans le conteneur backup rendez vous sur l’URL : https://hubic.com/home/browser/#backup
Le script
Voici mon script :
#!/bin/bash ################################### ## Backup sur HubiC avec duplicity # Script sous licence BEERWARE # Version 0.4.1 02/2015 ################################### set -eu ##### Paramètres # Utilisateur Hubic HUBICUSER="leuserdevotrehubic" # Mot de passe HubiC HUBICPASSWORD="lemotdepassedevotrehubic" # Application client id Hubic HUBICAPPID="api_hubic_XXXXX" # Application client secret Hubic HUBICAPPSECRET="YYYYYY" # Application domaine de redirection Hubic HUBICAPPURLREDIRECT="http://localhost/" # Liste à sauvegarder (voir le man duplicity avec le filelist) DUPLICITYFILELIST="/etc/backup-`hostname`.filelist" # Passphrase pour le chiffrement PASSPHRASE="VotrePassPhraseDeOufQueYaQueVousEtVousSeulQuiSavez:-p" # Fréquence des sauvegardes complètes FULLIFOLDERTHAN="1W" # Rétention des sauvegardes RETENTION="2M" # Log d'erreur LOGERROR="/var/tmp/backup-hubic-error.log" # Bin de duplicity DUPLICITY_BIN="/usr/bin/duplicity" # Email pour les erreurs (0 pour désactiver) EMAIL="toto@mondomaine.com" # Envoyer un rapport par email sur l'état des backup RAPPORT=1 # Log d'erreur exec 2> ${LOGERROR} ##### Début du script function cleanup { echo "exit..." unset CLOUDFILES_USERNAME unset CLOUDFILES_APIKEY unset PASSPHRASE grep -v "has been deprecated" ${LOGERROR} > ${LOGERROR}.tmp mv ${LOGERROR}.tmp ${LOGERROR} if [ "`stat --format %s ${LOGERROR}`" != "0" ] && [ "$EMAIL" != "0" ] ; then cat ${LOGERROR} | mail -s "$0 - Error" ${EMAIL} fi } trap cleanup EXIT # Gentil avec le système ionice -c3 -p$$ &>/dev/null renice -n 19 -p $$ &>/dev/null if ! [ -f ${DUPLICITYFILELIST} ] ; then echo "Aucun fichier filelist : ${DUPLICITYFILELIST}" exit 1 fi export CLOUDFILES_USERNAME=${HUBICUSER} export CLOUDFILES_APIKEY=${HUBICPASSWORD} export CLOUDFILES_AUTHURL="hubic|${HUBICAPPID}|${HUBICAPPSECRET}|${HUBICAPPURLREDIRECT}" export PASSPHRASE # Backup ${DUPLICITY_BIN} --full-if-older-than ${FULLIFOLDERTHAN} / cf+http://default --include-globbing-filelist ${DUPLICITYFILELIST} --exclude '**' # Suppression des vieux backups ${DUPLICITY_BIN} remove-older-than ${RETENTION} cf+http://default --force # Rapport sur le backup if [ "$RAPPORT" != "0" ] && [ "$EMAIL" != "0" ] ; then ${DUPLICITY_BIN} collection-status cf+http://default | mail -s "$0 - collection-status" ${EMAIL} fi unset CLOUDFILES_USERNAME unset CLOUDFILES_APIKEY unset PASSPHRASE exit 0
A noter que mes bases de données sont dumpées à plat de façon indépendante du script de backup distant (par mysql_dump.sh)
Exemple de fichier filelist :
/etc /var/backups/mysql /var/chroot/bind9/etc/bind /var/lib/mysql /var/lib/awstats /var/lib/mailman /var/spool/cron /var/vmail - /var/www/mercereau.info/wp-content/cache/ - /var/www/default /var/www /home - /root/.cpan - /root/.cache - /root/.npm /root /opt
Attention : les fichiers et répertoires à exclure doivent apparaître avant l’inclusion d’un répertoire parent. En effet, duplicity s’arrête à la première règle qui matche un chemin donné pour déterminer s’il doit l’inclure ou l’exclure. (sources)
Il n’y a plus qu’a le lancer en tâche cron :
44 4 * * * /usr/local/bin/backup-to-hubic.sh
Merci pour ce tuto!! backup depuis le petit kimsufi 2G, parfait!
Ca manque juste un peu la possibilités des sous dossiers.. (pouvoir segmenter, www, docs perso, système, …)
Quand est-ce qu’on te paye une bière ? :):):)
Quand tu veux 🙂
Pour les sous dossiers regard de ce côté ça va peut être t’éclairer : http://gu1.aeroxteam.fr/2013/03/17/hubic-et-duplicity/#comments
Bonsoir,
Une petite correction/note pour ce script:
PASSPHRASE=’MonPassPhraseAMoi’
==> on met des ‘, car avec des » j’ai eu quelques soucis (ma passphrase contenait des $ qui étaient interprétés….)
Bon article, mais le problème du cloud, même avec un chiffrement, on donne à un tiers nos données, et si il les conserve, disons 20 ans, pas sûr que le chiffrement soit encore fiable 🙁
Faudrait rajouter un peu de difficulté, scinder les données en deux avec un xor, et les envoyer sur deux services de cloud différents par exemple.
OVH aurait-il changé certaines partie de l’infrastructure d’HubiC récemment (suite à leur changements d’offres/tarifs début février 2014) ?
La commande `
duplicity ./files cf+http://default
` me retourne :J’ai vérifié mes credentials et ait même retiré tout caractères « exotique » pour éviter tout problème dans le script :p
J’ai le même problème !
L’API d’authentification utilisée par le script hubic a été dépréciée en faveur de la nouvelle API basée sur OAuth: https://api.hubic.com/
Des utilisateurs ont crée un nouveau script pour gérer l’authentification en passant par cette nouvelle API: https://github.com/puzzle1536/hubic-wrapper-to-swift (License GPLv3).
Merci pour la réponse rapide : du coup mes tentatives avec https://github.com/Toorop/HubicSwiftGateway.git, https://github.com/Gu1/python-cloudfiles-hubic.git et https://github.com/guyou/python-cloudfiles-debian.git allaient rester vaines 🙂
J’ai voulu tester le wrapper conseillé par @Gu1 mais je dois être malchanceux car la page d’ajout d’application sur hubiC (https://hubic.com/home/browser/developers/) semble HS pour le moment : j’ai pu saisir un nom et une URL pour une nouvelle application mais ensuite la page reste grisée avec une liste vide (erreur JS « Uncaught ReferenceError: valkey is not defined« ) 🙁
On verra demain…
Autre précision, la librairie python-cloudfiles a été déprécié par rackspace en faveur de pyrax. duplicity permet depuis la v0.6.23 d’utiliser pyrax.
Plutôt que d’implémenter le support de l’auth hubic oauth dans python-cloudfiles, il faudrait le faire dans pyrax.
Je compte m’en occuper, dès que j’aurais le temps…
Super Gu1 !
Merci pour toutes ces précisions ! Je n’aurais pas les compétences de t’aider mais n’hésite pas à nous tenir informé si tu avance sur le sujet !
David
Merci pour les pécisions Gu1.
La page des applications répondant à nouveau, j’ai pu tester le wrapper pour Swift qui gère l’authentification via l’API que tu as conseillé (https://github.com/puzzle1536/hubic-wrapper-to-swift) : ça fonctionne bien, j’ai accès à mes données hubiC avec le client `swift`.
En revanche, je ne vois pas comment utiliser ce proxy avec duplicity pour faire mes backup.
La librairie pyrax est une très bonne chose : devrait uniformiser (et simplifier) le tout (bon, par contre Duplicity 0.6.23 n’est même pas dans Debian Jessie :-/).
J’ai mis à jour mon fork de python-cloudfiles avec le support de l’API OAuth: https://github.com/Gu1/python-cloudfiles-hubic
J’ai pas encore eu l’occasion de le tester avec duplicity, mais à priori, ça s’utilise pareil qu’avant.
La seule différence c’est qu’anciennement il fallait mettre juste « hubic » dans l’AUTHURL et maintenant il faut aussi fournir le client_id, client_secret et redirect_url après:
export CLOUDFILES_AUTHURL='hubic|YOUR_CLIENT_ID|YOUR_CLIENT_SECRET|YOUR_REDIRECT_URL'
Si des gens se sentent de tester…
Le code d’auth HubiC pour pyrax est lui aussi quasi prêt, mais il faudrait un changement dans la librairie pyrax elle même pour que je puisse le distribuer:
https://github.com/rackspace/pyrax/pull/292
Bonjour,
Le service client>Hubic m’a dit que les données étaient chiffrées sur leur disque dur. Apparemment, c’est faux alors?
Bonjour gnutux,
Aucune idée !
Seulement si tu as accès a tes données « en claire » c’est qu’ils doivent avoir la clef de déchiffrement… Donc je préfère re-crypter et posséder la clef de chiffrement !
David
Bonjour,
Tout d’abord un grand merci pour votre script qui vient répondre à un réel besoin. J’ai mis la bière au frais.
J’ai suivi vos instructions mais depuis que je me suis risqué à installer la librairie pyrax avec la commande « pip install git+git://github.com/rackspace/pyrax.git », j’ai l’erreur suivante : « Connection failed, please check your credentials: AuthenticationFailed Incorrect/unauthorized credentials received ».
La commande duplicity ./files cf+http://default me retourne : « BackendException: CLOUDFILES_USERNAME environment variablenot set. »
Je suis sous Ubuntu 12.04.3 et je crois que j’ai voulu bidouillé au dessus de mes (très maigres) compétences… mais enfin s’amuser avec son nunux n’est pas un des moindre plaisirs de l’existence.
PS : très sympa votre lampe d’ambiance.
Jean-Yves
Il n’est plus nécessaire d’utiliser cloudfiles comme backend pour duplicity. À la place, il faut utiliser un backend spécial hubic intégré à duplicity récemment.
Le mieux est d’utiliser duplicity 0.7.06, et d’adapter le script pour utiliser cf+hubic://default à la place de cf+https://default.
J’ai mis un exemple ici : https://github.com/blankoworld/divers/tree/master/backup_hubic