gemlog/public/uk/btracker-bittorrent-tracker-in-rust.gmi
2025-12-24 21:54:19 +02:00

48 lines
No EOL
5.3 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# βtracker - BitTorrent агрегатор на базі Rust
> Даний матеріал писався як гайд для локальної спільноти адміністраторів альтернативних мереж, утім, я знайшов його потенційно цікавим для широкого загалу: зокрема для тих, хто бажає підняти свій торент трекер і автоматизований Веб-каталог з функцією пошуку та статистикою роздач на базі інфраструктури Rust.
βtracker (beta-tracker) - BitTorrent каталог агрегаційного типу з Веб-інтерфейсом на базі фреймворку Rocket (https://rocket.rs), що є продовженням попереднього проєкту YGGtracker але на відміну від останнього - повністю автоматизований.
Індекс тут складається на базі додаткових компонентів:
=> https://github.com/YGGverse/aquatic/tree/yggverse/crates/udp форк UDP трекера "aquatic", який генерує дамп інфо-хешів у бінарному форматі API
=> https://github.com/YGGverse/aquatic-crawler спеціально написаний кравлер "aquatic-crawler"
## Принцип роботи
Схематично, робота усієї системи зображена в README:
```
torrent client > aquatic_udp > infohash.bin < aquatic-crawler > * /preload/info-hash.torrent > β
torrent client <-----------------------| * /preload/info-hash/data |
<-------------------------------------| * /preload/.info-hash/tmp |
<-------------------------- scrape -------------------------------|
```
* на схемі βtracker є останнім оператором даних справа.
Таким чином, торент-клієнти передають дані на UDP трекер, звідки (його форк) генерує бінарний API дамп `infohash.bin` з опціональною періодичністю, який в свою чергу читає кравлер і резольвить вказані дані (мета дані торент файлів, опціонально підвантажує зображення, txt файли, логи та інші) у спільну файлову систему, звідки їх вже читає та парсить агрегатор βtracker, тим само формуючи пошуковий індекс і Web UI.
Наразі вся система є раннім прототипом, і при вдалому її тестуванні, планується створити спільну бібліотеку файлової БД, зі стандартизованим API для всіх компонентів системи, що працюють з файлами асинхронно.
## Мережі
βtracker розроблявся для мережі Yggdrasil (https://yggdrasil-network.github.io), але на відміну від YGGtracker, може без проблемно працювати з Інтернет / IPv4 включно, а також споріднених оверлейних мережах типу Mycelium (https://github.com/threefoldtech/mycelium).
## Проблеми
В рамках того, що коментарі та інша мета-інформація не є частиною стандартного словника BitTorrent:
=> https://wiki.theory.org/BitTorrentSpecification#Info_Dictionary
ці дані втрачаються при резольві байтів торент файла з інфо-хешу.
Оскільки сам інфо-хеш формує унікальність роздачі, отримати такі дані з першого зустрічного піра не варіант, навіть якщо це технічно можливо при наприклад запиті такої інформації через сокет за рамками протоколу BitTorrent. Утім, й наявних даних цілком вистачає для побудови навігації та пошуку торентів (включно з індексованим вмістом) у невеличких мережах.
## Додаткова функціональність
Так як URI сторінок торентів є унікальними для усієї мережі BitTorrent інфо-хешами, технічно, можливо реалізувати для них локальні соціальні функції: коментарі, лічильник завантажень, вподобання тощо. Але наразі така функціональність не запланована, щонайменше до першої стабільної версії усіх компонентів системи.
## Посилання
=> https://github.com/yggverse/btracker GitHub
### Дивіться також
=> rust-cross-compilation-with-cross-crate.gmi Простий спосіб крос-компіляції Rust з cross