βtracker - альтернативная ветка развития YGGtracker, предоставляющая программный комплекс для автоматического трекинга и агрегации без участия модератора и ручного добавления торрентов в каталог.
Система создавалась для сети Yggdrasil, но может работать с любой другой, поддерживающей стек IPv4/IPv6 или в гибридном режиме.
Пользователю, для добавления торрентов в каталог, достаточно добавить актуальные трекеры в свой клиент (раздачу)
Система βtracker включает в себя:
Схематически, принцип работы выглядит следующим образом:
torrent client > aquatic_udp > infohash.bin < aquatic-crawler > * /preload/info-hash.torrent > β
torrent client <-----------------------| * /preload/info-hash/data |
<-------------------------------------| * /preload/.info-hash/tmp |
<-------------------------- scrape -------------------------------|
Для сборки потребуется инфраструктура Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Все компоненты удобно запускать от общего системного пользователя:
useradd -m btracker
Общая файловая база данных (которая наполняется aquatic-crawler и которую будет читать пользователь Web-UI) расположена в пространстве Веб-сервера:
mkdir -p /var/www/btracker
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
Разрешить входящие подключения к трекеру только для узлов сети Yggdrasil:
ufw allow from 0200::/7 to 302:68d0:f0d5:b88d::fdb port 6969 proto udp
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
Запуск:
При запуске, кравлер начнёт сканировать hash.bin дамп трекера и наполнять директорию, указанную в –preload, она будет использована в качестве базы данных для каталожной части / Web UI.
Для дополнительной информации, смотрите страницу wiki.
git clone https://github.com/yggverse/btracker.git cd btracker cargo build --release sudo install target/release/btracker /usr/local/bin/btracker
[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
Запуск:
systemctl enable btracker systemctl start btracker
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;
}
}
Применить настройки:
systemctl reload nginx
