gemlog/public/uk/soju-irc-bouncer-setup.gmi
2025-11-29 04:40:33 +02:00

227 lines
No EOL
9.6 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Встановлення та базове налаштування IRC-баунсера soju
soju - це відносно сучасний баунсер IRC, написаний мовою Go:
=> https://soju.im
* Я почав писати цей гайд з наміром запустити soju через проксі I2P, але з цим виникли труднощі і матеріал не було завершено. Публікую те, що вже занотував. Якщо вам потрібне рішення, що працюватиме через HTTP/SOCKS - гортайте вниз до посилань: там є інструкція з налаштування альтернативного баунсера ZNC у зв'язці з proxychains.
## Сервер
У прикладах нижче, використовуються умовні адреси:
* a.a.a.a - адреса клієнта (desktop, mobile, etc)
* b.b.b.b - адреса баунсера soju
* usoju - користувач баунсера soju (не плутати з акаунтом linux)
* xxxxx - ваш пароль
### Системні залежності
Перш як продовжити, переконайтесь, що у вас встановлено останню версію Go:
=> install-latest-golang-version-on-debian-linux.gmi Встановлення останньої версії Go в Debian
Також, знадобиться пакунок scdoc:
``` bash
sudo apt install scdoc
```
### Збірка з вихідного коду
``` bash
git clone https://codeberg.org/emersion/soju.git
cd soju
make
sudo make install
```
### Ініціалізація
Сервер soju буде пускатись від окремого користувача:
``` bash
useradd -m soju
```
Логінимось і продовжуємо наступні кроки вже від нього:
``` bash
su soju
```
Створюємо окремий конфіг в домашній теці:
``` bash
cp /etc/soju/config /home/soju/config
```
``` /home/soju/config
# шлях до бази користувача unix (створюється автоматично при першому запуску)
db sqlite3 /home/soju/soju.db
# схема `irc+insecure` та порт 6667 - використовується конфігурація без SSL/TLS
# вона є відносно безпечною для підключення до баунсера в локальній мережі
listen irc+insecure://b.b.b.b:6667
# умовна назва хосту, інакше буде використовуватись системний
hostname soju
```
Тепер, потрібно проініціалізувати локальну базу і створити в ній обліковий запис для віддаленого керування:
``` bash
sojudb create-user usoju -admin
```
* usoju - це юзернейм облікового запису адміністратора soju; на відміну від ZNC, він також буде використовуватись у якості нікнейму IRC!
* команду sojudb потрібно виконувати від того системного користувача, від якого пускатиметься баунсера soju, та з тієї теки, де очікується розташування файлу soju.db (у нашому випадку - домашня тека користувача)
Якщо потрібно змінити пароль, переходимо у теку з soju.db та виконуємо:
``` bash
sojudb change-password usoju
```
Особисто я додатково корегую права:
``` bash
chown soju:soju /home/soju/soju.db && chmod 0600 /home/soju/soju.db
chown soju:soju /home/soju/config && chmod 0600 /home/soju/config
```
### Фаєрвол
Оскільки звичайно, баунсери пускаються віддалено, потрібно також відкрити порт для дозволених хостів:
``` bash
sudo ufw allow from a.a.a.a to b.b.b.b port 6667 proto tcp
```
Або для всього і всіх:
``` bash
ufw allow 6667/tcp
```
### Запуск
З командного рядка, сервер запускається наступним чином:
``` bash
soju -debug -config /home/soju/config
```
* при першому запуску задаю аргумент `-debug` - його можна прибрати згодом
Для systemd, є готовий приклад:
=> https://codeberg.org/emersion/soju/src/branch/master/contrib/soju.service
Для конфігурації на базі Debian і поточних налаштувань системного профілю, він в мене відрізняється:
``` /etc/systemd/system/soju.service
[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.
### Halloy
Пам'ятка з налаштування клієнта Halloy, яким зараз користуюсь. Актуалізований гайд можна знайти на офіційній сторінці:
=> https://halloy.chat/guides/connect-with-soju.html#connect-with-soju
Моя конфігурація виглядає приблизно так:
``` ~/.config/halloy/config.toml
[servers.soju]
nickname = "soju"
server = "b.b.b.b"
port = 6667
use_tls = false
[servers.soju.sasl.plain]
username = "usoju"
password = "xxxxx"
```
* Порада: якщо пускаєте halloy в анонімному режимі, додатково зверніть увагу на опцію:
``` ~/.config/halloy/config.toml
[preview]
enabled = false
```
### Віддалене керування баунсером через клієнт IRC
Підключившись вперше, можна побачити вітання сервера soju відповідно до наших налаштувань:
> SASL authentication successful
> Welcome to soju, usoju
> Your host is soju
Тепер можна взаємодіяти з сервером через створений раніше обліковий запис адміна (usoju) - наприклад, додати нову мережу:
``` irc
/msg BouncerServ network create -name some_name -addr ircs://irc.host.org
```
* аргумент `-name` - опціональний, але варто його вказати, щоб зручно керувати мережею за цим ідентифікатором (інакше замість імені доведеться вказувати адресу)
* саме цей сервер використовує сертифікат TLS і стандартний порт 6697, тому вказується схема ircs://
Особисто я використовую soju для серверів IRC в IPv6 мережі Yggdrasil, де TLS не використовується (оскільки трафік вже захищений) тому для прикладу, команда підключення до мережі "bonobonet" виглядатиме так:
``` irc
/msg BouncerServ network create -name bonobonet -addr irc+insecure://[200:6f99:2afe:41fd:fc3b:b1f7:af9d:f3a0]:6667
```
Відповідь soju буде:
> BouncerServ created network "bonobonet"
Додавши мережу, в залежності від клієнта, обираємо потрібну зі списку (в GUI клієнтах - клікаємо на неї мишею) та пишемо в чат команду отримання кімнат:
``` irc
/list
```
* список кімнат залежатиме від конкретного сервера IRC, до якого було налаштовано підключення мережі
Обираємо потрібну з відповіді сервера і переходимо до спілкування.
Усі налаштування під час взаємодії з баунсером через командний рядок - будуть збережені до бази даних (soju.db) і відновлені після наступного підключення клієнтом IRC до soju, для вказаного в його конфігурації обліковому записі.
## Посилання
=> https://soju.im/doc/soju.1.html General Commands Manual
=> https://codeberg.org/emersion/soju/src/branch/master/doc/getting-started.md Getting started
=> https://codeberg.org/emersion/soju/src/branch/master/contrib/README.md User-contributed resources
=> https://todo.sr.ht/~emersion/soju/230 Problems connecting over tor (feature request?: support SOCKS5)
### Дивіться також
=> znc-irc-bouncer-setup.gmi Встановлення та налаштування IRC-баунсера ZNC в Linux
=> enhancing-privacy-in-linux-apps.gmi Підвищення рівня приватності в застосунках Linux