devzone.org.ua/post/vtracker-bittorrent-ahrehator-na-bazi-rust.md
2025-11-01 14:28:20 +02:00

43 lines
No EOL
6 KiB
Markdown
Raw 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
> Даний матеріал писався як гайд для локальної [спільноти адміністраторів альтернативних мереж](https://devzone.org.ua/topic/ukrayinska-spilnota-administratoriv-alternatyvnykh-merez), утім, я знайшов його потенційно цікавим для широкого загалу: зокрема для тих, хто бажає підняти свій торент трекер і автоматизований Веб-каталог з функцією пошуку та статистикою роздач на базі інфраструктури Rust.
[βtracker](https://github.com/yggverse/btracker), _beta-tracker_ - BitTorrent каталог агрегаційного типу з Веб-інтерфейсом на базі фреймворку [Rocket](https://rocket.rs), що є продовженням попереднього проєкту [YGGtracker](https://github.com/YGGverse/YGGtracker) але на відміну від останнього - повністю автоматизований.
Індекс тут складається на базі [форку](https://github.com/YGGverse/aquatic/tree/yggverse) UDP трекера [aquatic](https://github.com/greatest-ape/aquatic/tree/master/crates/udp), що генерує дамп інфо-хешів у бінарному форматі API та спеціально написаного для нього кравлера - [aquatic-crawler](https://github.com/YGGverse/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://devzone.org.ua/post/yggdrasil-mereza-z-detsentralizovanym-routynhom), але на відміну від YGGtracker, може без проблемно працювати з Інтернет / IPv4 включно, а також споріднених оверлейних мережах типу [Mycelium](https://github.com/threefoldtech/mycelium).
## Проблеми
В рамках того, що коментарі та інша мета-інформація не є частиною стандартного [словника BitTorrent](https://wiki.theory.org/BitTorrentSpecification#Info_Dictionary), ці дані втрачаються при резольві байтів торент файла з інфо-хешу. Оскільки сам інфо-хеш формує унікальність роздачі, отримати такі дані з першого зустрічного піра не варіант, навіть якщо це технічно можливо при наприклад запиті такої інформації через сокет за рамками протоколу BitTorrent. Утім, й наявних даних цілком вистачає для побудови навігації та пошуку торентів (включно з індексованим вмістом) у невеличких мережах.
## Додаткова функціональність
Так як URI сторінок торентів є унікальними для усієї мережі BitTorrent інфо-хешами, технічно, можливо реалізувати для них локальні соціальні функції: коментарі, лічильник завантажень, вподобання тощо. Але наразі така функціональність не запланована, щонайменше до першої стабільної версії усіх компонентів системи.
## Інстанси
Поки для тестування усіх компонентів системи, функціонує один інстанс Yggdrasil:
* [http://[302:68d0:f0d5:b88d::fdb]](http://[302:68d0:f0d5:b88d::fdb]) | http://tracker.ygg ([Alfis DNS](https://devzone.org.ua/post/alfis-dns-reyestratsiia-domenu-v-blokcheyn))
UPD. днями з'явилась [реалізація](https://github.com/YGGverse/btracker-gemini) серверної частини для протоколу [Gemini](https://devzone.org.ua/post/protokol-gemini-iak-alternatyva-http) та відповідний інстанс:
* [gemini://[302:68d0:f0d5:b88d::fdb]](http://[302:68d0:f0d5:b88d::fdb]) | [gemini://tracker.ygg](gemini://tracker.ygg)