Tox – это распределённая сеть для обмена сообщениями, а также для аудио- и видеозвонков.
Поиск участников сети и установление связи с ними в сети Tox происходит очень похоже на torrent-обмен с поиском т.н. “пиров” по технологии DHT. Это означает, что все данные передаются от одного участника сети другому напрямую, а обращение к остальным узлам сети нужно лишь для обмена IP-адресами.
Ключевым отличием от многих других популярных способов аудио-видеосвязи и обмена сообщениями является то, что в сети Tox отсутствует понятие логин-сервера, поскольку проверка личности пользователя происходит на основании его пары ключей: открытого и закрытого. Открытый ключ пользователя одновременно является основной частью его пользовательского идентификатора.
Единственное, для чего Tox использует заранее заданные серверы, это для т.н. “bootstrap”, т.е. для получения списка нескольких запущенных узлов сети при запуске программы. После этого bootstrap-серверы могут быть больше не нужны, т.к. поиск пользователей осуществляется посредством распределённой одноранговой (ячеистой?) сети, состоящей из таких же Tox-клиентов.
Определение личности пользователя происходит на основе его т.н. “Tox ID” – идентификатора Tox. Tox ID состоит из открытого ключа шифрования, антиспам-числа и контрольной суммы:
[открытый ключ (32 байта)][nospam (4 байта)][контрольная сумма (2 байта]
Обычно ключ записывается в шестнадцатеричном виде, и выглядит примерно так:
56A1ADE4B65B86BCD51CC73E2CD4E542179F47959FE3E0E21B4B0ACDADE51855D34D34D37CB5 [------------------------------ ключ --------------------------][nospam][CS]
Антиспам-число (nospam) позволяет быстро изменять полный Tox ID без изменения ключа шифрования.
Контрольная сумма предотвращает неправильный или неполный ввод Tox ID. Вычисляется простым XOR'ом.
Согласно сайту разработчиков, установить Tox можно из официального репозитория. Для этого нужно добавить этот репозиторий в список источников APT, а также установить GPG-ключ этого репозитория. Разработчики предлагают воспользоваться следующим готовым скриптом1):
echo "Removing the old GPG key" sudo apt-key del 0C2E03A0 echo echo "Adding the new repo to /etc/apt/sources.list.d/" sudo sh -c 'echo "deb https://repo.tox.im/ nightly main" > /etc/apt/sources.list.d/tox.list' echo echo "Installing a new GPG key" wget -qO - https://repo.tox.im/pubkey.gpg | sudo apt-key add - echo echo "Installing 'apt-transport-https' package" sudo apt-get install apt-transport-https echo echo "Running 'apt-get update'" sudo apt-get update -qq echo echo "Tox Repository Installed." echo "You can now install utox, qtox, toxic, ratox and tox-bootstrapd"
После добавления репозитория, можно стандартным образом установить utox или qtox. Например,
sudo apt-get install utox
PPA, указанная ниже, устарела. Лучше воспользоваться официальным репозиторием, как указано выше.
sudo add-apt-repository ppa:v-2e/tox sudo apt-get update sudo apt-get install utox
Согласно Tox Wiki,
layman -f -o https://raw.github.com/fr0stycl34r/gentoo-overlay-tox/master/repository.xml -a tox-overlay layman -S emerge -va utox
Чтобы установить связь с другими пользователями, нужно добавить каждого из них в свой список контактов. Следует иметь в виду, что в отличие от большинства подобных программ, список контактов в Tox хранится только на компьютере пользователя2). Поэтому потеря списка контактов на компьютере приведёт к тому, что нужно будет составлять этот список заново.
Чтобы добавить пользователя, нужно, чтобы он выслал вам свой Tox ID по какому-то другому каналу (например, по e-mail), а затем добавить этот ID в своей программе-клиенте.
Чтобы выслать другому пользователю свой Tox ID, его нужно сгенерировать в программе-клиенте. Обычно для этой цели в настройках программы есть кнопка “Скопировать Tox ID”.
Поскольку в сети Tox не существует (по идее) единого центра хранения адресов абонентов, при добавлении нового пользователя в список контактов, а также при запуске программы-клиента маршрут ко всем контактам из списка как бы “вычисляется” заново. Ваша программа-клиент “запускает” запрос нужных Tox ID в сеть Tox. При этом узлы, которые знают текущий IP-адрес искомого абонента, откликаются на этот запрос, и далее уже устанавливается прямая связь с абонентом. Побочным эффектом такого подхода является длительное время поиска контактов в сети и их медленное “появление” в списке контактов (обычно - несколько минут или дольше).
Во-первых, надо собрать Tox с параметром –enable-daemon
.
После установки отредактировать конфигурационный файл демона. Файл может находиться в произвольном месте. Представим, что он находится в /etc/tox/conf
.
В нём следует указать порт, путь к файлу, где будут храниться ключи, путь к PID-файлу, а также узлы3), с которыми демон будет связываться сначала.
// ProjectTox dht bootstrap node daemon configuration file. // Listening port. port = 33445 // A key file is like a password, so keep it where no one can read it. // The daemon should have permission to read/write to it. // Remember to replace the provided example with your own path. keys_file_path = "/etc/tox/keys" // The PID file written to by daemon. // Make sure that the user who runs the daemon has permissions to write to the // PID file. // Remember to replace the provided example with your own path. pid_file_path = "/var/run/tox/tox_bootstrap_daemon.pid" // Enable IPv6. enable_ipv6 = false // Automatically bootstrap with nodes on local area network. enable_lan_discovery = true enable_tcp_relay = true // Tox uses 443, 3389 and 33445 ports by default, so it's highly recommended to keep // them. //tcp_relay_ports = [443, 3389, 33445] tcp_relay_ports = [3389, 33445] // It's planned to use message of the day as a convenient method of checking // whether a node is up or not, though there are other methods of doing that. enable_motd = true motd = "tox_bootstrap_daemon" // Any number of nodes the daemon will bootstrap itself from. // Remember to replace the provided example with your own node list. // There is a maintained list of bootstrap nodes on Tox's wiki, if you need it. // You may leave the list empty or remove "bootstrap_nodes" complitely, // in both cases this will be interpreted as if you don't want to bootstrap // from anyone. bootstrap_nodes = ( { // Node 1 // Any ipv4 or ipv6, depending on whether `enable_ipv6` is set or not, and // also any US-ASCII domain name. address = "23.226.230.47" port = 33445 public_key = "A09162D68618E742FFBCA1C2C70385E6679604B2D80EA6E84AD0996A1AC8A074" }, { // Node 2 address = "192.254.75.98" port = 33445 public_key = "951C88B7E75C867418ACDB5D273821372BB5BD652740BCDF623A4FA293E75D2F" }, { // Node 3 address = "144.76.60.215" port = 33445 public_key = "04119E835DF3E78BACF0F84235B300546AF8B936F035185E2A8E9E0A67C8924F" }, { // Node 4 address = "37.187.20.216" port = 33445 public_key = "5DA6883A3DAB3DA8A32930182F7E50FBB4B379E844B821FC8C4F5EDE176EA164" }, { // Node 5 address = "54.199.139.199" port = 33445 public_key = "7F9C31FE850E97CEFD4C4591DF93FC757C7C12549DDD55F8EEAECC34FE76C029" }, { // Node 6 address = "37.59.102.176" port = 33445 public_key = "B98A2CEAA6C6A2FADC2C3632D284318B60FE5375CCB41EFA081AB67F500C1B0B" }, { // Node 7 address = "192.210.149.121" port = 33445 public_key = "F404ABAA1C99A9D37D61AB54898F56793E1DEF8BD46B1038B9D822E8460FAB67" }, { // Node 8 address = "37.187.46.132" port = 33445 public_key = "5EB67C51D3FF5A9D528D242B669036ED2A30F8A60E674C45E7D43010CB2E1331" } )
После первого запуска демон сгенерирует уникальный ключ для данного узла, и запишет его в файл ключей, указанный в конфигурации. Этот файл секретен, и должен быть доступен для чтения только демону Tox!
По состоянию на 05.08.2014 свежеустановленный демон Tox в среднем создаёт поток ~200 кбит/с входящих данных и ~200 кбит/с исходящих.
Архив с папкой настроек для сборки .deb-пакета: tox-debian.tar.xz
Последовательность сборки можно посмотреть [[debian|здесь]. В целом логика создания .deb-пакета при имеющейся готовой папке “debian” такова:
.orig.tar.gz
, .orig.tar.bz2
и т.п.debuild -us -uc