initial commit

This commit is contained in:
postscriptum 2025-09-11 12:43:12 +03:00
commit 259fee630b
127 changed files with 7811 additions and 0 deletions

View file

@ -0,0 +1,55 @@
# β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 інфо-хешами, технічно, можливо реалізувати для них локальні соціальні функції: коментарі, лічильник завантажень, вподобання тощо. Але наразі така функціональність не запланована, щонайменше до першої стабільної версії усіх компонентів системи.
## Інстанси
Поки, для тестування усіх компонентів системи, функціонує один інстанс Yggdrasil:
=> http://[302:68d0:f0d5:b88d::fdb]
=> http://tracker.ygg Alfis DNS
UPD. днями з'явилась реалізація серверної частини для протоколу Gemini та відповідний інстанс:
=> https://github.com/YGGverse/btracker-gemini
=> gemini://[302:68d0:f0d5:b88d::fdb]
=> gemini://tracker.ygg Alfis DNS
## Посилання
=> https://github.com/yggverse/btracker GitHub