TOX - это такой протокол для голосовой, текстовой и видеосвязи, работает по технологии p2p, т.е. не требуется отдельный сервер, но для связи нужно, чтобы два клиента могли как-то друг друга найти и между собой соединиться. Для этого используется сеть публичных bootstrap-нод. Одну из подобных я поднимал just for fun.
Все свои извращения я делал внутри nspawn-контейнера с Debian testing, ставил всё в /opt, запуск демона делал с помощью systemd-юнита.
Для начали ставим всё нужное, чтобы потом два раза не бегать и три раза не перезапускать сборку:
sudo apt install build-essential libtool autotools-dev \ automake checkinstall check git yasm checkinstall \ libopus-dev libconfig-dev libvpx-dev
Теперь скачаем исходные тексты, из которых будем собирать и ставить.
git clone https://github.com/irungentoo/toxcore.git git clone https://github.com/jedisct1/libsodium.git
Начнём с библиотеки libsodium:
cd libsodium # генерация необходимых файлов ./autogen.sh # конфигурирование с указанием каталога установки ./configure --prefix=/opt/toxcore # сборка make # каталог для установки sudo mkdir /opt/toxcore # установка sudo checkinstall
Теперь собираем непосредственной демон "tox-bootstrapd":
cd ../toxcore ./autogen.sh # конфигурирование с указанием каталога установки и # расположения файлов libsodium ./configure --prefix=/opt/toxcore \ --with-libsodium-headers=/opt/toxcore/include \ --with-libsodium-libs=/opt/toxcore/lib \ --enable-daemon --enable-logging # сборка и установка make sudo checkinstall
Теперь надо сделать так, чтобы всё это добро запускалось и работало.
Сначала надо создать системного пользователя, от имени которого будет работать демон:
sudo adduser --system --no-create-home --disabled-login tox-bootstrap
Для работы ноды необходим конфиг "/opt/toxcore/etc/tox-bootstrapd.conf" примерно такого содержания:
// Прослушиваемый порт port = 33445 // Каталог для ключей, который надо создать // и дать права на запись пользователю tox-bootstrap // chown tox-bootstrap /opt/toxcore/var/lib/tox-bootstrapd/keys keys_file_path = "/opt/toxcore/var/lib/tox-bootstrapd/keys" // PID-файл // Права на него выставит systemd pid_file_path = "/var/run/tox-bootstrapd/tox-bootstrapd.pid" // Использовать IPv6. enable_ipv6 = true // Использовать IPv4, если с IPv6 не получилось enable_ipv4_fallback = true // Обнаруживать ноды в локальной сети enable_lan_discovery = true enable_tcp_relay = true // Дополнительный порты tcp_relay_ports = [3389, 33445] // MOTD (Message Of The Day) enable_motd = true // Текст не более 255 байт motd = "tox-bootstrapd" // Список нод bootstrap_nodes = ( { address = "адрес" port = порт public_key = "публичный ключ" }, ... { address = "адрес" port = порт public_key = "публичный ключ" } )
Актуальный список нод в пригодном для вставки формате можно взять по адресу http://tox.0x10k.com/bootstrapd-conf.txt.
Теперь необходим systemd-юнит для управления демоном. Я его создал в том же каталоге каталоге, чтобы за его пределами были только ссылки.
# /opt/toxcore/tox-bootstrapd.service [Unit] Description=Tox DHT Bootstrap Daemon Wants=network-online.target After=network.target network-online.target [Service] Type=forking RuntimeDirectory=tox-bootstrapd RuntimeDirectoryMode=750 PIDFile=/var/run/tox-bootstrapd/tox-bootstrapd.pid WorkingDirectory=/opt/toxcore/var/lib/tox-bootstrapd ExecStart=/opt/toxcore/bin/tox-bootstrapd --config /opt/toxcore/etc/tox-bootstrapd.conf User=tox-bootstrap [Install] WantedBy=multi-user.target
В юните указывает: для запуска нужно дождаться поднятия сети, сервис после запуска форкается, PID-файл для отслеживания, каталог для PID-файла, команда для запуска, учетная запись демона.
Теперь этот юнит необходимо добавить в систему и запустить:
sudo systemctl enable /opt/toxcore/tox-bootstrapd.service sudo systemctl start tox-bootstrapd.service sudo systemctl status tox-bootstrapd.service
В результате последней команды должно появиться сообщение, что демон успешно запущен и работает, и кусок лога с публичным ключом, который необходим для добавления в список нод клиента.
На написание всё этого вдохновил пост на Habrahabr.