[[βtracker]]
 

βtracker

βtracker - альтернативная ветка развития YGGtracker, предоставляющая программный комплекс для автоматического трекинга и агрегации без участия модератора и ручного добавления торрентов в каталог.

Система создавалась для сети Yggdrasil, но может работать с любой другой, поддерживающей стек IPv4/IPv6 или в гибридном режиме.
Пользователю, для добавления торрентов в каталог, достаточно добавить актуальные трекеры в свой клиент (раздачу)

Система βtracker включает в себя:

  • aquatic_udp - форк UDP трекера aquatic с поддержкой генерации бинарного дампа info-hash
  • aquatic-crawler - кравлер, собирающий дамп info-hash по API и загружающий контент для предпросмотра (jpeg, txt, log и тд по фильтру regex и другим настройкам)
  • βtracker - веб-интерфейс для собранной файловой базы aquatic-crawler с функциями пользовательского поиска по индексу и scrape (статистика активных пиров)

Схематически, принцип работы выглядит следующим образом:

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
  • можно выбрать набор «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
/home/btracker/aquatic_udp.toml
#..

[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"

#..
/etc/systemd/system/aquatic-udp.service
[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
/etc/systemd/system/aquatic-crawler.service
[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.

Для дополнительной информации, смотрите страницу wiki.

btracker

git clone https://github.com/yggverse/btracker.git
cd btracker
cargo build --release
sudo install target/release/btracker /usr/local/bin/btracker
  • в связи с текущей реализацией шаблонизатора, необходимо скопировать директории public и templates в пространство WorkingDirectory (см. настройки systemd)
/etc/systemd/system/btracker.service
[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

/etc/systemd/system/btracker.service
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

Ссылки

    • gemini://[302:68d0:f0d5:b88d::fdb] | gemini://tracker.ygg - версия для протокола Gemini
    • udp://[302:68d0:f0d5:b88d::fdb]:6969 | udp://tracker.ygg:6969 - трекер
Только авторизованные участники могут оставлять комментарии.
yggdrasil/bittorrent/btracker.txt · Последнее изменение: 2025/10/06 20:30 — p.s.
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki