devzone.org.ua/post/vstanovlennia-ta-bazove-nalashtuvannia-irc-baunsera-soju.md
2025-11-29 08:30:43 +02:00

12 KiB
Raw Blame History

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

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

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

  • баунсер (англ. bouncer) - це спеціальний проксі-сервер, що працює 24/7 і надає спільний обліковий запис клієнтським програмам; використовуються для читання історії дописів під час відсутності, адже перший в історії протокол чатів IRC - не передбачає зберігання статусів (окрім away) та історії.

Сервер

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

  • a.a.a.a - хост клієнта IRC
  • b.b.b.b - хост сервера soju
  • usoju - користувач баунсера soju (не плутати з акаунтом linux)
  • xxxxx - пароль до usoju

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

Перш як продовжити, переконайтесь, що у вас встановлено останню версію 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
  • usoju - це юзернейм облікового запису адміністратора баунсер-серверу soju; на відміну від ZNC, він також буде використовуватись у якості нікнейму IRC (якщо в таблицях User та Network, засобами командного рядка, не вказано nick)
  • команду sojudb потрібно виконувати від того системного користувача, від якого пускатиметься баунсер soju, та з тієї теки, де очікується розташування файлу soju.db (у нашому випадку - домашня тека користувача)

Якщо потрібно змінити пароль, переходимо у теку з 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
  • при першому запуску вказую аргумент -debug - його можна прибрати згодом

Для 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"
  • порада: якщо пускаєте Halloy в анонімному режимі, додатково зверніть увагу на опцію:
[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
  • аргумент -name - опціональний, але варто його вказати, щоб зручно керувати мережею за цим ідентифікатором (інакше замість імені доведеться вказувати адресу)
  • саме цей сервер використовує сертифікат TLS і стандартний порт 6697, тому вказується схема ircs://

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

/msg BouncerServ network create -name bonobonet -addr irc+insecure://[200:6f99:2afe:41fd:fc3b:b1f7:af9d:f3a0]:6667
  • тут я ще вказую свій нік аргументом -nick <nick> інакше буде глобальний (з таблиці User)

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

BouncerServ created network "bonobonet"

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

/msg BouncerServ network update bonobonet -nick mynick

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

/msg BouncerServ help network create
  • або прибираємо create і виводимо довідку по всім командам network

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

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

/list
  • список кімнат залежатиме від конкретного сервера IRC

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

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

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

/whois <nick>

Посилання