mirror of
https://codeberg.org/postscriptum/gemlog.git
synced 2026-02-18 22:12:40 +00:00
initial commit
This commit is contained in:
commit
259fee630b
127 changed files with 7811 additions and 0 deletions
226
public/uk/install-aquatic-open-tracker-on-linux.gmi
Normal file
226
public/uk/install-aquatic-open-tracker-on-linux.gmi
Normal file
|
|
@ -0,0 +1,226 @@
|
|||
# Встановлення BitTorrent трекера Aquatic в Linux
|
||||
|
||||
Давно збирався підняти BitTorrent трекер відкритого типу для мережі Yggdrasil.
|
||||
|
||||
Детальніше про мережу Yggdrasil читайте тут:
|
||||
=> yggdrasil-is-network-with-distributed-routing.gmi Yggdrasil - мережа з децентралізованою маршрутизацією
|
||||
|
||||
Вже існує відомий сервер з 15-річною історією розробки OpenTracker:
|
||||
=> https://erdgeist.org/arts/software/opentracker
|
||||
|
||||
Але останнім часом, я надаю перевагу більш сучасній мові Rust, тим паче що потім планую реалізувати цією мовою додатковий веб-агрегатор на базі кешованих трекером інфо-хешів у зв'язці з бібліотекою rqbit:
|
||||
=> https://github.com/ikatson/rqbit
|
||||
|
||||
Трохи полиставши результати пошуку на GitHub, віднайшов сервер Aquatic:
|
||||
=> https://github.com/greatest-ape/aquatic
|
||||
|
||||
Він також підтримує IPv4/IPv6, протоколи UDP, HTTP, WS і так само зберігає дані в оперативній пам'яті, не зношуючи своєю роботою носій SSD. Нижче опишу покрокову інструкцію збірки, встановлення та налаштування для мережі Yggdrasil, можливо даний матеріал буде цікавий початківцям, зокрема - для використання в класичній мережі Інтернет.
|
||||
|
||||
## Підготовка системи
|
||||
|
||||
### Створення системного користувача
|
||||
|
||||
Як і для інших програм Linux, що збираються з початкового коду і запускаються через systemd, я створюю окремого системного користувача з домашньою текою, для ізоляції прав доступу:
|
||||
``` bash
|
||||
useradd -m aquatic
|
||||
```
|
||||
|
||||
### Встановлення системних залежностей
|
||||
|
||||
Програмне середовище Rust у мене розгорнуте в профілі root, куди я клоную репозиторії і засобами профілю якого проводжу збірку всіх бінарних файлів.
|
||||
Якщо в системі не встановлена інфраструктура Rust (rustc, cargo та інше) тоді вам сюди:
|
||||
=> https://rustup.rs
|
||||
|
||||
Стандартна інсталяція залежностей Rust вимагає близько 2 Гб дискового простору. Якщо ви, як і я, користуєтесь VPS - встановіть лише необхідні для роботи компілятора пакунки.
|
||||
|
||||
Для цього при першому запуску команди:
|
||||
``` bash
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||
```
|
||||
|
||||
* оберіть пункт "Customize installation"
|
||||
* замість стандартного "Profile (which tools and data to install)" вкажіть "minimal"
|
||||
|
||||
Це пропустить встановлення зайвих на сервері пакунків, що зменшить розмір до ~600 Мб.
|
||||
|
||||
У випадку використання "minimal", для збірки також важливо до-встановити глобальні залежності:
|
||||
``` bash
|
||||
apt install clang libclang-dev
|
||||
```
|
||||
* при інсталяції rustup в режимі "default", цей крок можна пропустити.
|
||||
|
||||
Якщо rustup вже встановлено, також переконаймось, що використовуються актуальні версії:
|
||||
``` bash
|
||||
rustup update
|
||||
cargo update
|
||||
```
|
||||
|
||||
### Встановлення Aquatic
|
||||
|
||||
Виконуємо наступні кроки у послідовності:
|
||||
``` bash
|
||||
su root && cd ~
|
||||
```
|
||||
* логінимось (якщо досі не root) і переходимо в домашню теку
|
||||
``` bash
|
||||
git clone https://github.com/greatest-ape/aquatic.git && cd aquatic
|
||||
```
|
||||
* клонуємо вихідний код і переходимо до теки проєкту
|
||||
``` bash
|
||||
cargo build --release -p aquatic_udp
|
||||
```
|
||||
* збираємо оптимізовані бінарні пакети aquatic_udp
|
||||
|
||||
Таким чином, бінарники будуть доступні у теці "/root/aquatic/target/release/*". Оскільки ми будемо використовувати сервіс systemd, де відсутні змінні середовища, важливо скопіювати (або залінкувати) необхідні пакети в системне розташування, де вони матимуть відповідні права на виконання:
|
||||
``` bash
|
||||
install /root/aquatic/target/release/aquatic_udp /usr/local/bin/aquatic_udp
|
||||
```
|
||||
* мені потрібен тільки сервер UDP, якщо ви хочете підняти HTTP та WS, виконайте аналогічні кроки для інших саб-крейтів;
|
||||
* тут ми використовуємо команду "install" замість "cp", оскільки вона автоматично встановлює правильні права доступу;
|
||||
* якщо не плануєте оновлення, на даному етапі можна видалити не потрібні вихідні коди.
|
||||
|
||||
### Файл конфігурації
|
||||
|
||||
Сервер Aquatic можна запускати зі стандартним набором опцій, без аргументів (отримати поточні налаштування для конфігурації сервера можна командою:
|
||||
``` bash
|
||||
aquatic_udp -p
|
||||
```
|
||||
|
||||
Оскільки мій сервер буде працювати в режимі Yggdrasil-only, як скопіюю цей вивід у спільний системний файл конфігурації командою:
|
||||
``` bash
|
||||
aquatic_udp -p > /etc/aquatic.toml
|
||||
```
|
||||
* приклад systemd нижче буде використовувати цей модифікований файл
|
||||
|
||||
Стандартна конфігурація передбачає запуск на всіх інтерфейсах і порті 3000, я ж змінюю на окрему адресу підмережі Yggdrasil і більш типовий для відкритих UDP трекерів порт 6969. Детальніше про те, як створити адресу підмережі Yggdrasil - читайте тут:
|
||||
=> http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:subnet_setting
|
||||
|
||||
``` aquatic.toml
|
||||
# вимикаю IPv4, так як цей інтерфейс в Yggdrasil не обслуговується
|
||||
use_ipv4 = false
|
||||
# "[xxx:xxxx:xxxx:xxxx::fdb]" - актуальна адреса IPv6,
|
||||
# "fdb" - це імпровізований постфікс у діапазоні A-f0-9 типу "file database"
|
||||
address_ipv6 = "[xxx:xxxx:xxxx:xxxx::fdb]:6969"
|
||||
```
|
||||
|
||||
Якщо потрібен вивід публічної веб-статистики, вказуємо також:
|
||||
``` aquatic.toml
|
||||
write_html_to_file = true
|
||||
# шлях може бути іншим
|
||||
# * у цьому випадку створіть каталог командою `mkdir /var/www/aquatic`
|
||||
# * надайте відповідні права `chown aquatic:aquatic /var/www/aquatic`
|
||||
html_file_path = "/var/www/aquatic/index.html"
|
||||
```
|
||||
|
||||
В конфігурації хосту nginx додаємо наступне (не забуваємо також відкрити 80 порт):
|
||||
``` /etc/nginx/default.conf
|
||||
server {
|
||||
# актуальна адреса IPv6
|
||||
listen [xxx:xxxx:xxxx:xxxx::fdb]:80;
|
||||
server_name xxx:xxxx:xxxx:xxxx::fdb;
|
||||
|
||||
root /var/www/aquatic;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Не забуваємо застосувати зміни:
|
||||
``` bash
|
||||
nginx -t
|
||||
systemctl reload nginx
|
||||
```
|
||||
|
||||
Інші налаштування лишаю стандартними.
|
||||
|
||||
### Налаштування Firewall
|
||||
|
||||
В системах Debian, в режимі UDP / Yggdrasil-only (трекер прийматиме та віддаватиме виключно внутрішньомережеві адреси пірів) я використовую наступне перманентне правило ufw для iptables:
|
||||
``` bash
|
||||
ufw allow from 0200::/7 to 0200::/7 port 6969 proto udp
|
||||
```
|
||||
* якщо в конфігурації вказано інший порт, використовуйте його замість 6969
|
||||
|
||||
Якщо у вас звичайний Інтернет трекер, можна просто додати дозвіл на всі вхідні типи підключень:
|
||||
``` bash
|
||||
ufw allow 6969
|
||||
```
|
||||
|
||||
Не забуваємо по аналогії відкрити порт на веб-статистику, якщо така використовується у конфігурації вище!
|
||||
|
||||
### Сервіс systemd
|
||||
|
||||
Від root створюємо новий файл конфігурації:
|
||||
``` bash
|
||||
nano /etc/systemd/system/aquatic.service
|
||||
```
|
||||
|
||||
У цьому файлі, на моєму прикладі, вказано тільки запуск сервера UDP, якщо буде потрібно, додам й інші протоколи в рамках спільного сервісу (послідовністю команд групи "exec" або додатковим скриптом). Ви можете створити для себе окремі юніти типу "aquatic_ws.service", але на мою думку це не зручно і краще адмініструвати спільною короткою командою.
|
||||
|
||||
Зміст файлу приблизно такий:
|
||||
``` /etc/systemd/system/aquatic.service
|
||||
[Unit]
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=aquatic
|
||||
Group=aquatic
|
||||
ExecStart=/usr/local/bin/aquatic_udp -c /etc/aquatic.toml
|
||||
StandardOutput=file:/home/aquatic/debug.log
|
||||
StandardError=file:/home/aquatic/error.log
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
Керування процесом відбувається наступними командами:
|
||||
|
||||
``` bash
|
||||
systemctl daemon-reload
|
||||
```
|
||||
* оновлюємо конфігурацію systemd
|
||||
``` bash
|
||||
systemctl enable aquatic
|
||||
```
|
||||
* автостарт при запуску системи
|
||||
``` bash
|
||||
systemctl start aquatic
|
||||
```
|
||||
* запуск
|
||||
|
||||
## Тестування
|
||||
|
||||
Після запуску сервісу, перевіряємо наявність активного процесу:
|
||||
``` bash
|
||||
netstat -tulpn | grep aquatic_udp
|
||||
```
|
||||
|
||||
На прикладі моєї конфігурації Yggdrasil, має бути щось типу такого:
|
||||
``` bash
|
||||
udp6 0 0 xxx:xxxx:xxxx:xxxx:6969 :::* 123456/aquatic_udp
|
||||
```
|
||||
|
||||
Також дивимось журнали:
|
||||
* /home/aquatic/debug.log
|
||||
* /home/aquatic/error.log
|
||||
|
||||
На стороні клієнта, створюємо новий торент (в qBittorrent це "Tools" -> "Torrent Creator")
|
||||
і вказуємо адресу нашого нового трекеру, після чого перевіряємо оновлення веб-статистики;
|
||||
так само, можна додати трекер до наявної роздачі.
|
||||
|
||||
В принципі, це все, якщо комусь цікаво - мій сервер розташований тут:
|
||||
```
|
||||
udp://[302:68d0:f0d5:b88d::fdb]:6969
|
||||
```
|
||||
|
||||
Веб-статистика:
|
||||
=> http://[302:68d0:f0d5:b88d::fdb]
|
||||
=> http://tracker.ygg
|
||||
|
||||
Також, на разі працюю над агрегатором Aquatic для підписок на оновлення трекеру в різних форматах:
|
||||
=> https://github.com/YGGverse/aquatic-crawler aquatic-crawler (Rust)
|
||||
Loading…
Add table
Add a link
Reference in a new issue