====== βtracker ====== βtracker - альтернативная ветка развития [[yggdrasil:bittorrent:yggtracker|YGGtracker]], предоставляющая программный комплекс для автоматического трекинга и агрегации без участия модератора и ручного добавления торрентов в каталог. Система создавалась для сети Yggdrasil, но может работать с любой другой, поддерживающей стек IPv4/IPv6 или в гибридном режиме.\\ Пользователю, для добавления торрентов в каталог, достаточно добавить актуальные трекеры в свой клиент (раздачу) Система βtracker включает в себя: * aquatic_udp - [[https://github.com/YGGverse/aquatic/tree/info-hash-api|форк]] UDP трекера [[https://github.com/greatest-ape/aquatic/tree/master/crates/udp|aquatic]] с поддержкой генерации бинарного дампа info-hash * [[https://github.com/yggverse/aquatic-crawler|aquatic-crawler]] - кравлер, собирающий дамп info-hash по API и загружающий контент для предпросмотра (jpeg, txt, log и тд по фильтру regex и другим настройкам) * [[https://github.com/YGGverse/btracker|βtracker ]] - веб-интерфейс для собранной файловой базы aquatic-crawler с функциями пользовательского поиска по индексу и scrape (статистика активных пиров) * [[https://github.com/YGGverse/btracker-gemini|btracker-gemini]] - опциональная реализация каталожной части для [[:gemini_protocol|протокола Gemini]] Схематически, принцип работы выглядит следующим образом: torrent client > aquatic_udp > infohash.bin < aquatic-crawler > * /preload/info-hash.torrent > β torrent client <-----------------------| * /preload/info-hash/data | <-------------------------------------| * /preload/.info-hash/tmp | <-------------------------- scrape -------------------------------| ===== Установка ===== Для сборки потребуется инфраструктура [[https://rustup.rs|Rust]]: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh * можно выбрать набор "minimal", требующий меньше дискового пространства Все компоненты удобно запускать от общего системного пользователя: useradd -m btracker Общая файловая база данных (которая наполняется aquatic-crawler и которую будет читать пользователь Web-UI) расположена в пространстве Веб-сервера: mkdir -p /var/www/btracker ==== aquatic_udp ==== git clone https://github.com/YGGverse/aquatic.git cd aquatic git checkout info-hash-api cargo build --release -p aquatic_udp sudo install target/release/aquatic_udp /usr/local/bin/aquatic_udp #.. [network] # слушаем соединения пиров на указанном интерфейсе IPv6 use_ipv4 = false use_ipv6 = true address_ipv6 = "[302:68d0:f0d5:b88d::fdb]:6969" set_only_ipv6 = true [statistics] # включить дамп info-hash write_bin_to_file = true # куда сохранять дамп info-hash (для адресов IPv6) bin_info_hash_ipv6_file_path = "/path/to/hash.bin" #.. [Unit] After=network-online.target Wants=network-online.target [Service] Type=simple User=btracker Group=btracker # если Yggdrasil или другой сервис стартует с задержкой (можно указать в After) # ExecStartPre=/bin/sleep 10s ExecStart=/usr/local/bin/aquatic_udp -c /home/btracker/aquatic_udp.toml # StandardOutput=file:///path/to/aquatic_udp/debug.log # StandardError=file:///path/to/aquatic_udp/error.log [Install] WantedBy=multi-user.target * systemctl enable aquatic-udp * systemctl start aquatic-udp Разрешить входящие подключения к трекеру только для узлов сети Yggdrasil: ufw allow from 0200::/7 to 302:68d0:f0d5:b88d::fdb port 6969 proto udp * заменить "302:68d0:f0d5:b88d::fdb" на актуальный адрес, или указать "any" ==== aquatic-crawler ==== git clone https://github.com/YGGverse/aquatic-crawler.git cd aquatic-crawler cargo build --release sudo install target/release/aquatic-crawler /usr/local/bin/aquatic-crawler [Unit] After=network.target Wants=network.target [Service] Type=simple User=btracker Group=btracker # Количество нод, # требуется для инициализации раздач, содержащих большое количество файлов # в связи с текущей реализацией librqbit - в частности, при возникновении ошибки: # "Error opening '/path/to/file' in read/write mode." LimitNOFILE=65536 # настройки логирования # Environment="RUST_LOG=trace" Environment="RUST_LOG=aquatic_crawler=warn" Environment="NO_COLOR=1" # таймер запуска, значение может зависеть от других служб, например сервиса Yggdrasil # ExecStartPre=/bin/sleep 15 ExecStart=/usr/local/bin/aquatic-crawler\ # путь к файлу hash.bin (генерируемого aquatic_udp) --infohash=/path/to/hash.bin\ # адрес трекера для получения данных раздачи от активных пиров (используется сервер aquatic_udp) # * может быть несколько трекеров, для каждого указывается отдельный аргумент --tracker=udp://[302:68d0:f0d5:b88d::fdb]:6969\ # куда загружать данные (например картинки для предпросмотра в каталоге btracker) # в большинстве случаев, это публичное пространство /var/www/... --preload=/var/www/btracker/public\ # опционально: ограничение размера файлов (в байтах) --preload-max-filesize=10000000\ # опционально: ограничение количества файлов --preload-max-filecount=5\ # опционально: условие filename, при котором файл будет сохранён # в данном случае, нужны изображения для предпросмотра и текстовые файлы для дополнительной индексации поиска --preload-regex="\.(png|gif|jpeg|jpg|webp|svg|log|nfo|txt)$" # куда сохранять журнал # /var/log или /home/btracker StandardOutput=file:///path/to/debug.log StandardError=file:///path/to/error.log [Install] WantedBy=multi-user.target * приватность: ограничить коммуникацию librqbit посредством PEX, можно по диапазону IP: %%--blocklist=file:///path/to/blocklist.txt%% * все доступные опции: %%aquatic-crawler --help%% Запуск: * %%systemctl enable aquatic-crawler%% * %%systemctl start aquatic-crawler%% При запуске, кравлер начнёт сканировать hash.bin дамп трекера и наполнять директорию, указанную в --preload, она будет использована в качестве базы данных для каталожной части / Web UI. Для дополнительной информации, смотрите страницу [[https://github.com/YGGverse/aquatic-crawler/wiki|wiki]]. ==== btracker ==== git clone https://github.com/yggverse/btracker.git cd btracker cargo build --release sudo install target/release/btracker /usr/local/bin/btracker * в связи с текущей [[https://rocket.rs/guide/v0.5/deploying/|реализацией шаблонизатора]], необходимо скопировать директории %%public%% и %%templates%% в пространство %%WorkingDirectory%% (см. настройки systemd) [Unit] After=network.target Wants=network.target [Service] Type=simple User=btracker Group=btracker # реализация фреймворка Rocket, требует наличия рабочей директории WorkingDirectory=/var/www/btracker ExecStart=/usr/local/bin/btracker\ # опционально: заголовок каталога (стандартно βtracker) # --title="Yggdrasil-only BitTorrent tracker"\ # опционально: описание каталога (также отображается в title) --description="Yggdrasil-only BitTorrent tracker"\ # локальный порт (для прокси nginx) --port=1234\ # директория с данными aquatic-crawler --public=/var/www/btracker/public\ # опционально: трекер для запросов статистики пиров (scrape) --scrape=udp://[302:68d0:f0d5:b88d::fdb]:6969\ # опционально: трекер (или трекеры) для анонса --tracker=udp://[302:68d0:f0d5:b88d::fdb]:6969\ --tracker=udp://tracker.ygg:6969 # реализация Rocket журналирует сюда события 404, временно отключено # https://github.com/rwf2/Rocket/issues/2951 # StandardOutput=file:/path/to/debug.log StandardOutput=null StandardError=file:///path/to/error.log [Install] WantedBy=multi-user.target * доступные опции: %%btracker --help%% Запуск: systemctl enable btracker systemctl start btracker === nginx === server { listen 80; location / { proxy_pass http://127.0.0.1:1234; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; } } * см. также [[https://github.com/YGGverse/btracker/wiki/Nginx#cache|вариант с кешированием статики]] Применить настройки: systemctl reload nginx ===== Ссылки ===== * [[http://[302:68d0:f0d5:b88d::fdb]]] | [[http://tracker.ygg]] - Web UI (Yggdrasil-only) * [[gemini://[302:68d0:f0d5:b88d::fdb]]] | [[gemini://tracker.ygg]] - версия для протокола Gemini * %%udp://[302:68d0:f0d5:b88d::fdb]:6969%% | %%udp://tracker.ygg:6969%% - трекер ~~DISCUSSION~~