Vodstok, un outil de partage volontaire
Publié le 19 mars 2012

Durant le meeting du mois de Janvier, j’avais présenté un de mes outils nommé Vodstok (pour Voluntary Distributed Storage Kit), mais il n’était pas finalisé. J’ai pris un peu de temps parmi le peu disponible pour tenter de finaliser le code et pouvoir le mettre à disposition de tous. Cet outil permet à tout un chacun de pouvoir uploader et télécharger des fichier stockés sur Internet, dans un nuage de serveurs de stockage mis à disposition par des volontaires.

Stockage distribué volontaire

Des personnes utilisant Vodstok l’installent sur leurs serveurs web (aucune base de données requise, compatible PHP4/5) et décident ainsi de partager une portion de leur espace de stockage aux utilisateurs de Vodstok. Chaque propriétaire de serveur peut ainsi s’ajouter à un réseau maillé de serveurs, et l’ensemble constitue une plate-forme de stockage distribué accessible en HTTP.

La force de ce système est d’une part sa résistance aux coupures : si un serveur tombe, le système est toujours fonctionnel, bien que les données du serveur perdu soient considérées comme perdues (Vodstok n’assure pas de redondance actuellement). Mais il est toujours possible de s’en servir, et en comptant sur l’effet Streisand, cela devrait a priori favoriser ce système. D’autre part, Vodstok se base sur le protocole HTTP, qui est universel et permet même de passer au travers de proxies, ce qui évite d’avoir une configuration de ports particulière, comme c’est le cas avec BitTorrent par exemple.

Vodstok intègre un client en ligne de commande écrit en Python, qui permet d’assurer un stockage sécurisé (AES256) et une répartition d’un fichier sur l’ensemble des serveurs. Bien sûr ce client peut être modifié et les usages dérivés sont nombreux, la seule limite reste votre imagination. Pour faire simple, un serveur sur lequel vodstok est déployé fait office de système de stockage seul, il n’y a pas d’autre logique particulière. On peut le considérer comme un "bout de disque dur" qui ne regarde pas ce qui y est stocké ni comment s’en servent les utilisateurs.

Comment partager une partie de son espace de stockage web avec Vodstok

En premier lieu, il faut récupérer l’archive de Vodstok sur la page du projet, et copier le contenu du dossier www sur le serveur distant. Une rapide modification du fichier de configuration config.inc.php permet de paramétrer le bouzin :

  1. <?php
  2.  
  3. define('QUOTA_MB', 1024); /* Je décide de partager 1Go d'espace disque */
  4. define('MAX_ENDPOINTS',1500);
  5. define('MAX_ENDPOINT_LEN',200);
  6.  
  7. /*
  8. DO NOT MODIFY OR REMOVE THE FOLLOWING LINES
  9. */
  10.  
  11. define('QUOTA',QUOTA_MB*1024*1024);
  12. define('CHUNK_DIR','chunks');
  13. define('ENDPOINT_DIR','endpoints');
  14.  
  15. ?>

Télécharger

On chmod 777 les dossiers chunks et endpoints, et c’est tout, Vodstok est paré à fonctionner côté serveur. Reste à voir comment s’en servir côté client.

Pour le client, rien de bien compliqué : le dossier client contient le code source de l’outil, qui est pour l’instant seulement en ligne de commande. On le copie dans un dossier accessible à l’utilisateur, et on peut le lancer :

# chmod +x /opt/vodstok-1.2 && cd /usr/bin/local && ln -s /opt/vodstok-1.2/vodstok vodstok
$ vodstok
Usage: vodstok [options] [VDS URL]

Options:
 -h, --help            show this help message and exit
 -l, --list-endpoints  List saved endpoints
 -a ENDPOINT, --add-endpoint=ENDPOINT
                       Add an existing endpoint
 -r ENDPOINT, --del-endpoint=ENDPOINT
                       Remove an existing endpoint
 -p ENDPOINT, --publish=ENDPOINT
                       Publish an existing endpoint
 -w DIRECTORY, --write=DIRECTORY
                       Set destination directory
 -s, --size            Displays distributed storage capacity
 -v, --version         Show version
 -u, --update          Update endpoints

Première étape, ajouter le point de stockage web nouvellement créé, ainsi que d’autres déjà existant :

$ vodstok -a http://www.monserveur.com/vodstok/
$ vodstok -a http://virtualabs.fr/vodstok/
$ vodstok -a http://www.depotware-network.net/vodstock/
$ vodstok -a http://vodstok.zengeek.org/

Lors de chaque ajout de point de stockage (ou endpoint), vodstok vérifie que celui-ci est bien fonctionnel.

Seconde étape, publier votre point de stockage :

$ vodstok -p http://www.monserveur.com/vodstok/

Etape ultime, récupérer de nouveaux points de stockage grâce à la fonctionnalité de mise-à-jour intégrée :

$ vodstok -u

Comment échanger des fichiers grâce à Vodstok

Pour échanger des fichiers, vous n’avez pas obligatoirement besoin d’installer un point de partage (mais ça serait quand même ’achement bien, pour la bonne santé et l’espace de stockage du système). Il est tout de même conseillé d’ajouter au moins un point de stockage existant, et de mettre à jour la liste des points de stockage :

$ vodstok -a http://virtualabs.fr/vodstok/
$ vodstok -u

Une fois cela fait, il est alors très facile d’uploader un fichier sur le réseau vodstok :

$ vodstok britney-spears-chante-sous-la-douche.mp3
[+] Uploading ... 100.00%
[i] File successfully uploaded.
Share this link: vds://054B22B4D64746A94CCE72AB410516C7@www.depotware-network.net/vodstock/#5e23d232a24a332d3e64f02d9b9c9350

Et c’est identique pour le téléchargement :

$ vodstok vds://9AAFC5E52E29E833D969399E9EEF3D0F@virtualabs.fr/vodstok/#6edc5a91f3c29190229822f0119f9745
[+] Retrieving file summary
[+] Starting file download
[+] Downloading ... 100.00%
[i] File saved as britney-spears-chante-sous-la-douche.mp3

Source et contribution

J’ai mis le projet sur [GITHUB], et monté un repository Vodstok sur mon hébergement. N’hésitez pas à tester, jeter un oeil, et si vous pensez pouvoir apporter votre brique, à modifier le code et proposer vos améliorations.

Conclusion

Le projet vodstok est actuellement viable, mais toujours en phase beta. Je suis en train d’essayer d’améliorer le système et de faire en sorte que celui-ci soit fiable et efficace. Essayez-le, installez des points de stockage, et faites moi vos retours d’expérience par email (virtualabs -at- gmail -dot- com) ou directement via twitter !

[GITHUB] https://github.com/virtualabs/Vodstok
[HOMEPAGE] http://virtualabs.fr/vodstok/