3 Punkte von GN⁺ 2024-04-17 | 1 Kommentare | Auf WhatsApp teilen
  • BTFS ist ein BitTorrent-Dateisystem, das .torrent-Dateien oder magnet links als schreibgeschützte Verzeichnisse in einem Dateibaum einbindet
  • Dateiinhalte werden On-Demand heruntergeladen, wenn Anwendungen sie lesen, und normale Tools wie ls, cat und cp funktionieren wie erwartet
  • Auch Anwendungen wie vlc und mplayer können ohne Änderungen verwendet werden, sodass sich Torrent-Inhalte wie normale Dateien behandeln lassen
  • Es werden Paket-Installationsmethoden für Debian/Ubuntu, Arch Linux, Gentoo, Fedora, Fedora OSTree, OpenSUSE und macOS bereitgestellt
  • Die Linux-Abhängigkeiten sind fuse3, libtorrent und libcurl, und der Build aus dem Quellcode verwendet den Ablauf autoreconf, configure, make

Was BTFS macht

  • BTFS bindet .torrent-Dateien oder magnet links ein, damit sie als schreibgeschützte Verzeichnisse in einem Dateibaum genutzt werden können
  • Dateiinhalte werden On-Demand heruntergeladen, wenn Anwendungen sie tatsächlich lesen
  • Normale Dateisystem-Tools funktionieren unverändert
    • ls
    • cat
    • cp
  • Auch Anwendungen lassen sich ohne Änderungen verwenden
    • vlc
    • mplayer

Grundlegender Nutzungsablauf

  • Ein Mount-Verzeichnis wird erstellt, die Torrent-Datei wird eingebunden, und anschließend werden die Dateien im Verzeichnis wie normale Dateien ausgeführt
$ mkdir mnt
$ btfs video.torrent mnt
$ cd mnt
$ vlc video.mp4
  • Das Aushängen und Beenden erfolgt mit fusermount
$ fusermount -u mnt

Paketinstallation

  • Unter Debian/Ubuntu erfolgt die Installation mit apt-get
# apt-get install btfs
  • Unter Arch Linux erfolgt die Installation mit pacman
# pacman -S btfs
  • Unter Gentoo erfolgt die Installation mit emerge
# emerge -av btfs
  • Unter Fedora wird das Paket fuse-btfs mit dnf installiert
# dnf install fuse-btfs
  • Unter Fedora OSTree wird fuse-btfs mit rpm-ostree installiert
$ rpm-ostree install fuse-btfs
  • Unter OpenSUSE erfolgt die Installation mit zypper
# zypper install btfs
  • Unter macOS wird brew verwendet
$ brew install btfs

Linux-Abhängigkeiten

  • Unter Linux werden die folgenden Abhängigkeiten benötigt
    • fuse3: unter Ubuntu 22.04 fuse3
    • libtorrent: unter Ubuntu 22.04 libtorrent-rasterbar8
    • libcurl: unter Ubuntu 22.04 libcurl4

Build aus dem Quellcode

  • Unter aktuellen Debian/Ubuntu-Versionen werden zunächst die Build-Abhängigkeiten installiert, dann das Repository geklont und autoreconf, configure und make ausgeführt
$ 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
  • Wenn auch installiert werden soll, wird zusätzlich make install ausgeführt
$ make install
  • Für den Build unter macOS werden die Abhängigkeiten mit brew installiert, danach wird derselbe Build-Ablauf verwendet
$ 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
  • Wenn unter macOS ebenfalls eine Installation nötig ist, wird make install ausgeführt
$ make install

1 Kommentare

 
GN⁺ 2024-04-17
Meinungen auf Hacker News
  • Schön wäre ein dazu passendes Serverprogramm. Also eines, das zugleich als Torrent-Datei-Generator, Tracker und einfacher Dateiserver dient.
    In großen Organisationen könnte man riesige Mengen öffentlicher Daten auf einen Server legen, bei jeder Änderung der Daten Torrents erstellen, die .torrent-Dateien per HTTP ausliefern und zugleich als Tracker fungieren. Um den FUSE-Client müsste man nur einfache Logik legen, die neue Torrents auf dem Server erkennt und sie neu lädt bzw. mountet.
    Vor langer Zeit habe ich einmal eine Linux-Distribution für Banken gebaut. Sie basierte auf Ubuntu NetBoot und enthielt nur die Minimalpakete für Desktop-Rechner in Filialen; da es in den Filialen keine Server gab, hat die Distribution sich selbst geseedet. Wenn auf dem Switch nur Wake-on-LAN und PXE konfiguriert waren, konnte man mit einem einzigen Rechner in recht kurzer Zeit Hunderte Maschinen im Gebäude klonen, und die neuen Klone konnten ebenfalls seeden.
    Intern stellten wir ein angepasstes Ubuntu-Repository über nginx bereit und ließen tftp/inetd sowie wackamole laufen. Sobald eine Maschine installiert war, lud sie vom „Server“ den Torrent herunter und fügte ihn transmission hinzu; nach Abschluss wurde auch diese Maschine zum Seed und startete wackamole, inetd, nginx, den Tracker usw. Anfangs wurden stabil 10 Maschinen geseedet, und sobald alle oben waren, weckten wir weitere Maschinen auf.
    Über Hunderte Bankfilialen hinweg haben wir innerhalb weniger Wochen Images auf 8000 Maschinen ausgerollt; die meisten Verzögerungen lagen an Change Management und dem Plan für den gestaffelten Rollout. Am schwierigsten war tatsächlich, über den vorhandenen Linux-Build den ersten Seed in jede Filiale herunterzuladen und eine der Maschinen dort als Seed-Maschine zu nutzen. In mehr als 350 Filialen lief das über knappe Leitungen, teils über 256-kbps-ISDN.

    • Eine Funktion, die hier interessant sein könnte, aber meines Wissens nur von AWS S3 implementiert wurde: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjec...
      Ich habe sie nie tatsächlich benutzt, daher weiß ich nicht, ob AWS einen eigenen Tracker in die resultierende .torrent einträgt.
    • Wenn bei jeder Aktualisierung eines Datensatzes ein neuer Torrent erstellt wird, müssen Clients dann nicht auch unveränderte Daten erneut übertragen bekommen?
  • Dieses Tool sollte aktualisiert werden, um die neuen Funktionen von BitTorrent v2 zu nutzen.
    https://blog.libtorrent.org/2020/09/bittorrent-v2/
    Besonders wichtig sind die Merkle-Hash-Bäume, die Hash-Bäume pro Datei und Verzeichnisstrukturen ermöglichen.

    • Seit ich von BitTorrent v2 erfahren habe, hoffe ich auf einen Online-Index pro Datei. Es wäre schön, die meisten großen Mediendateien auf meinem Laufwerk damit markieren zu können, wie viele Kopien davon derzeit in BitTorrent-Swarms existieren.
      Dann könnte ich große Dateien leichter löschen, weil ich weiß, dass ich später dieselbe Kopie problemlos erneut bekommen kann. Ich habe früher versucht, etwas Ähnliches mit IPFS zu machen, aber das hat nicht gut funktioniert und doppelte Dateien wurden auch nicht gefunden.
  • Ich hätte gern ein BTFS, das „beschädigte“ Mediendateien repariert. Wenn etwa eine Disc Kratzer hat und Teile fehlen oder die von mir gewählten Codec-Optionen schlecht waren, sollte es nur die beschädigten Teile herunterladen und die Datei nahtlos wiederherstellen.

    • Nicht ganz dasselbe, aber es erinnert mich an AccurateRip, das ich früher viel benutzt habe, als ich jedes Jahr Hunderte CDs gerippt habe.
      http://www.accuraterip.com/
    • Warum nicht ein Dateisystem verwenden, das so etwas selbst absichert? Es gibt ZFS, und Speicher ist günstig.
    • Ein weiterer Anwendungsfall wäre, Medien nach dem Import in meine Bibliothek zu teilen. Wenn ich freiwillig die Hashes aller Medien scannen könnte, die ich besitze, und ein smarter Torrent-Client genau diese Dateien bereitstellen könnte, würde das beim Seeden seltener Mediendateien sehr helfen.
      Da ich unnötige Dateien immer lösche, bräuchte es dafür eine Art partiellen Torrent.
    • Wenn die Datei kaputt ist, wie willst du dann den Hash zum Nachschlagen berechnen?
    • Könnte man nicht wie im Usenet zusammen mit der eigentlichen Datei Paritätsdateien verteilen? Usenet selbst funktioniert ja fast genau so.
      Ob eine NNTP-Dateisystem-Implementierung richtig funktioniert, weiß ich nicht, aber es gibt auch nzbfs: https://github.com/danielfullmer/nzbfs
  • Ich poste das, weil ich überrascht bin, dass es nicht häufiger genutzt wird. Könnte man virtuelle Maschinen oder Betriebssysteme nicht als Overlay auf BTFS bauen? Das wirkt wie eine interessante Richtung.

    • Erst letzte Woche habe ich auf meinem Laptop mit Nix PXE-Boot-Images gebaut, sie in IPFS hochgeladen und dann meinen Server in einem anderen Land über öffentliche IPFS-Mirrors per Netzwerk gebootet.
      Beim Booten wird die initrd als schreibgeschütztes overlayfs gemountet. Die Konfiguration habe ich veröffentlicht: https://github.com/jhvst/nix-config
      Später will ich den IPFS-Ablauf inklusive PXE-Router-Konfiguration unter https://github.com/majbacka-labs/nixos.fi dokumentieren. Für Leute, die den Prozess ausprobieren möchten, könnte ich auch einen kleinen öffentlichen Build-Server für die Flake-Konfiguration betreiben.
    • Es ist zwar selbst kein Overlay-Anbieter, aber uber/kraken ist eine „P2P-Docker-Registry, die TB an Daten in Sekunden verteilen kann“. Sie liefert Docker-Images per BitTorrent-Protokoll an große Cluster aus.
      https://github.com/uber/kraken
    • CVMFS ist in diesem Bereich eine ausgereifte Option und wird in der Physik-Community häufig genutzt, um Software und Container-Images zu verteilen. Es ermöglicht eine einfache und effiziente gemeinsame Nutzung von Rechenressourcen.
      https://cernvm.cern.ch/fs/
    • Ich verstehe den Punkt nicht so recht. Ein schreibgeschütztes Dateisystem, das Dateien on the fly herunterlädt, ist cool, klingt aber in den meisten Situationen nicht praktikabel.
    • Hin und wieder erfindet jemand Plan 9 von Bell Labs neu.
  • Perfekter Client, um auf Inhalte des Internet Archive zuzugreifen. An jedes IA-Item wird automatisch ein Torrent mit den Web-Seeds von IA angehängt. Das lässt sich mit Big Buck Bunny ausprobieren
    btfs https://archive.org/download/BigBuckBunny_124/BigBuckBunny_1... mountpoint

    • Ich kenne die Interna von IA und die BitTorrent-Struktur nicht, aber wenn ein Archive-Item zu viele Einträge hat, landen sie nicht alle in der Torrent-Datei
      Das sieht man oft bei ROM-Sammlungen oder Zeitschriftenarchiven. Wenn ein Item mehr als 1000 Dateien hat, enthält der Torrent normalerweise nur die ersten etwa 200
    • Besser geht es so:
      btplay https://archive.org/download/BigBuckBunny_124/…
  • Verwandte Beiträge:
    BTFS – mount any .torrent file or magnet link as directory - https://news.ycombinator.com/item?id=23576063 - Juni 2020 (121 Kommentare)
    BitTorrent file system - https://news.ycombinator.com/item?id=10826154 - Jan. 2016 (33 Kommentare)

  • Noch besser wäre es, die Daten als sqlite-Datei mit Volltextsuchindex zu speichern. Dann könnte man Torrents bei Bedarf per Volltextsuche durchsuchen: https://github.com/bittorrent/sqltorrent

  • Diskussion von vor 4 Jahren:
    https://news.ycombinator.com/item?id=23576063

  • Der Top-Level-Kommentar von saurik im früheren Thread von 2020 mit 121 Kommentaren fasst mein Gefühl zu dieser Situation gut zusammen: https://news.ycombinator.com/item?id=23580334
    BTFS ist im Grunde die „ein CID auf einmal“-Version von IPFS
    IPFS ist großartig, aber damit es im Alltag brauchbar wird, braucht es meiner Ansicht nach in mindestens drei Bereichen große Fortschritte. Erstens sollte man keinen lokalen Node-Proxy betreiben müssen. Ich habe gehört, dass Brave WebTorrent-Support eingebaut hat, aber da ich Brave nicht nutze, weiß ich nicht, ob es nur dem Namen nach WebTorrent ist oder nicht
    Zweitens ist die Latenz beim Auflösen von Swarms/Peers auf eine Art schmerzhaft, die an „web3-Krypto-Spielereien“ erinnert, und diese Verzögerung lässt das Browsen wie in den alten Zeiten von 14,4k-Modems wirken
    Drittens ist IPFS hervorragend für Inhalte, die sich selten ändern, aber sehr beliebt sind, wie Wikipedia, Game-Releases oder MDN-Inhalte. Wenn man sich aber vorstellt, ein git-Repository zu durchsuchen, ist es ziemlich umständlich, „tip“ oder „main“ auf eine aktualisierte Version umzubiegen. Soweit ich weiß, ist IPNS die einzige Möglichkeit, den neuesten CID aufzulösen, und DNS ist ein Mechanismus, der bei Ausfällen leicht zu einem der vielen miteinander verhedderten Faktoren wird
    Mir ist klar, dass ich hier übermäßig lang über ein anderes Dateisystem als das eingereichte geschrieben habe, aber während ich BTFS wohl nicht installieren werde, lohnt es sich für Leute, die an dieser Idee interessiert sind, mehr über IPFS zu lesen. Man sollte nur die derzeitigen Grenzen im Blick behalten

  • https://github.com/anacrolix/torrent hatte seit 2013 einen FUSE-Treiber. Der wird derzeit in einer frühen Phase entfernt
    WebDAV, FUSE von Drittanbietern und HTTP-Wrapper machen alle etwas Ähnliches: Sie stellen Magnet-Links, Info-Hashes und Torrent-Dateien wie ein unveränderliches Dateisystem bereit. Support für BitTorrent v2 ist derzeit in master enthalten