世界を動かす技術を、日本語で。

HNに表示: Elixirで新しいBitTorrentトラッカーを作成しました

概要

  • ExTracker はElixir製のBitTorrentトラッカー
  • 高性能・低メモリ設計で即時利用可能
  • 多数の BEP に対応し、Dockerイメージも提供
  • セットアップが簡単で、動作確認用インスタンスも公開中
  • 開発は継続中で、フィードバックや提案も歓迎

ExTracker:Elixir製BitTorrentトラッカー概要

  • Elixir で開発されたBitTorrentトラッカー
  • 現在 開発進行中 プロジェクト(WIP)
  • extracker.dahrkael.net:6969 でテストインスタンス稼働
  • 全機能有効化済み (ライブ統計情報含む)
  • フィードバックや機能提案は Issues で受付

主な特徴

  • 高性能 :全CPUコア活用、インメモリストレージ
  • 低メモリ消費 :100万ピアあたり約200MB
  • ゼロセットアップ :起動するだけですぐ動作
  • HTTPS 対応
  • ディスクバックアップ 機能

対応BitTorrent Enhancement Proposals(BEPs)

  • 正式・稼働中BEP
    • BEP 0 :BitTorrent Protocol Specification
  • 承認済BEP
    • BEP 15 :UDP Tracker Protocol
    • BEP 23 :トラッカーのコンパクトピアリスト返却
  • ドラフトBEP
    • BEP 7 :IPv6 Tracker Extension
    • BEP 24 :トラッカーの外部IP返却
    • BEP 41 :UDP Tracker Protocol Extensions
    • BEP 48 :Scrapeプロトコル拡張(部分実装)
    • BEP 52 :BitTorrent Protocol v2
  • 未対応・計画中BEP
    • BEP 27 :プライベートトレント
    • BEP 21 :パーシャルシード拡張
    • BEP 31 :トラッカー障害時リトライ拡張
  • 対応しないBEP
    • BEP 8 :ピア難読化

その他機能

  • WebTorrent 非対応
  • Infohash ホワイト/ブラックリスト(部分実装)
  • ピア管理 (インターバル管理・クリーンアップ・BAN等:部分実装)
  • メトリクス (部分実装)
  • GeoIP対応 (統計・ピア制限:部分実装)

セットアップ方法

  • ソースコードから直接実行
    • Erlang/Elixir インストール必須
    • git clone https://github.com/Dahrkael/ExTracker.git && cd ExTracker
    • 必要に応じてconfig/runtime.exsを編集
    • MIX_ENV=prod iex -S mixで起動
  • リリースビルド
    • 公式リリースは未提供(自作可能)
    • Linux: MIX_ENV=prod mix release extracker
    • Windows: MIX_ENV=prod mix release extrackerw
    • _build/prod/rel/extracker内のファイルを使用
    • 必要に応じてreleases/{VERSION}/runtime.exsを編集
    • bin/extracker startで起動
  • Docker
    • docker run ghcr.io/dahrkael/extracker:latestで即実行
    • docker-compose 例ファイルも用意
    • 設定は 環境変数 でも可能

ライセンス・著作権

  • Apache License, Version 2.0 で配布
  • 詳細は リポジトリ内LICENSEファイル 参照
  • 著作権:Dahrkael <dahrkael at outlook dot com>

開発者からのメッセージ

  • ElixirGo 習得の一環として開発
  • 3ヶ月間 の余暇で制作
  • パブリックトラッカー としての役割を重視
  • 新規開発例が少ない 現状への挑戦
  • 今後も 機能追加・改善 を継続予定
  • 安定稼働 を重視、クラッシュなしを目指す
  • コードの大部分は 手書き (swarm_printout.exのみ自動生成)

参考・関連プロジェクト

  • aquatictorrust (近年のBitTorrentトラッカー開発例)
  • opentracker (従来型の広く使われるトラッカー)

まとめ

  • ExTracker は現代的なElixir製BitTorrentトラッカー
  • 簡単導入高性能拡張性 を両立
  • コミュニティからの 意見・協力 を歓迎

Hackerたちの意見

発売おめでとう!オープントラッカーと比べて、どんな感じで動くのか詳細教えてくれない?パフォーマンスとかめっちゃ興味あるんだよね。

すごいね!エリクサーをメインの仕事にしたいの?

エリクサー大好き!今、すごい通知エンジンを作ってるんだ。めっちゃいいよ。

いいね!プライベートなの、それともOSS?エリクサーにはもっと良い通知エンジンが必要だよね。

よくやった!いくつかのポイントだけど、IO.putsの代わりにロガーを使った方がいいよ。それとOTelも追加することを考えてみて。

お気に入りのOTelシンクは何?

これに賛成。組み込みのLogger [0]とTelemetry [1]アプリを使うだけで十分だよ。opentelemetryとか他のものも、後でメトリクスをエクスポートするためにテレメトリフックに簡単に追加できるし。 [0] https://hexdocs.pm/logger/1.18.4/Logger.html [1] https://hexdocs.pm/telemetry/readme.html

C++開発者には、Goやエリクサーが好きな人が多い気がする(自分もその一人だけど)。パフォーマンスに惹かれてC++を選ぶ人が、Goやエリクサーのマルチスレッド性能にも惹かれるんじゃないかな。すごくクールなプロジェクトだね。

いいね!いつかこれチェックしてみるよ。数年前にエリクサーで基本的なトラッカーを書いたんだけど、コードはこれだよ: https://github.com/aalin/mr_torrent

https://github.com/sergiotapia/magnetissimoをチェックしてみて。7年前くらいに人気だったやつだよ。

それはビットトレントトラッカーじゃないよ。

  • どうやって始めたの? - 他のプロジェクトを参考にした? - どれくらい時間がかかった? - qbittorrentと比べて、どのくらいの機能が動いてると思う?

それはトラッカーで、トレントクライアントじゃない。

試してみたけど、HTTPSがうまくいかなかった。コンソールには「04:43:20.160 [warning] invalid 'event' parameter: size: 6 value: "paused"」ってエラーが出まくるけど、動いてるみたい。HTTPの統計も見たかったけど、UDPでいいかな(ただし、今は無効にしてる)。

似たようなやつ: https://news.ycombinator.com/item?id=44265851 「Show HN: I wrote a BitTorrent Client from scratch」 [2025-06-13], https://github.com/piyushgupta53/go-torrent-client

いや、それはクライアントだよ。