# Встановлення та базове налаштування 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 (якщо в таблицях 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 Пам'ятка з налаштування клієнта 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 - мережа з децентралізованою маршрутизацією