Встановлення та базове налаштування IRC-баунсера soju в Linux

Почав писати цей гайд з наміром запустити soju через проксі I2P, але з цим виникли труднощі. Публікую те, що вже занотував. Якщо вам потрібне рішення, що працюватиме через проксі HTTP/SOCKS - гортайте вниз до посилань: там є інструкція з налаштування альтернативного баунсера ZNC у зв'язці з proxychains.

soju - це відносно сучасний баунсер IRC, написаний мовою Go:

Сервер

У прикладах нижче, використовуються умовні адреси:

Системні залежності

Перш як продовжити, переконайтесь, що у вас встановлено останню версію Go:

Встановлення останньої версії Go в Debian

Додатково, може знадобитися пакунок scdoc:

sudo apt install scdoc

Збірка з вихідного коду

git clone https://codeberg.org/emersion/soju.git
cd soju
make
sudo make install

Ініціалізація

Сервер soju буде пускатись від окремого користувача:

useradd -m soju

Логінимось і продовжуємо наступні кроки вже від нього:

su soju

Створюємо окремий конфіг в домашній теці:

cp /etc/soju/config /home/soju/config
# шлях до бази користувача unix (створюється автоматично при першому запуску)
# стандартно `db sqlite3 /var/lib/soju/main.db`
db sqlite3 /home/soju/soju.db

# схема `irc+insecure` та порт 6667 - використовується конфігурація без SSL/TLS
# вона є відносно безпечною для підключення до баунсера в локальній мережі
listen irc+insecure://b.b.b.b:6667

# умовна або реальна назва хосту, інакше буде використовуватись системний
hostname soju

Тепер, потрібно ініціалізувати базу і створити в ній обліковий запис для віддаленого керування:

sojudb create-user usoju -admin

Якщо потрібно змінити пароль, переходимо у теку з soju.db та виконуємо:

sojudb change-password usoju

Особисто я додатково корегую права:

chown soju:soju /home/soju/soju.db && chmod 0600 /home/soju/soju.db
chown soju:soju /home/soju/config && chmod 0600 /home/soju/config

Фаєрвол

Оскільки звичайно баунсери пускаються віддалено, потрібно відкрити порт для дозволених хостів:

sudo ufw allow from a.a.a.a to b.b.b.b port 6667 proto tcp

Або для всього і всіх:

ufw allow 6667/tcp

Запуск

З командного рядка, сервер запускається наступним чином:

soju -debug -config /home/soju/config

Для systemd, є готовий приклад:

Утім, для конфігурації на базі Debian і поточних налаштувань системного профілю, він в мене відрізняється:

[Unit]
Description=soju IRC bouncer service
Documentation=https://soju.im/
Documentation=man:soju(1) man:sojuctl(1)

Wants=network-online.target
After=network-online.target

[Service]
Type=simple

User=soju
Group=soju

RuntimeDirectory=/home/soju
AmbientCapabilities=CAP_NET_BIND_SERVICE

ExecStart=/usr/local/bin/soju -config /home/soju/config
ExecReload=/bin/kill -HUP $MAINPID

Restart=on-failure

# soju не розділяє журнали відлагодження від журналу помилок
StandardOutput=file:///home/soju/debug.log
StandardError=file:///home/soju/error.log

[Install]
WantedBy=multi-user.target

Клієнт

Оскільки в soju немає Веб-адмінки, керування відбувається через командний рядок клієнта IRC.

Усі налаштування під час взаємодії з баунсером через командний рядок - будуть збережені до бази даних (soju.db) і відновлені після наступного підключення клієнтом IRC до soju, для вказаного в його конфігурації обліковому записі.

Halloy

Пам'ятка з налаштування IRC клієнта Halloy, яким наразі користуюсь. Актуалізований гайд можна знайти на офіційній сторінці:

Моя конфігурація виглядає приблизно так:

[servers.soju]
nickname = "soju"
server = "b.b.b.b"
port = 6667
use_tls = false
[servers.soju.sasl.plain]
username = "usoju"
password = "xxxxx"
[preview]
enabled = false

При додаванні мереж нижче, я перезапускаю клієнт, інакше вони не з'являються в списку. Можливо, це баг поточної версії Halloy.

Керування мережами

Підключившись, можна побачити вітання сервера soju відповідно до наших налаштувань:

SASL authentication successful
Welcome to soju, usoju

Для отримання повного списку доступних команд, пишемо в чат до BouncerServ:

/msg BouncerServ help

Таким чином, можна взаємодіяти з сервером через створений раніше обліковий запис адміна (usoju) - наприклад, додати нову мережу:

/msg BouncerServ network create -name some_name -addr ircs://irc.host.org

Особисто я використовую soju для серверів IRC в IPv6 мережі Yggdrasil, де TLS не використовується (оскільки трафік вже захищений) тому для прикладу, команда підключення до локального сервера BonoboNET виглядатиме так:

/msg BouncerServ network create -name bonobonet -addr irc+insecure://[200:6f99:2afe:41fd:fc3b:b1f7:af9d:f3a0]:6667

Відповідь soju буде такою:

BouncerServ created network "bonobonet"

Щоб змінити нік для певної мережі після її додавання:

/msg BouncerServ network update bonobonet -nick mynick

Актуальну довідку з додавання нових мереж, можна отримати командою:

/msg BouncerServ help network create

Підключення до кімнат окремої мережі

Додавши мережу, в залежності від клієнта, обираємо потрібну зі списку (в GUI клієнтах - клікаємо на неї мишею) та пишемо в чат команду отримання кімнат:

/list

Обираємо потрібну з відповіді сервера і переходимо до спілкування!

Отримання інформації про поточний профіль підключення

Перевірити інформацію щодо підключення до конкретної мережі можна стандартною для IRC командою:

/whois 

Посилання

General Commands Manual
Getting started
User-contributed resources
Problems connecting over tor (feature request?: support SOCKS5)

Дивіться також

Встановлення та налаштування IRC-баунсера ZNC в Linux
Підвищення рівня приватності в застосунках Linux
Yggdrasil - мережа з децентралізованою маршрутизацією