3 ポイント 投稿者 GN⁺ 2024-04-17 | 1件のコメント | WhatsAppで共有
  • BTFS.torrentファイルやmagnet linkを、ファイルツリー内の読み取り専用ディレクトリのようにマウントして使うBitTorrentファイルシステム
  • ファイル内容はアプリケーションが読み取るときにオンデマンドでダウンロードされ、lscatcpのような一般的なツールが期待どおりに動作する
  • vlcmplayerのようなアプリケーションも変更なしで動作できるため、Torrentコンテンツを通常のファイルのように扱える
  • Debian/Ubuntu、Arch Linux、Gentoo、Fedora、Fedora OSTree、OpenSUSE、macOSでのパッケージインストール方法を提供している
  • Linuxの依存関係はfuse3libtorrentlibcurlで、ソースビルドはautoreconfconfiguremakeの流れを使う

BTFSの機能

  • BTFS.torrentファイルまたはmagnet linkをマウントし、ファイルツリー内の読み取り専用ディレクトリのように使えるようにする
  • ファイル内容はアプリケーションが実際に読み取るときにオンデマンドダウンロードされる
  • 一般的なファイルシステムツールがそのまま動作する
    • ls
    • cat
    • cp
  • アプリケーションも変更なしで使用できる
    • vlc
    • mplayer

基本的な使用フロー

  • マウントディレクトリを作成してTorrentファイルを接続したあと、ディレクトリ内のファイルを通常のファイルのように実行する
$ mkdir mnt
$ btfs video.torrent mnt
$ cd mnt
$ vlc video.mp4
  • アンマウントと終了はfusermountで行う
$ fusermount -u mnt

パッケージインストール

  • Debian/Ubuntuではapt-getでインストールする
# apt-get install btfs
  • Arch Linuxではpacmanでインストールする
# pacman -S btfs
  • Gentooではemergeでインストールする
# emerge -av btfs
  • Fedoraではdnffuse-btfsパッケージをインストールする
# dnf install fuse-btfs
  • Fedora OSTreeではrpm-ostreefuse-btfsをインストールする
$ rpm-ostree install fuse-btfs
  • OpenSUSEではzypperでインストールする
# zypper install btfs
  • macOSではbrewを使う
$ brew install btfs

Linuxの依存関係

  • Linuxで必要な依存関係は次のとおり
    • fuse3: Ubuntu 22.04ではfuse3
    • libtorrent: Ubuntu 22.04ではlibtorrent-rasterbar8
    • libcurl: Ubuntu 22.04ではlibcurl4

ソースビルド

  • 最近のDebian/Ubuntuでは、ビルド依存関係をインストールしたあとリポジトリをクローンし、autoreconfconfiguremakeを実行する
$ 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
  • インストールまで行う場合はmake installを追加で実行する
$ make install
  • macOSでのビルドはbrewで依存関係をインストールしたあと、同じビルドフローを使う
$ 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
  • macOSでもインストールが必要ならmake installを実行する
$ make install

1件のコメント

 
GN⁺ 2024-04-17
Hacker Newsの意見
  • これと対になるサーバープログラムがあるとよさそう。Torrentファイル生成器、トラッカー、単純なファイルサーバーの役割を兼ねるようなもの
    大きな組織なら、サーバーに膨大な公開データを置き、データが変わるたびにTorrentを作り、.torrentファイルはHTTPで提供しつつトラッカーとしても動かせそう。FUSEクライアント側には、サーバーの新しいTorrentを検知して再ロード/マウントする簡単なロジックをラップすればよい
    ずっと前に銀行向けのLinuxディストリビューションを作ったことがある。Ubuntu NetBootベースで支店デスクトップ用の最小パッケージだけを入れ、支店にはサーバーがなかったのでディストリビューションが自己シードしていた。wake-on-lanとPXEだけをスイッチに設定しておけば、1台から建物内の数百台をかなり短時間で複製でき、新しい複製もシードになれた
    内部的にはnginxでカスタムUbuntuリポジトリを提供し、tftp/inetdとwackamoleを動かしていた。マシンがインストールされると「サーバー」からTorrentを受け取ってtransmissionに追加し、完了後はそのマシンもシードになってwackamole、inetd、nginx、trackerなどを起動した。最初は10台を安定してシードし、全台が立ち上がったらさらに多くのマシンを起こす、という流れだった
    数百の銀行支店にわたり数週間で8000台へイメージを配布したが、遅延の大半は変更管理と段階的な展開計画によるものだった。実際に一番難しかったのは、既存のLinuxビルドを通じて各支店に最初のシードをダウンロードさせ、そのうち1台をシードマシンとして使わせることだった。350以上の支店で貧弱な回線、一部は256kbps ISDNで進めた

    • 関心を持つかもしれない機能だが、知る限りAWS S3だけが実装しているようだ: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjec...
      実際に使ったことはないので、AWSが生成される.torrentに自前のトラッカーを入れているかは分からない
    • データセットが更新されるたびに新しいTorrentを作ると、クライアントは変わっていないデータまで再転送されることにならない?
  • このツールはBitTorrent v2の新機能を使うようアップグレードされるべき
    https://blog.libtorrent.org/2020/09/bittorrent-v2/
    特に、ファイルごとのハッシュツリーとディレクトリ構造を可能にするマークルハッシュツリーが重要

    • BitTorrent v2を知って以来、オンラインにファイル単位のインデックスができることを期待してきた。自分のドライブにある大容量メディアファイルの大半について、現在BitTorrentスウォーム上にコピーが何個あるかタグ付けできるといい
      そうすれば、後で同一のコピーを簡単に再取得できると分かって、大きなファイルをもっと気軽に削除できる。以前IPFSで似たことを試そうとしたがうまくいかず、重複ファイルも見つけられなかった
  • 「破損した」メディアファイルを直してくれるBTFSがあるといい。たとえばディスクに傷がついて一部が欠けていたり、自分が選んだコーデックオプションがいまいちだったメディアなら、壊れた部分だけをダウンロードして滑らかに復旧してくれるようなもの

    • まったく同じではないが、昔、毎年何百枚ものCDをリッピングしていた頃によく使われていたAccurateRipを思い出す
      http://www.accuraterip.com/
    • なぜそういうことを維持してくれるファイルシステムを使わないのか? ZFSもあるし、ストレージも安い
    • もう一つの用途は、メディアを自分のライブラリに取り込んだあと共有すること。自分が持っているすべてのメディアのハッシュを自発的にスキャンし、賢いTorrentクライアントがそれらのファイルだけを提供できるなら、希少なメディアファイルのシードに大いに役立つ
      不要なファイルは常に削除しているので、部分Torrentの形が必要になる
    • ファイルが壊れているのに、照合用のハッシュはどう計算するのか?
    • Usenetでやるように、実ファイルと一緒にパリティファイルを配布すればいいのでは? Usenet自体がほぼそういう方式でもある
      NNTPファイルシステム実装がちゃんと動くのかは分からないが、nzbfsもある: https://github.com/danielfullmer/nzbfs
  • これがもっと使われていないのが不思議で投稿した。仮想マシンやOSをBTFS上のオーバーレイとして作れるのでは? 面白い方向に見える

    • つい先週、ノートPCでNixを使ってPXEブートイメージを作り、それらをIPFSに上げてから、別の国にある自分のサーバーを公開IPFSミラー経由でネットワークブートした
      起動時、initrdは読み取り専用のoverlayfsとしてマウントされる。設定は公開している: https://github.com/jhvst/nix-config
      いずれPXEルーター設定を含むIPFS手順のドキュメントをhttps://github.com/majbacka-labs/nixos.fiに書く予定。このプロセスを試してみたい人向けに、Flake設定用の小さな公開ビルドサーバーも運用できる
    • オーバーレイ提供者そのものではないが、uber/krakenは「数秒でTB単位のデータを配布できるP2P Dockerレジストリ」。BitTorrentプロトコルで大規模クラスタにDockerイメージを届ける
      https://github.com/uber/kraken
    • CVMFSはこの領域で成熟した選択肢で、物理学コミュニティでソフトウェアやコンテナイメージの配布に広く使われている。計算資源をシンプルかつ効率的に共有できるようにしてくれる
      https://cernvm.cern.ch/fs/
    • 要点がよく分からない。その場でファイルをダウンロードする読み取り専用ファイルシステムは格好いいが、ほとんどの状況では実用的に聞こえない
    • 時々、誰かがBell LabsのPlan 9を再発明する
  • Internet Archive のコンテンツにアクセスするのに最適なクライアント。IA の各アイテムには、IA の Web シードが入った torrent が自動的に付く。Big Buck Bunny で試せる
    btfs https://archive.org/download/BigBuckBunny_124/BigBuckBunny_1... mountpoint

    • IA の内部構造や BitTorrent の仕組みは知らないが、アーカイブ項目が多すぎると torrent ファイルにすべては入らない
      ROM の詰め合わせや雑誌アーカイブでよく見る。項目が 1000 個を超えると、torrent には通常、最初の約 200 個しか入っていない
    • よりよい方法はこれ:
      btplay https://archive.org/download/BigBuckBunny_124/…
  • 関連記事:
    BTFS – mount any .torrent file or magnet link as directory - https://news.ycombinator.com/item?id=23576063 - June 2020 (121 comments)
    BitTorrent file system - https://news.ycombinator.com/item?id=10826154 - Jan 2016 (33 comments)

  • さらに、データを全文検索インデックス入りの sqlite ファイルとして保存できるとよい。そうすれば、必要なときに torrent を全文検索できる: https://github.com/bittorrent/sqltorrent

  • 4 年前の議論:
    https://news.ycombinator.com/item?id=23576063

  • 2020 年の 121 コメントあった以前のスレッドで、saurik のトップコメントがこの状況に対する自分の気持ちをよく要約している: https://news.ycombinator.com/item?id=23580334
    BTFS は IPFS の「一度に CID 1 つ」版だということ
    IPFS は素晴らしいが、日常的に使えるようになるには、少なくとも 3 つの領域で大きな進展が必要だと思う。第一に、ローカルノードのプロキシを動かさなくてよいこと。Brave には WebTorrent 対応が組み込まれていると聞いたが、Brave を使っていないので、名前だけ WebTorrent なのかどうかは分からない
    第二に、スウォーム/ピアの解決レイテンシが「web3 暗号資産のお遊び」と同じように苦痛で、その遅延のせいでブラウズが昔の 14.4k モデム時代のように感じられる
    第三に、IPFS は Wikipedia、ゲームのリリース、MDN コンテンツのように、めったに変わらないが非常に人気のあるコンテンツには優れている。しかし git リポジトリを閲覧することを考えると、「tip」や「main」を更新版に切り替えるのはかなり面倒だ。私の知る限り、最新の CID を解決する方法は IPNS しかなく、DNS は障害のたびに絡み合う複数の要素の 1 つになりやすい仕組みだ
    投稿されたファイルシステムではない別のファイルシステムについて長々と書きすぎたのは分かっているが、BTFS は自分ではインストールしなさそうな一方で、このアイデアに興味がある人は IPFS をさらに読んでみる価値がある。ただし、現時点の制約は念頭に置いたほうがよい

  • https://github.com/anacrolix/torrent には 2013 年から FUSE ドライバがあった。現在はそれを削除する初期段階にある
    WebDAV、サードパーティー FUSE、HTTP ラッパーはいずれも似たようなことをしている。マグネットリンク、情報ハッシュ、torrent ファイルを不変ファイルシステムのように提供する方式だ。BitTorrent v2 対応は現在 master に入っている