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


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


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


https://soju.im



Сервер


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



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


Перш як продовжити, переконайтесь, що у вас встановлено останню версію 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, є готовий приклад:


https://codeberg.org/emersion/soju/src/branch/master/contrib/soju.service


Утім, для конфігурації на базі 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, яким наразі користуюсь. Актуалізований гайд можна знайти на офіційній сторінці:

https://halloy.chat/guides/connect-with-soju.html#connect-with-soju


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


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

Посилання


General Commands Manual

Getting started

User-contributed resources

Problems connecting over tor (feature request?: support SOCKS5)


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


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

Підвищення рівня приватності в застосунках Linux

Yggdrasil - мережа з децентралізованою маршрутизацією



/uk/