mirror of
https://codeberg.org/postscriptum/devzone.org.ua.git
synced 2026-02-18 22:02:41 +00:00
add vstanovlennia-ta-bazove-nalashtuvannia-irc-baunsera-soju.md
This commit is contained in:
parent
5497fd81a8
commit
73e77d5074
1 changed files with 238 additions and 0 deletions
238
post/vstanovlennia-ta-bazove-nalashtuvannia-irc-baunsera-soju.md
Normal file
238
post/vstanovlennia-ta-bazove-nalashtuvannia-irc-baunsera-soju.md
Normal file
|
|
@ -0,0 +1,238 @@
|
|||
# Встановлення та базове налаштування IRC-баунсера soju в Linux
|
||||
|
||||
> Почав писати цей гайд з наміром запустити soju через проксі I2P, але з цим виникли труднощі. Публікую те, що вже занотував. Якщо вам потрібне рішення, що працюватиме через проксі HTTP/SOCKS - дивіться інструкцію [Встановлення та налаштування IRC-баунсера ZNC в Linux ](https://devzone.org.ua/post/vstanovlennia-ta-nalashtuvannia-irc-baunsera-znc-v-linux) у зв'язці з proxychains.
|
||||
|
||||
[soju](https://soju.im) - це відносно сучасний баунсер [IRC](https://uk.wikipedia.org/wiki/IRC), написаний мовою [Go](https://uk.wikipedia.org/wiki/Go_(мова_програмування)).
|
||||
|
||||
* баунсер (англ. *bouncer*) - це спеціальний проксі-сервер, що працює 24/7 і надає спільний обліковий запис клієнтським програмам; використовуються для читання історії дописів під час відсутності, адже перший в історії протокол чатів IRC - не передбачає зберігання статусів (окрім *away*) та історії.
|
||||
|
||||
## Сервер
|
||||
|
||||
У прикладах нижче, використовуються умовні адреси:
|
||||
|
||||
* `a.a.a.a` - хост клієнта IRC
|
||||
* `b.b.b.b` - хост сервера soju
|
||||
* `usoju` - користувач баунсера soju (не плутати з акаунтом linux)
|
||||
* `xxxxx` - пароль до `usoju`
|
||||
|
||||
### Системні залежності
|
||||
|
||||
Перш як продовжити, переконайтесь, що у вас встановлено останню версію Go (див. [Встановлення останньої версії Go в Debian](https://devzone.org.ua/post/vstanovlennia-ostannyoyi-versiyi-go-v-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 (якщо в таблицях `User` та `Network`, засобами командного рядка, не вказано `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
|
||||
|
||||
Пам'ятка з налаштування IRC клієнта [Halloy](https://halloy.chat), яким наразі користуюсь. Актуалізований гайд можна знайти на [офіційній сторінці](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
|
||||
```
|
||||
|
||||
При додаванні мереж нижче, я перезапускаю клієнт, інакше вони не з'являються в списку. Можливо, це баг поточної версії Halloy.
|
||||
|
||||
### Керування мережами
|
||||
|
||||
Підключившись, можна побачити вітання сервера 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](https://devzone.org.ua/post/yggdrasil-mereza-z-detsentralizovanym-routynhom), де TLS не використовується (оскільки трафік вже захищений) тому для прикладу, команда підключення до локального сервера *Bonobonet* виглядатиме так:
|
||||
|
||||
``` irc
|
||||
/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"
|
||||
|
||||
Актуальну довідку з додавання нових мереж, можна отримати командою:
|
||||
|
||||
``` irc
|
||||
/msg BouncerServ help network create
|
||||
```
|
||||
|
||||
### Підключення до кімнат окремої мережі
|
||||
|
||||
Додавши мережу, в залежності від клієнта, обираємо потрібну зі списку (в GUI клієнтах - клікаємо на неї мишею) та пишемо в чат команду отримання кімнат:
|
||||
|
||||
``` irc
|
||||
/list
|
||||
```
|
||||
* список кімнат залежатиме від конкретного сервера IRC
|
||||
|
||||
Обираємо потрібну з відповіді сервера і переходимо до спілкування!
|
||||
|
||||
### Отримання інформації про поточний профіль підключення
|
||||
|
||||
Перевірити інформацію з підключення до конкретної мережі можна командою:
|
||||
|
||||
``` irc
|
||||
/whois <nick>
|
||||
```
|
||||
|
||||
## Посилання
|
||||
|
||||
* [General Commands Manual](https://soju.im/doc/soju.1.html)
|
||||
* [Getting started](https://codeberg.org/emersion/soju/src/branch/master/doc/getting-started.md)
|
||||
* [User-contributed resources](https://codeberg.org/emersion/soju/src/branch/master/contrib/README.md)
|
||||
* [Problems connecting over tor (feature request?: support SOCKS5)](https://todo.sr.ht/~emersion/soju/230)
|
||||
Loading…
Add table
Add a link
Reference in a new issue