Bonjour à tous,

j'essaie de mettre en place une sauvegarde sur Hubic mais j'ai encore qq soucis de performance.

1) d'abord j'ai récupérer un script pour avoir les identifiants Hubic http://www.protocol-hacking.org/public/hubic.pl
#!/usr/bin/perl
#
# $Id: hubic.pl 6 2012-02-08 17:46:06Z gomor $
#
package Hubic;
use strict;
use warnings;

use LWP::UserAgent;

sub new {
   my $self  = shift;
   my $class = ref($self) || $self;

   my %h     = (
      host => 'ws.ovh.com',
      @_,
   );

   my $ua = LWP::UserAgent->new;
   $ua->agent("hubiC/1.0.9 (Windows NT 6.1; fr_FR)");
   $h{_ua} = $ua;

   return bless(\%h, $class);
}

sub getWebdavInfo {
   my $self = shift;

   my $id                 = $self->_postNasLogin;
   my $url                = $self->_postGetNas($id);
   my ($login, $password) = $self->_postGetCredentials($id);

   return ($url, $login, $password);
}

sub _postNasLogin {
   my $self = shift;

   my $ua       = $self->{_ua};
   my $host     = $self->{host};
   my $login    = $self->{login};
   my $password = $self->{password};

   my $params = '{"email":"'.$login.'","password":"'.$password.'"}';

   # Encode characters if URI::Escape is available
   eval("use URI::Escape;");
   if (!$@) {
      print "[DEBUG] URI::Escape available\n" if $self->{debug};
      $params = uri_escape($params);
   }

   # 'POST /cloudnas/r0/ws.dispatcher/nasLogin HTTP/1.1'."\r\n".
   # 'Content-Type: application/x-www-form-urlencoded'."\r\n".
   # 'User-Agent: hubiC/1.0.9 (Windows NT 6.1; fr_FR)'."\r\n".
   # 'Content-Length: 126'."\r\n".
   # 'Connection: Keep-Alive'."\r\n".
   # 'Accept-Encoding: gzip'."\r\n".
   # 'Accept-Language: fr-FR,en,*'."\r\n".
   # 'Host: ws.ovh.com'."\r\n".
   # ''."\r\n".
   # 'session=&params=%7B%20%22email%22%20%3A%20%22<login>%22%2C%20%22password%22%20%3A%20%22<password>%22%20%7D'."\r\n".
   # "\r\n";
   my $req = HTTP::Request->new(
      POST => "https://$host/cloudnas/r0/ws.dispatcher/nasLogin",
   );
   $req->content_type('application/x-www-form-urlencoded');
   $req->content('session=&params='.$params);

   my $res = $ua->request($req);
   if (! $res->is_success) {
      die("FATAL: postNasLogin() failed:\n[", $res->content, "]\n");
   }

   my $reply = $res->content;
   print "[DEBUG] $reply\n" if $self->{debug};

   (my $id = $reply) =~ s/^.*"\s*id\s*?"\s*?:\s*?"\s*(.*?)\s*".*$/$1/;
   print "[DEBUG] Got ID [$id]\n" if $self->{debug};

   return $id;
}

sub _postGetNas {
   my $self = shift;
   my ($id) = @_;

   my $ua   = $self->{_ua};
   my $host = $self->{host};

   # 'POST /cloudnas/r0/ws.dispatcher/getNas HTTP/1.1'."\r\n".
   # 'Content-Type: application/x-www-form-urlencoded'."\r\n".
   # 'User-Agent: hubiC/1.0.9 (Windows NT 6.1; fr_FR)'."\r\n".
   # 'Content-Length: 54'."\r\n".
   # 'Connection: Keep-Alive'."\r\n".
   # 'Accept-Encoding:gzip'."\r\n".
   # 'Accept-Language: fr-FR,en,*'."\r\n".
   # 'Host: ws.ovh.com'."\r\n".
   # ''."\r\n".
   # 'session=<id>'."\r\n".
   # "\r\n";
   my $req = HTTP::Request->new(
      POST => "https://$host/cloudnas/r0/ws.dispatcher/getNas",
   );
   $req->content_type('application/x-www-form-urlencoded');
   $req->content("session=$id");

   my $res = $ua->request($req);
   if (! $res->is_success) {
      die("FATAL: postGetNas() failed:\n[", $res->content, "]\n");
   }

   my $reply = $res->content;
   print "[DEBUG] $reply\n" if $self->{debug};

   (my $url = $reply) =~ s/^.*"\s*url\s*?"\s*?:\s*?"\s*(.*?)\s*".*$/$1/;
   print "[DEBUG] Got URL [$url]\n" if $self->{debug};

   return $url;
}

sub _postGetCredentials {
   my $self = shift;
   my ($id) = @_;

   my $ua   = $self->{_ua};
   my $host = $self->{host};

   # 'POST /cloudnas/r0/ws.dispatcher/getCredentials HTTP/1.1'."\r\n".
   # 'Content-Type: application/x-www-form-urlencoded'."\r\n".
   # 'User-Agent: hubiC/1.0.9 (Windows NT 6.1; fr_FR)'."\r\n".
   # 'Content-Length: 54'."\r\n".
   # 'Connection: Keep-Alive'."\r\n".
   # 'Accept-Encoding: gzip'."\r\n".
   # 'Accept-Language: fr-FR,en,*'."\r\n".
   # 'Host: ws.ovh.com'."\r\n".
   # ''."\r\n".
   # 'session=<id>'."\r\n".
   # "\r\n";
   my $req = HTTP::Request->new(
      POST => "https://$host/cloudnas/r0/ws.dispatcher/getCredentials",
   );
   $req->content_type('application/x-www-form-urlencoded');
   $req->content("session=$id");

   my $res = $ua->request($req);
   if (! $res->is_success) {
      die("FATAL: postGetCredentials() failed:\n[", $res->content, "]\n");
   }

   my $reply = $res->content;
   print "[DEBUG] $reply\n" if $self->{debug};

   (my $username = $reply) =~ s/^.*"\s*username\s*?"\s*?:\s*?"\s*(.*?)\s*".*$/$1/;
   print "[DEBUG] Got username [$username]\n" if $self->{debug};

   (my $secret = $reply) =~ s/^.*"\s*secret\s*?"\s*?:\s*?"\s*(.*?)\s*".*$/$1/;
   print "[DEBUG] Got secret [$secret]\n" if $self->{debug};

   return ($username, $secret);
}

1;

package main;

use Getopt::Std;
my %opts;
getopts('l:dh', \%opts);

if (!$opts{l} || $opts{h}) {
   die("Usage: $0 -l login [-d] [-h]\n");
}

eval("use Term::ReadKey;");
my $password = '';
print "Password:";
if (!$@) {
   print "[DEBUG] Term::ReadKey available\n" if $opts{d};
   ReadMode('noecho');
}
$password = <>;
chomp($password);
print "\n";

my $hubic = Hubic->new(
   login    => $opts{l},
   password => $password,
   debug    => $opts{d},
);
my ($hubicUrl, $hubicLogin, $hubicPassword) = $hubic->getWebdavInfo;

print "URL:      $hubicUrl\n";
print "Login:    $hubicLogin\n";
print "Password: $hubicPassword\n\n";
print "mount -t davfs $hubicUrl /mnt\n";

exit(0);
le résultat
URL:      https://cloudnas1.ovh.com/xxxxx/
Login:    xxxxx
Password: xxxxx

mount -t davfs https://cloudnas1.ovh.com/xxxxx/ /mnt
2) ensuite on passe on montage du dossier Hubic (webdav) avec dvfs (ou davfs2 mais nécessite les droits root)
/mnt/Hubic --> le point de montage
wdfs https://cloudnas1.ovh.com/xxxxx/  '/mnt/Hubic'  -o username=xxxxx,password=xxxxx
pour plus d'info sur les options wdfs
wdfs --help
3) on met en place le chiffrement des données avec encfs
/mnt/Hubic --> dossier recevant les données chiffrées.
/media/Backup --> dossier temporaire avec les données en clair à copier dedans
encfs '/mnt/Hubic' '/media/Backup'
si c'est la première fois il faudra le paramétrer, pour plus d'info
man encfs
4) on ajoute les données à sauvegarder dans le dossier /media/Backup
on peut utiliser rsync, mais suivant les options rsync va recopier l'intégralité des données au lieu de synchroniser
rsync -r -o -g -v --progress --delete -l -i -s /media/DocumentsàSauvegarder /media/Backup/
5) pour finir
fusermount -u '/media/Backup' ;
fusermount -u '/mnt/Hubic'
Bonjour à tous,

j'essaie de mettre en place une sauvegarde sur Hubic mais j'ai qq soucis.
j'ai d'abord récupéré les info pour monter l'espace de stockage dans Nautilus (webdav)
j'ai essayé encfs sur un dossier local et tout marche bien.

j'initialise encfs
encfs '/home/nIQnutn/.gvfs/Partage WebDAV sur cloudnas1.ovh.com en tant que cloudnas/crypte' '/tmp/blabbb'
je rentre lemot de passe et le fichier .encfs6.xml est créé.
mais ça se gate quand je copie un fichier dans /tmp/blabbb
Erreur lors de l'ouverture du fichier « /tmp/blabbb/fichier.jpg » : Aucun fichier ou dossier de ce type
rien à faire, ça marche pas comme ça.

Quand je copie les données chiffrées depuis mon PC et que je les copie sur Hubic, j'arrive bien à ouvrir le dossier et déchiffrer les données.

en utilisant davfs j'ai pas de pb mais j'ai besoin de me logger en root
mount -t davfs https://cloudnas1.ovh.com/4d50ed60f9e50a3c2777f/ /mnt
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

je viens d'installer wdfs qui ne nécessite pas d'être root pour monter le FS.
ça ne pose pas de pb avec encfs.
wdfs https://cloudnas1.ovh.com/4d50ed86c0a3c2777f/ '/tmp/wdfs'  -o username=*****,password=**************
encfs '/tmp/wdfs/crypte' '/tmp/decrypte'
je vais voir si j'arrive à synchroniser avec rsync mes dossiers.
Super intéressant ça. Tiens nous au courant.

Peut-être pourrais-tu modifier le titre de ce fil, il sera plus facile à retrouver et il peut intéresser beaucoup de monde.
j'ai lancé rsync et ça marche. par contre avec ma connexion c'est très lent donc j'ai pas pu synchroniser mes 20Go.
je vais testé encore un peu pour vérifier que tout fonctionne correctement et éventuellement je peux faire un petit tuto pour mettre en place une sauvegarde chiffrée sur Hubic en utilisant rsync et encfs.
Oui. Llaumgui cherchait justement un système de backup de ce genre au début de la semaine.

(Pense à modifier ton titre)
En testant, je me rends compte que c'est pas très performant.
J'ai 22 Go de données à sauvegarder et principalement des petits fichiers, et l'initialisation est très longues et avec ma connexion c'est vraiment long pour uploader un simple PDF.

l'idéal serait de chiffrer puis de synchroniser les données mais ça oblige à dupliquer les données.
nouvo09 wrote:Oui. Llaumgui cherchait justement un système de backup de ce genre au début de la semaine.

(Pense à modifier ton titre)
Yes et c'est bien moins cher que Dropbox...
je sais pas si c'est adapté à mon débit ou si ça bloque ailleurs mais rsync m'annonce:
245:18 écoulé, 1015:09 restant progression globale 20%



OVH
Vos données sont stockées en France, dans les propres datacentres d’OVH
Dropbox
Dropbox utilise Amazon S3 pour le stockage des données.
Autant dire qu'en cas de pb, tu peux attendre un moment.
un mois plus tard
Hello les amis de Fedora,

j'avais déjà regardé la chose (WebDAV + encfs), à l'époque avec Box.net, qui existe toujours est est très fiable, mais n'offre que 5G d'espace gratuit.

Hubic est plus "généreux", mais souffre de grave défauts de jeunesse : dimanche (17 juin 2012) par exemple, c'était planté de 14h00 jusqu'à lundi matin. Fâcheux si on a un besoin urgent de récupérer des données...

Bref, pour apporter ma pierre au moulin de ce post :

-1) davfs2 fonctionne parfaitement en "non-root"... c'est juste un peu "coriace" à mettre en place !
Vous pouvez certainement suivre (et adapter) le processus que j'ai décrit pour Ubuntu ici : http://doc.ubuntu-fr.org/davfs2
Le packaging étant différent sur Fedora, il est possible que le dpkg-reconfigure n'existe pas ou soit fait différemment. A mon avis, le seul truc que fait la commande dans ce cas (à vérifier !) est que ça met le suid de mount.davfs, de façon qu'un utilisateur non root puisse lancer la commande.

-2) je ne connaissais pas wdfs, ça fonctionne mais ça a l'air "pas fini" comme machin (du moins sur Ubuntu). En principe, un file-system qui utilise fuse devrait passer en daemon une fois lancé, sauf si on utilise l'option -f pour le forcer à ne pas le faire. Là, le machin reste constamment au premier plan !.. Donc si on veut faire un script et enchaîner sur le montage encfs, c'est moins évident !..

Je n'ai pas encore bien expérimenté avec wdfs, mais davfs a l'air d'être "écrit avec les pieds" pour ce qui concerne le multi-tâche. En effet, si on lance un transfert volumineux, tout est bloqué, même le listage de répertoire (un simple ls) ... jusqu'à ce que le transfert soit fini. Ca ressemble donc à une sérialisation complète de toutes les actions. Alors c'est sûr que comme ça c'est plus facile à coder, mais du coup ça rend le système très peu réactif, voire donne l'impression que tout est planté.

rsync ne fonctionne pas non plus avec davfs : dans le sens local => cloud, on récupère une erreur 22 (sans doute des caractères mal 'escapés'), dans l'autre sens, cela fonctionne, mais les dates sur le partage webdav sont celles de la création du fichier sur le cloud, et pas la date du fichier d'origine qu'on a copié !.. Donc si on fait une copie local => cloud (cp, puisque rsync ne marche pas dans ce sens !) plus un rsync cloud => local, on se prend une recopie intégrale... pas cool.

Je vais expérimenter avec wdfs, pour voir si outre son côté "pas fini", il présente les mêmes défauts de conception que davfs. Et au pire je tâcherai de me remettre à mon programme de montage distant de la Freebox V6 pour l'adapter à WebDAV !..


[EDIT] : bon, ben pas mieux pour wdfs, voici ce qu'on lit dans le README livré avec le source:
wdfs wrote:limitations of this implementation:
- wdfs is not (yet) multithread safe. it always uses fuse single thread mode.
- read/write of big files (~ 50 MB+) is slow, because the _complete_ file
will be GET/PUT on a request.
Pour que Rsync ne recopie pas intégralement les données il faut lui mettre l'option "checksum"
nIQnutn wrote:Pour que Rsync ne recopie pas intégralement les données il faut lui mettre l'option "checksum"
Certes... mais ça ne "résout" pas le problème !

Avec checksum, rsync va faire le checksum des données situées sur ton stockage WebDAV et donc il devra lire 100% des données. Tu gagnes juste le temps de réécriture en local, mais celui-ci est négligeable par rapport au temps de transfert. Qui plus est, même pas sûr que tu gagnes quoi que ce soit, parce que certes tu ne feras pas d'écritures locale, mais tu vas aussi faire le checksum local de 100% des fichiers ! Donc non seulement ça ne "résout" pas le temps énorme du rsync, mais ça empire probablement la chose. :hammer:

... enfin tout ça, à la base, c'est certainement qu'en plus d'une gestion déficiente du mutl-tâche, davfs doit probablement mal gérer les attributs des fichiers (à moins que ce ne soit OVH... à vérifier !)
9 jours plus tard
Salut à tous.

Je déterre le topic pour vous faire part de mon expérience (heureuse) avec messieurs Webdav et hubiC.
Voici la procédure pour monter votre dossier hubiC sur votre système (source). Certes, c'est pas exactement le sujet du topic, mais ça peut être utile :

Installer davfs2 :
# yum install davfs2
Après avoir récupéré vos identifiants avec le script ici
# echo "https://cloudnas1.ovh.com/votreespaceovh login password" >> /etc/davfs2/secrets
# mkdir /home/yourlogin/.davfs2
# chown yourlogin:yourlogin /home/yourlogin/.davfs2
# cp /etc/davfs2/secrets /home/yourlogin/.davfs2
# chown yourlogin:yourlogin /home/yourlogin/.davfs2/secrets
Je voulais monter le dossier dans /media, mais à chaque reboot tout disparaît... C'est normal ? Du coup, je l'ai mis dans /mnt
# mkdir /mnt/hubiC
Bon, là, je suis passé par system-config-users (en root) au lieu de la ligne çi-dessous. C'est pas bien, je sais, mais bon...
# usermod -aG davfs2 votrelogin
# chmod u+s /sbin/mount.davfs
Et enfin dans le fstab
https://cloudnas1.ovh.com/identifiant/	/mnt/hubiC davfs defaults,noauto,user,uid=Val,gid=davfs2 0 0
Sans le noauto, ça plante au démarrage (normal, j'ai pas encore le réseau au boot).

Le problème qui est survenu est le suivant :
$ mount /mnt/hubiC/
/sbin/mount.davfs: / is the home directory of user nobody.
You can't mount into another users home directory
Soit. J'ai donc demandé de l'aide à Google (ici). Réponse :
$ awk -F: '($6 == "/") {print}' /etc/passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
nm-openconnect:x:995:993:NetworkManager user for OpenConnect:/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
Et pour chaque ligne :
# usermod -d /dev/null nobody
Sauf que ça ne marche pas pour dbus vu qu'il est loggé. Donc il faut redémarrer en init 1 pour modifier ça.

Et maintenant, ça marche. Et pour faire des backups sécurisés : DéjàDup avec mot de passe dans le dossier /mnt/hubiC. Nickel. Bon sauf que DéjàDup termine direct le backup et que mon réseau sature en upload le temps d'envoyer les fichiers - ce qui fait planter Nautilus. Du coup je sais pas trop si DéjàDup est "au courant" que l'upload est en cours ou s'il pense que tout est écrit (si c'est ça, ça veut dire que tout se met en cache quelque part sur mon disque - ce qui me fait un peu peur pour le jour où je ferai mon premier GROS backup...).

J'aurais toutefois une question : comment peut-on faire pour faire apparaître le dossier /mnt/hubiC comme un lecteur réseau (ou une clé USB), c'est à dire la possibilité de le monter en cliquant dessus dans Nautilus et de le démonter en cliquant sur le symbole "Eject" ? Non parce que devoir ouvrir un terminal et taper
$ mount /mnt/hubiC
pour monter le bouzin, c'est pas super esthétique sous Gnome 3...
Pour avoir accès au dossier directement dans Nautilus
Nautilus -> Fichier -> Se connecter à un serveur
puis créer un signet
Tu as l'air d'avoir fait tout ce qui indiqué dans mon tuto Ubuntu, avec les adaptations correctes pour Fedora.

Pour ce qui est du montage via Nautilus, ici (Precise 64) ça fonctionne parfaitement sans avoir à créer de signet. Peut-être est-ce simplement parce que le point de montage se situe dans mon /home au lieu d'être dans /mnt

Ca me semble plus logique de le mettre dans le /home vu que c'est en fait un montage utilisateur, non visible des autres utilisateurs du PC.

Ah, et une petite astuce, quand tu donnes un tutoriel où il faut remplacer le nom d'utilisateur, le mieux est de le donner en utilisant la variable $USER, et si c'est pour désigner le 'home' de l'utilisateur, d'utiliser le raccourci : ~

Exemple:
chown $USER:$USER ~/.davfs2
(Ca suppose tout de même que le user est dans un groupe du même nom, ce qui est généralement le cas pour l'utilisateur principal du PC !)

Ainsi donnée, la commande peut être copiée/collée par un utilisateur, sans qu'il ait à remplacer des bouts de la ligne de commande.
Ah et oui, davfs2 a un comportement désastreux.

C'est ce que j'expliquais plus haut, il a probablement été écrit "mono-thread". Cela fait que lorsque tu es en train de faire un upload (et c'est long en ADSL) les demande de listage (et Nautilus en fait plein sans même que tu le saches !) sont en attente. Par conséquent ton système semble "bloqué", et c'est assez moche. Un autre truc moche, c'est qu'il télécharge tout le fichier dans la cache avant de répondre aux ordres de lecture... ça c'est assez bourrin si on veut juste les premiers octets d'un très gros fichier !..
Si tu veux écrire un file-system Fuse, il FAUT faire un truc multi-tâche (multi-thread) sinon le FS présente le mauvais comportement décrit plus haut. Et si tu te débrouilles bien, il n'y a pas de raison de ne pas pouvoir traiter une demande de listage en parallèle d'une lecture ou d'une écriture.
J'ai fait ainsi sur mon file-system expérimental pour monter une Freebox à distance, et il est très réactif, sans commune mesure avec davfs !..

Et aussi, comme tu le constates, davfs2 utilise effectivement une cache.
Si tu avais suivi le tutoriel en entier, il y a un autre fichier à copier dans ~/.davfs2, c'est celui de la configuration. Ainsi tu peux configurer par utilisateur. Sinon davfs2 prendra le fichier dans son répertoire d'installation et c'est moche !.. Dans ce fichier de configuration tu peux jouer par exemple sur la taille de cache et bien d'autres choses.

Par défaut la cache est dans le répertoire ~/.davfs2/cache, et elle fait 50M.

Lorsque tu "démontes" proprement ton filesystem davfs, il va "synchroniser", c'est à dire qu'il terminera toutes les écritures en court avant de rendre la main. Donc, sauf si tu éteins "sauvagement" ton PC, en principe tout sera uploadé correctement.

Conclusion, compte tenu de l'état de davfs2, son usage est réservé à une manipulation de "petits fichiers", ainsi les effets de bord décrits plus haut n'ont plus trop d'impact.

... et une ré-écriture complète s'impose !.. Je suis dessus, mais j'avance pas vite (j'ai aussi un travail à temps plein et d'autres activités :roll: )
@nIQnutn : you made my day!
Ptin j'y avais même pas pensé, alors que ça fait exactement ce que je veux... Merci !

@Zakhar : ok. J'avais aussi lu des infos de ce genre sur davfs, mais j'avais pas creusé. C'est de l'optimisation après.
Par contre, en utilisant la technique magique du signet, est-ce que Nautilus utilise davfs ? Si oui, comment lui demander d'utiliser un FS multi-thread à la place ?
En toute logique, Nautilus doit utiliser ce qui figure dans le /etc/fstab comme montage signalés 'user'.

Et lorsqu'on clique sur un tel montage, il le monte !

Donc pour utiliser un autre FS il suffit que ce soit fait ainsi dans le /etc/fstab

Par exemple, pour monter sa Freebox on peut utiliser curlftpfs (qui lui est mieux écrit et davantage multi-tâche), et faire l'équivalent dans le /etc/fstab mais avec un montage curlftpfs au lieu de davfs
Tu veux dire qu'il faudrait que je modifie cette ligne de mon fstab
https://cloudnas1.ovh.com/ID/	/mnt/hubiC davfs defaults,noauto,users,uid=Val,gid=davfs2 0 0
par
https://cloudnas1.ovh.com/ID/	/mnt/hubiC curlftpfs defaults,noauto,users,uid=Val 0 0
?

Mais comment savoir si hubiC supporte le curlftpfs ?
lol non !

C'est certain que ça ne marchera pas !

Je citais la freebox en exemple (qui a un serveur ftp) et tu peux monter (à tester) avec
ftp://user:password@mafreebox.freebox.fr/	/mnt/Freebox curlftpfs defaults,noauto,users,uid=Val 0 0
Ok. Bon le coup de la Freebox, ça ne m'intéresse que moyennement, mais merci pour le tuyau 😉

Mais quid de fusefs ? C'est multi-threadé ? J'arrive pas à trouver d'infos consistantes sur le Net... Et à priori, fusefs devrait marcher sur hubiC.