3 points par GN⁺ 2024-04-17 | 1 commentaires | Partager sur WhatsApp
  • BTFS est un système de fichiers BitTorrent qui permet de monter des fichiers .torrent ou des magnet links comme des répertoires en lecture seule dans une arborescence de fichiers
  • Le contenu des fichiers est téléchargé à la demande lorsque l’application le lit, et les outils habituels comme ls, cat ou cp fonctionnent comme prévu
  • Des applications comme vlc et mplayer peuvent aussi fonctionner sans modification, ce qui permet de manipuler le contenu des torrents comme des fichiers ordinaires
  • Des méthodes d’installation de paquets sont fournies pour Debian/Ubuntu, Arch Linux, Gentoo, Fedora, Fedora OSTree, OpenSUSE et macOS
  • Sous Linux, les dépendances sont fuse3, libtorrent et libcurl ; la compilation depuis les sources suit le flux autoreconf, configure, make

Ce que fait BTFS

  • BTFS permet de monter un fichier .torrent ou un magnet link pour l’utiliser comme un répertoire en lecture seule dans une arborescence de fichiers
  • Le contenu des fichiers est téléchargé à la demande lorsque l’application le lit effectivement
  • Les outils de système de fichiers classiques fonctionnent tels quels
    • ls
    • cat
    • cp
  • Les applications peuvent aussi être utilisées sans modification
    • vlc
    • mplayer

Flux d’utilisation de base

  • Créez un répertoire de montage, associez-y le fichier torrent, puis lancez les fichiers du répertoire comme des fichiers ordinaires
$ mkdir mnt
$ btfs video.torrent mnt
$ cd mnt
$ vlc video.mp4
  • Le démontage et l’arrêt se font avec fusermount
$ fusermount -u mnt

Installation des paquets

  • Sur Debian/Ubuntu, installez avec apt-get
# apt-get install btfs
  • Sur Arch Linux, installez avec pacman
# pacman -S btfs
  • Sur Gentoo, installez avec emerge
# emerge -av btfs
  • Sur Fedora, installez le paquet fuse-btfs avec dnf
# dnf install fuse-btfs
  • Sur Fedora OSTree, installez fuse-btfs avec rpm-ostree
$ rpm-ostree install fuse-btfs
  • Sur OpenSUSE, installez avec zypper
# zypper install btfs
  • Sur macOS, utilisez brew
$ brew install btfs

Dépendances Linux

  • Les dépendances nécessaires sous Linux sont les suivantes
    • fuse3 : fuse3 sur Ubuntu 22.04
    • libtorrent : libtorrent-rasterbar8 sur Ubuntu 22.04
    • libcurl : libcurl4 sur Ubuntu 22.04

Compilation depuis les sources

  • Sur les versions récentes de Debian/Ubuntu, installez les dépendances de compilation, clonez le dépôt, puis exécutez autoreconf, configure et make
$ sudo apt-get install autoconf automake libfuse3-dev libtorrent-rasterbar-dev libcurl4-openssl-dev g++
$ git clone https://github.com/johang/btfs.git btfs
$ cd btfs
$ autoreconf -i
$ ./configure
$ make
  • Si vous souhaitez aussi l’installer, exécutez en plus make install
$ make install
  • Pour compiler sur macOS, installez les dépendances avec brew, puis utilisez le même flux de compilation
$ brew install --cask macfuse libtorrent-rasterbar autoconf automake pkg-config
$ git clone https://github.com/johang/btfs.git btfs
$ cd btfs
$ autoreconf -i
$ ./configure
$ make
  • Si l’installation est également nécessaire sur macOS, exécutez make install
$ make install

1 commentaires

 
GN⁺ 2024-04-17
Commentaires sur Hacker News
  • Ce serait bien d’avoir un programme serveur complémentaire. Quelque chose qui fasse à la fois générateur de fichiers torrent, tracker et simple serveur de fichiers
    Dans une grande organisation, on pourrait héberger sur un serveur une énorme quantité de données publiques, générer un torrent à chaque modification des données, servir le fichier .torrent en HTTP tout en assurant aussi le rôle de tracker
    Il suffirait ensuite d’ajouter autour du client FUSE une logique simple pour détecter les nouveaux torrents du serveur et les recharger/remonter
    J’ai autrefois créé une distribution Linux pour des banques. Elle reposait sur Ubuntu NetBoot, avec seulement les paquets minimaux pour les postes des agences, et comme il n’y avait pas de serveur dans les agences, la distribution s’auto-seedait
    Avec juste wake-on-lan et PXE configurés sur le switch, une seule machine permettait de cloner plusieurs centaines de postes dans un bâtiment en assez peu de temps, et les nouveaux clones pouvaient eux aussi devenir des seeders
    En interne, on servait un dépôt Ubuntu personnalisé via nginx et on faisait tourner tftp/inetd et wackamole. Une fois la machine installée, le « serveur » récupérait le torrent et l’ajoutait à transmission ; une fois terminé, cette machine devenait elle aussi un seeder et lançait wackamole, inetd, nginx, le tracker, etc. Au début, on seedait 10 machines de façon stable, puis une fois toutes démarrées, on en réveillait d’autres
    On a déployé l’image sur 8 000 machines réparties dans plusieurs centaines d’agences bancaires en quelques semaines, mais l’essentiel du délai venait de la gestion du changement et du plan de déploiement progressif. En pratique, le plus difficile a été de faire descendre la première seed dans chaque agence via le build Linux existant, puis d’en utiliser une comme machine de seed. Tout cela sur plus de 350 agences avec des liaisons limitées, dont certaines en ISDN 256 kbps

    • Fonction intéressante à connaître, mais à ma connaissance seul AWS S3 l’a implémentée : https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjec...
      Je ne l’ai jamais utilisée, donc je ne sais pas si AWS place son propre tracker dans le .torrent produit
    • Si on crée un nouveau torrent à chaque mise à jour du dataset, le client ne devra-t-il pas retélécharger aussi les données qui n’ont pas changé ?
  • Cet outil devrait être mis à niveau pour exploiter les nouvelles fonctionnalités de BitTorrent v2
    https://blog.libtorrent.org/2020/09/bittorrent-v2/
    En particulier, les arbres de hachage de Merkle sont importants, car ils permettent les arbres de hachage par fichier et la structure des répertoires

    • Depuis que j’ai découvert BitTorrent v2, j’espère voir apparaître un index par fichier en ligne. J’aimerais pouvoir taguer, pour la plupart des gros fichiers média de mon disque, combien de copies existent actuellement dans le swarm BitTorrent
      Je pourrais alors supprimer plus facilement de gros fichiers, en sachant que je pourrai récupérer plus tard exactement la même copie. J’avais essayé quelque chose de similaire avec IPFS autrefois, mais ça n’a pas vraiment marché, et je n’arrivais pas non plus à trouver les fichiers en double
  • J’aimerais qu’il existe un BTFS capable de réparer les fichiers média « corrompus ». Par exemple, si un disque est rayé et qu’il manque une partie, ou si le média a été encodé avec de mauvais paramètres de codec, il pourrait télécharger uniquement les segments endommagés et restaurer le tout de manière transparente

    • Ce n’est pas exactement la même chose, mais ça m’a rappelé AccurateRip, que j’utilisais beaucoup à l’époque où je rippais des centaines de CD chaque année
      http://www.accuraterip.com/
    • Pourquoi ne pas plutôt utiliser un système de fichiers qui évite ce genre de problème ? Il y a ZFS, et le stockage ne coûte pas cher
    • Un autre usage serait de partager les médias une fois importés dans ma bibliothèque. Si je pouvais scanner volontairement les hash de tous les médias que je possède, et qu’un client torrent intelligent pouvait ne proposer que ces fichiers-là, ce serait d’une grande aide pour le seed de fichiers média rares
      J’efface toujours les fichiers inutiles, donc il me faudrait une forme de torrent partiel
    • Si le fichier est endommagé, comment calculer le hash pour la recherche ?
    • Ne pourrait-on pas distribuer des fichiers de parité avec les fichiers eux-mêmes, comme sur Usenet ? Usenet fonctionne presque déjà comme ça
      Je ne sais pas si une implémentation de système de fichiers NNTP fonctionne correctement, mais il y a aussi nzbfs : https://github.com/danielfullmer/nzbfs
  • Je poste ça parce que je trouve étonnant que ce ne soit pas davantage utilisé. Est-ce qu’on ne pourrait pas créer des machines virtuelles ou des systèmes d’exploitation en overlay sur BTFS ? Ça semble une piste intéressante

    • Pas plus tard que la semaine dernière, j’ai créé des images de démarrage PXE avec Nix sur mon laptop, je les ai mises sur IPFS, puis j’ai démarré via le réseau mon serveur situé dans un autre pays à travers des miroirs IPFS publics
      Au démarrage, l’initrd est monté en overlayfs en lecture seule. J’ai rendu la configuration publique : https://github.com/jhvst/nix-config
      Plus tard, je compte documenter le processus IPFS, y compris la configuration du routeur PXE, sur https://github.com/majbacka-labs/nixos.fi. Je pourrais aussi faire tourner un petit serveur de build public pour la configuration Flake, pour les personnes qui voudraient tester ce processus
    • Ce n’est pas lui-même un fournisseur d’overlay, mais uber/kraken est un « registre Docker P2P capable de distribuer des données à l’échelle du téraoctet en quelques secondes ». Il livre des images Docker à de gros clusters via le protocole BitTorrent
      https://github.com/uber/kraken
    • CVMFS est une option mature dans ce domaine, et elle est beaucoup utilisée dans la communauté de la physique pour distribuer des logiciels et des images de conteneurs. Elle permet de partager des ressources de calcul de manière simple et efficace
      https://cernvm.cern.ch/fs/
    • Je ne vois pas bien l’intérêt. Un système de fichiers en lecture seule qui télécharge les fichiers à la volée, c’est sympa, mais dans la plupart des cas ça ne semble pas très pratique
    • De temps en temps, quelqu’un réinvente le Plan 9 de Bell Labs
  • C’est un client parfait pour accéder au contenu de l’Internet Archive. Un torrent avec le web seed de l’IA est automatiquement attaché à chaque élément de l’IA. On peut l’essayer avec Big Buck Bunny
    btfs https://archive.org/download/BigBuckBunny_124/BigBuckBunny_1... mountpoint

    • Je ne connais pas la structure interne de l’IA ni celle de BitTorrent, mais quand un élément d’archive contient trop de fichiers, ils n’entrent pas tous dans le fichier torrent
      Je le vois souvent avec des packs de ROMs ou des archives de magazines. Quand un élément dépasse 1000 fichiers, le torrent ne contient généralement que les ~200 premiers
    • Une meilleure méthode est celle-ci :
      btplay https://archive.org/download/BigBuckBunny_124/…
  • Articles liés :
    BTFS – mount any .torrent file or magnet link as directory - https://news.ycombinator.com/item?id=23576063 - juin 2020 (121 commentaires)
    BitTorrent file system - https://news.ycombinator.com/item?id=10826154 - janv. 2016 (33 commentaires)

  • On pourrait aller plus loin en stockant les données dans un fichier sqlite contenant un index de recherche plein texte. On pourrait alors effectuer une recherche plein texte dans les torrents quand on en a besoin : https://github.com/bittorrent/sqltorrent

  • Discussion d’il y a 4 ans :
    https://news.ycombinator.com/item?id=23576063

  • Dans l’ancien fil de 2020 avec 121 commentaires, le commentaire le mieux classé de saurik résume très bien ce que je ressens face à cette situation : https://news.ycombinator.com/item?id=23580334
    En gros, BTFS est une version d’IPFS « un CID à la fois »
    IPFS est formidable, mais pour devenir vraiment utilisable au quotidien, il lui faut selon moi de gros progrès dans au moins trois domaines. D’abord, il ne devrait pas être nécessaire de faire tourner un proxy de nœud local. J’ai entendu dire que Brave intègre le support de WebTorrent, mais comme je n’utilise pas Brave, je ne sais pas si ce n’est que du WebTorrent de nom ou pas
    Ensuite, la latence de résolution du swarm/des pairs est pénible au point d’avoir un côté « gadget crypto web3 », et cette latence fait que la navigation rappelle l’époque des modems 14.4k
    Enfin, IPFS est excellent pour des contenus rarement modifiés mais très populaires, comme Wikipedia, des sorties de jeux ou du contenu MDN. Mais si l’on pense à parcourir un dépôt git, remplacer « tip » ou « main » par une version à jour est assez laborieux. À ma connaissance, IPNS est le seul moyen de résoudre le CID le plus récent, et le DNS est un mécanisme qui a facilement tendance à devenir l’un des nombreux éléments qui se compliquent à chaque panne
    Je sais que je me suis un peu trop étendu sur un système de fichiers autre que celui présenté, mais même si je n’installerai probablement pas BTFS, ceux que cette idée intéresse ont intérêt à lire davantage sur IPFS. Il faut simplement garder à l’esprit ses limites actuelles

  • https://github.com/anacrolix/torrent avait un pilote FUSE depuis 2013. Le projet en est maintenant aux premières étapes de sa suppression
    WebDAV, des FUSE tiers et des wrappers HTTP font tous à peu près la même chose. Ils exposent des liens magnet, des info hashes et des fichiers torrent comme s’il s’agissait d’un système de fichiers immuable. Le support de BitTorrent v2 est actuellement présent sur master