mirror of
https://codeberg.org/postscriptum/devzone.org.ua.git
synced 2026-02-19 14:12:39 +00:00
43 lines
No EOL
6 KiB
Markdown
43 lines
No EOL
6 KiB
Markdown
# β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) |