Peerfuse

Il y a maintenant plus d'un mois j'ai débuté avec lodesi un projet intitulé Peerfuse, qui est un système de fichiers distribué peer-to-peer.

Le projet est découpé en deux sous projets distincts (possédant une base de code commune) :

  • peerfuse-net pour un réseau sur Internet avec des inconnus. La principale utilisation à laquelle on pense, est un but similaire à Emule, à part qu'au lieu d'avoir un espace par utilisateur, ici tout le monde partage le même espace. Ceci permet l'échange de vidéos, photos, musiques, programmes, images CD de distributions Linux, etc.
  • peerfuse-lan pour un réseau avec ses propres machines. Il permet par exemple de partager une partition /usr/local entre divers machines. Ainsi chacunes de ces machines possède virtuellement un grand nombre d'applications, et elles ne sont récupérées que lorsqu'on les utilise effectivement.

Le principe en surface est simple :

  • C'est un système de fichier, c'est à dire qu'il n'y a pas de GUI (bon en fait on en fera probablement une pour aider à effectuer certaines tâches).
    Il suffit donc de lancer peerfuse avec la commande mount sur un point de montage qui sera l'espace partagé.
  • Il n'y a pas de serveur central, lorsque l'on rejoint le réseau, il suffit de se connecter sur l'un des peers, qui va nous mettre en relation avec tous les autres.
  • La partition montée est commune à tout le monde. C'est à dire que l'arborescence présente dans le point de montage sera le même pour tout le monde.
    Lorsque l'on souhaite partager un fichier avec le reste du monde, il suffit donc de le copier vers le point de montage, et ainsi chaque utilisateur y verra le fichier et pourra le lire ou le copier à son tour (ce qui effectue un téléchargement).
  • Il y a tout de même un système de permissions, comme sur tout système de fichier unix.
    Sur peerfuse-net, chaque peer possède un UID, et chaque fichier qu'il crée aura pour propriétaire cet uid. Après les permissions unix s'appliquent comme d'habitude. Les groupes seront également supportés, avec le principe qu'un utilisateur est propriétaire du groupe au GID = UID. C'est donc lui qui ajoute des personnes à son groupe.
    Sur peerfuse-lan, les permissions du système unix sont concervées. Ainsi root sur une machine pourra voir root sur les autres machines.
  • Une autre puissance de peerfuse est de permettre un travail collaboratif. En effet, les fichiers sont modifiables par ceux qui en ont la permission. Il est ainsi facile d'imaginer qu'un projet soit créé sur un réseau peerfuse, dans un dossier où seul le groupe G a droit d'écriture dessus. Tous les membres de ce groupe pourront modifier et faire évoluer ce projet.
    Attention toute fois, pour des projets d'ampleur tels que des logiciels, il est préférable d'utiliser un système de gestion de version tel que Subversion. En effet, peerfuse ne gère pas l'historique des versions, ni les accès concurrents à un même fichier (la dernière écriture gagne).
  • Peerfuse fonctionne en mode déconnecté, c'est à dire que même lorsque l'on est déconnecté du réseau, on peut lancer peerfuse et ajouter des fichiers, en supprimer, en modifier, etc. Lors de la prochaine reconnexion au réseau, les changements seront appliqués.
  • Tous les échanges sont sécurisés, utilisant SSL pour les connexions.
    peerfuse-net renforce encore les systèmes de sécurité, avec signatures de tous les messages et fichiers, encryptage des fichiers accessible que par une partie des utilisateurs (propriétaire ou groupe), certificat délivré par une autorité afin d'assurer l'authenticité de tel utilisateur, etc.
  • Les transferts seront effectués probablement en UDP pour peerfuse-lan, afin de gagner un débit optimal.
  • Ces transferts seront effectués dans la limite du possible en streaming. Le but est de pouvoir lire une vidéo de façon totalement transparente même lorsqu'elle n'est pas encore sur la machine locale. Si le débit du transfert est plus rapide que celui de la vidéo, aucune différence ne sera faite.

C'est un projet assez novateur et dont les tentatives similaires (mais n'ayant pas le tiers des fonctionnalités que nous proposons) sont toutes tombées à l'eau. Je pense que Laurent et moi avons la volonté suffisante pour que ça ne soit pas le cas avec ce projet.

Cependant, comme on peut l'imaginer, il y a énormément de problèmes de sécurité dans peerfuse-net qui peuvent se poser, en raison de la présence éventuelle de malfaiteurs. Nous en avons déjà résolu une grande partie, mais il reste encore quelques sujets mineurs sur lesquels plancher.

Développement

Nous recherchons tout de même des développeurs afin de nous aider sur le projet, car il y a du boulot. Cela dit, je pense qu'on atteindra une première version stable et incomplète de peerfure-lan rapidement, étant donné qu'il ne pose plus de problèmes de sécurité, et qu'il manque uniquement les transferts des fichiers.

Vous pouvez récupérer les sources grâce à :

$ svn co https://piggledy.org/svn/peerfuse/trunk peerfuse

Login: anonymous
Password: <Enter>

Vous trouverez la base commune dans common/, la partie concernant peerfuse-net dans peerfuse-net/ et je vous laisse deviner où se trouve le code de peerfuse-lan.
La documentation se trouve dans doc/, cependant ne lisez pas proto.html qui est complètement dépassé maintenant.

Lisez plutôt peerfuse-net/PROTOCOL et doc/pfnet.proto.

N'hesitez pas à nous rejoindre sur le salon IRC #peerfuse@freenode. Une mailing list sera bientôt mise en place.

Plus d'informations sur http://peerfuse.org.

5 Responses to “Peerfuse”


Leave a Reply




Bear