mirror of
https://codeberg.org/postscriptum/gemlog.git
synced 2026-02-19 06:22:41 +00:00
253 lines
No EOL
11 KiB
Text
253 lines
No EOL
11 KiB
Text
# Встановлення та базове налаштування IRC-баунсера soju
|
||
|
||
> Я почав писати цей гайд з наміром запустити soju через проксі I2P, але з цим виникли труднощі. Публікую те, що вже занотував. Якщо вам потрібне рішення, що працюватиме через HTTP/SOCKS - гортайте вниз до посилань: там є інструкція з налаштування альтернативного баунсера ZNC у зв'язці з proxychains.
|
||
|
||
soju - це відносно сучасний баунсер IRC, написаний мовою Go:
|
||
|
||
=> https://soju.im
|
||
|
||
* баунсер (англ. bouncer) - це спеціальний проксі-сервер, що працює 24/7 і надає спільний обліковий запис клієнтським програмам; використовуються для читання історії дописів під час відсутності, адже перший в історії протокол чатів IRC - не передбачає зберігання статусів (окрім away) та історії.
|
||
|
||
## Сервер
|
||
|
||
У прикладах нижче, використовуються умовні адреси:
|
||
|
||
* 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 /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
|
||
```
|
||
|
||
Тепер, потрібно проініціалізувати локальну базу і створити в ній обліковий запис для віддаленого керування:
|
||
|
||
``` bash
|
||
sojudb create-user usoju -admin
|
||
```
|
||
* usoju - це юзернейм облікового запису адміністратора soju; на відміну від ZNC, він також буде використовуватись у якості нікнейму IRC (якщо в таблицях користувача та окремої мережі не вказано nick)
|
||
* команду 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.
|
||
|
||
Усі налаштування під час взаємодії з баунсером через командний рядок - будуть збережені до бази даних (soju.db) і відновлені після наступного підключення клієнтом IRC до soju, для вказаного в його конфігурації обліковому записі.
|
||
|
||
### 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
|
||
```
|
||
|
||
### Керування мережами
|
||
|
||
Підключившись, можна побачити вітання сервера soju відповідно до наших налаштувань:
|
||
|
||
> SASL authentication successful
|
||
> Welcome to soju, usoju
|
||
> Your host is soju
|
||
|
||
Для отримання повного списку доступних команд, пишемо в чат BouncerServ:
|
||
|
||
``` irc
|
||
/msg BouncerServ help
|
||
```
|
||
|
||
Таким чином, можна взаємодіяти з сервером через створений раніше обліковий запис адміна (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"
|
||
|
||
Актуальну довідку з додавання нових мереж, можна отримати командою:
|
||
|
||
``` irc
|
||
/msg BouncerServ help network create
|
||
```
|
||
|
||
### Підключення до кімнат окремої мережі
|
||
|
||
Додавши мережу, в залежності від клієнта, обираємо потрібну зі списку (в GUI клієнтах - клікаємо на неї мишею) та пишемо в чат команду отримання кімнат:
|
||
|
||
``` irc
|
||
/list
|
||
```
|
||
* список кімнат залежатиме від конкретного сервера IRC, до якого було налаштовано підключення
|
||
|
||
Обираємо потрібну з відповіді сервера і переходимо до спілкування!
|
||
|
||
### Отримання інформації про поточний профіль підключення
|
||
|
||
Перевірити інформацію з підключення до конкретної мережі можна командою:
|
||
|
||
``` irc
|
||
/whois usoju
|
||
```
|
||
|
||
## Посилання
|
||
|
||
=> 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
|
||
=> yggdrasil-is-network-with-distributed-routing.gmi Yggdrasil - мережа з децентралізованою маршрутизацією |