Встановлення та базове налаштування IRC-баунсера soju в Linux
Почав писати цей гайд з наміром запустити soju через проксі I2P, але з цим виникли труднощі. Публікую те, що вже занотував. Якщо вам потрібне рішення, що працюватиме через проксі HTTP/SOCKS - гортайте вниз до посилань: там є інструкція з налаштування альтернативного баунсера ZNC у зв'язці з 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:
Додатково, може знадобитися пакунок 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