Как собрать Komodo из исходников?

Как собрать Komodo из исходников?

В этом цикле статей мы поговорим о том как собрать демон и кошелек Komodo из исходников. Также, постараемся разобраться, что такое нода Komodo, как управлять демоном и кошельком из консоли, какие программные пакеты предлагает Komodo, рассмотрим графический интерфейс Komodo-Qt (KomodoOcean), а также попытаемся понять разницу между native и SPV кошельками на практике, в частности, отвечая на вопрос - зачем нам держать ноду Komodo?

Что такое нода Komodo?

Для начала давайте попробуем разобраться что такое нода Komodo (не путать с нотариальными нодами). В общем смысле нода Komodo - это узел сети Komodo, т.е. программное обеспечение (ПО), которое соединяется с другими узлами в сети Komodo и осуществляет обмен информацией с ними, поддерживая сеть Komodo в актуальном состоянии. Т.е. занимается валидацией транзакций, блоков, распространением информации о новых транзакциях и блоках в блокчейне среди других узлов сети, обеспечивает синхронизацию узлов с сетью и выполняет массу других необходимых для обеспечения работоспособности сети операций. На данный момент существует всего две программные реализации ноды (узла) Komodo, это komodod и Komodo-Qt (KomodoOcean). Обе реализации, помимо самой ноды, включают в себя также и кошелек, но в первом случае он представлен в виде демона komodod, управляющегося только из командной строки (CLI), с помощью утилиты komodo-cli, а во втором случае - реализация также включает в себя графический интерфейс пользователя (GUI) на базе Qt, который выглядит следующим образом:

Графический интерфейс Komodo-Qt (KomodoOcean)

Здесь легко провести аналогию с популярным ПО Bitcoin Core. В нем консольный демон BTC называется bitcoind, утилита для управления им из консоли - bitcoin-cli, а пользовательский GUI - bitcoin-qt, аналогично и у Komodo: komodod - демон, komodo-cli - утилита для управления им из консоли, komodo-qt - GUI кошелек. Как мы уже определились - реализаций всего две komodod и Komodo-Qt (KomodoOcean), выбирая первую, нам будет доступен только консольный демон, а вот во второй - полный набор программ, т.е. и демон (CLI) и GUI, поэтому мы остановимся на втором выборе.

Системные требования

Т.к. это ПО запускается на персональном компьютере, то неплохо заранее представлять системные требования необходимые для запуска и сборки. Что касается запуска, то в принципе подойдет любой современный компьютер с более чем 4 Gb свободной оперативной памяти (RAM) на борту. Обратите внимание, что операционная система для запуска ноды Komodo может быть любой - поддерживаются Windows, Linux, OSX, т.е. фактически ПО является кроссплатформенным. А вот для сборки, т.е. компиляции ПО из исходников, необходима будет ОС Linux. Естественно мы понимаем, что установлена она далеко не у всех (или правильнее будет сказать - практически ни у кого), поэтому мы остановимся на этом моменте более подробно чуть позже. Как вы увидите ничего сложного или страшного в этом нет и в современном мире существует немало вариантов, для достижения необходимой цели. Это и установка Linux в качестве второй ОС на ПК, и использование разнообразных гипервизоров - Oracle VM VirtualBox, VMware Workstation и аренда виртуальной машины VM и т.п. Ко всему этому мы вернемся чуть позже, а пока мы хотели бы заострить ваше внимание на требовании к оперативной памяти. Более 4 Gb свободной оперативной памяти - означает то, что в процессе работы ОС, т.е. после того как она загрузится, а также загрузятся все автоматические запускаемые программы - должно остаться более 4 Gb свободной памяти. Многие пользователи часто путают этот параметр с объемом физически установленной памяти, забывая о том, что ОС и другим программам также необходима память для работы. Поэтому ПК с 4 Gb RAM - однозначно не подойдет, 8 Gb RAM - скажем так, пограничный вариант, работа ПО Komodo на нем возможна, но не то, что не рекомендуется, а может испытывать нехватку RAM, оптимальным вариантом является конфигурация с 16 Gb оперативной памяти.

Убедитесь что на вашем ПК доступно более 4 Gb свободной памяти (RAM)

В приведенном на скриншоте примере используется достаточно мощный ПК со 128 Gb RAM из которых свободно 37.6 Gb.

Теперь вернемся к требованиям для ПК для сборки, т.е. ПК, который будет использоваться у нас в качестве "машины разработчика" и на котором будет происходить компиляция ПО Komodo из исходников. Они должны быть несколько выше, чем у ПК на котором это ПО будет работать, но каких-то специальных существенных ограничений тут нет. Главное правило - чем больше у ПК ядер + потоков - тем ваша сборка будет идти быстрее. Т.к. сборка по-факту это "единоразовый" процесс, т.е. запустили один раз, получили бинарные файлы, то в случае слабого ПК - просто придется подождать чуть подольше, что в принципе не критично.

Единственное о чем мы забыли сказать - крайне желательно обзавестись SSD, а еще лучше SSD с поддержкой NVMe, т.к. на HDD работа ПО Komodo возможна, но будет медленной и менее комфортной, поэтому лучше сразу ориентироваться на SSD. В 2021 году SSD диск установлен наверное в каждом втором ПК (конечно же если ваш ПК не из прошлой эпохи), поэтому это требование также не должно представлять существенной проблемы.

Разворачиваем окружение для сборки

Как мы и говорили, для сборки ПО из исходников потребуется Linux. Вариантов установить его, если у вас под рукой только ваш ПК с Windows (мы будем рассматривать именно такой вариант, как самый распространенный) несколько:

  1. Установить Linux на ваш ПК в качестве второй операционной системы.
  2. Установить Linux в один из гипервизоров, например Oracle VM VirtualBox (бесплатное кроссплатформенное ПО для виртуализации) или VMware Workstation.
  3. Арендовать для сборки виртуальную машину (VM) с Linux.
  4. Использовать WSL (Windows Subsystem for Linux) в Windows 10.

Обратите внимание, что вне зависимости от того какой вариант вы выберете, инструкции, которые будут приведены в этой статье останутся актуальными и работоспособными. Цель данного этапа - просто получить рабочее окружение с операционной системой Linux, а каким из 4-х способов это сделать - решать вам. Мы же остановимся на варианте 4 и воспользуемся подсистемой Linux, которую нам предоставляет Windows 10.

Для того чтобы установить WSL на ваш ПК вы можете воспользоваться одной из следующих инструкций:

Руководства достаточно подробные, поэтому каких-то проблем возникнуть не должно.

После установки WSL, необходимо установить из магазина приложений Ubuntu 18.04 LTS или Debian:

Ubuntu 18.04 LTS в Microsoft Store

Сразу оговоримся, что работать с консолью Linux непосредственно из Windows может оказаться не так удобно, поэтому первое что мы сделаем, это установим внутрь Linux SSH-сервер, чтобы можно было пользоваться любым SSH клиентом - например PuTTY или SecureCRT. Естественно что команды можно вводить и в окне консоли Windows, но на наш взгляд, использовать тот же SecureCRT намного удобнее, к тому же настроив SSH вы сможете подключаться к вашему инстансу WSL не только с этого компьютера, но также и с других компьютеров в вашей локальной сети или из интернет.

Итак, после установки Ubuntu 18.04 LTS выбираем запустить и задаем логин и пароль Linux пользователя - для примера мы задали логин / пароль, как wsl / wsl (в "боевых условиях", когда ваш ПК с WSL находится в незащищенной среде, конечно же крайне желательно позаботиться о безопасности и придумать сложный пароль):

Задаем имя пользователя и пароль для Linux

Примечание: Если вы никогда не будете пользоваться SSH клиентом для доступа к WSL и всегда будете работать в локальной консоли - то можете просто пропустить следующий раздел, а все команды выполнять непосредственно в консоли Ubuntu.

Настройка доступа по SSH

Для настройки доступа к WSL по SSH необходимо:

  • В консоли Linux последовательно выполнить следующие команды:
sudo apt install openssh-server
sudo service ssh start
ip a

Здесь обратите внимание на IP адрес, который имеет виртуальная машина с WSL - 172.21.241.112 , у вас он скорее всего будет другим. Просто запоминаем его, т.к. он потребуется в следующих командах.

  • Запускаем командную строку с правами администратора, для этого нажимаем кнопку Пуск, там начинаем вводить на клавиатуре "Командная строка" и когда приложение командная строка появляется на экране, кликаем по нему правой кнопкой мыши и нажимаем "Запуск от имени администратора":
Запускаем командную строку от имени администратора

И в окне командной строки вводим последовательно следующие команды:

netsh.exe advfirewall firewall add rule name="Allow SSH to WSL" dir=in action=allow enable=yes profile=any localport=22 protocol=tcp
netsh interface portproxy delete v4tov4 listenport=22 listenaddress=0.0.0.0
netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=172.21.241.112

Первая их этих команд создает новое правило firewall'а разрешающее подключения к 22 (TCP) порту SSH сервера извне (обратите внимание, подключение будет доступно с любых удаленных компьютеров. Если ваш ПК находится в локальной сети, то это правило разрешит подключение к WSL со всех ПК находящихся в вашей локальной сети, если же ваш компьютер напрямую подключен к интернет, не через роутер, и имеет внешний белый IP адрес - то доступ к SSH будет открыт и для компьютеров из интернет).

Вторая команда удаляет уже существующие правила portproxy, а третья добавляет правило portproxy для SSH порта WSL. Как мы уже успели заметить наша WSL машина находится в "виртуальной сети" и чтобы открыть к ней доступ "извне" со стороны физической сети - необходимо правило portproxy.

Обратите внимание, по-умолчанию в Ubuntu (данная настройка находится в файле /etc/ssh/sshd_config) запрещены подключения к SSH с паролем (PasswordAuthentication no), поэтому нам придется создать публичный ключ для SSH и подключаться с ним.

Запускаем SSH клиент SecureCRT и через меню Tools -> Create Public Key создаем ключевую пару:

На все вопросы отвечаем по-умолчанию, кроме вопроса о типе и имени ключевой пары, там выбираем OpenSSH Key format (new) и называем файл - wsl. Также запоминаем путь к нему. Открываем файл wsl.pub в блокноте и копируем его содержимое в буфер обмена:

Файл wsl.pub (публичный ключ SSH)

Теперь вводим следующие команды в консоли Ubuntu:

echo "ssh-rsa строка-публичного-ключа" >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
sudo service ssh restart
Прописываем сгенерированный нами SSH ключ в Ubuntu

На этом настройка нашего SSH сервера завершена. Теперь создаем новое подключение к нашему SSH серверу в SecureCRT (в качестве IP адреса указываем IP машины с Windows 10 в локальной сети или 127.0.0.1, если вы подключаетесь SSH клиентом с того же компьютера на котором находится WSL) и пробуем подключиться. Если вы все сделали верно, то подключение пройдет успешно:

Подключение к WSL через SSH клиент

На всякий случай для продвинутых читателей оставим здесь две ссылки на инструкции на английском:

Первая из них рассказывает как настроить SSH доступ к WSL с паролем на альтернативном порту (обратите внимание, конфигурация по-умолчанию, которую используем мы с RSA-ключом более безопасна), а во второй рассказывается как настроить параметры прокси для подключений IPv4 к другому порту IPv4.

Подготавливаем Linux к сборке Komodo из исходников

Если вы добрались до этого раздела, то предполагается что у вас уже есть установленный Linux Ubuntu 18.04 LTS (внутри WSL или другим способом), а также у вас есть способ вводить команды в консоли Linux (через приложение Ubuntu в Windows 10 или через SSH).

Первое что мы сделаем - это обновим пакеты с помощью команд:

sudo apt update
sudo apt upgrade

Затем установим необходимые зависимости для сборки:

sudo apt-get install build-essential pkg-config libc6-dev m4 g++-multilib autoconf libtool ncurses-dev unzip git python python-zmq zlib1g-dev wget libcurl4-gnutls-dev bsdmainutils automake curl cmake mingw-w64

Сразу оговорюсь что собирать мы будем Windows версию Komodo, т.е. в результате сборки у нас получатся бинарники (исполняемые файлы), предназначенные для запуска именно в Windows, они будут иметь расширение .exe и будут запускаться на любой 64-битной ОС Windows, начиная с Windows 7. Таким образом Linux в WSL у нас будет просто использоваться как сборочная среда, запускать же ноду Komodo или GUI кошелек мы будем непосредственно в Windows. Можно было пойти и другим путем и собрать исполняемые файлы для Linux, но тогда и запускать ПО Komodo нам бы пришлось внутри WSL, а не в нашем привычном Windows окружении.

Далее выполняем следующие две команды:

sudo update-alternatives --config x86_64-w64-mingw32-gcc
sudo update-alternatives --config x86_64-w64-mingw32-g++

И в обоих случаях с помощью ввода соответствующей цифры и нажатия клавиши Enter выбираем posix вариант компилятора (в списке будет несколько позиций оканчивающихся на win32 и одна позиция оканчивающаяся на posix, вам необходимо выбрать ее):

Выбираем posix версию компилятора gcc / g++

И еще одну для подавления возможной ошибки с libwinpthread-1.dll:

sudo bash -c "echo 0 > /proc/sys/fs/binfmt_misc/status"

Сборка из исходников

После чего можно переходить непосредственно к сборке:

git clone https://github.com/DeckerSU/KomodoOcean --branch static --single-branch # (1)
cd KomodoOcean # (2)
./zcutil/build-win.sh -j$(nproc -all) # (3)

Первая команда клонирует репозиторий KomodoOcean на ваш компьютер, вторая - перейдет в каталог с репозиторием, а третья - непосредственно запустит сборку. Сборка может занять достаточно продолжительное время, плюс вам понадобится хорошее высокоскоростное соединение с интернет, т.к. в процессе сборки из интернет скачиваются необходимые для сборки зависимости, как говорится "откиньтесь на спинку кресла и отдохните", пока ПО Komodo собирается на вашем ПК. Если все сделано правильно, то в финале сборки вы увидите примерно следующие строки:

Сборка KomodoOcean завершена.

После чего копируем собранный бинарник komodo-qt.exe на диск D:\ выполнив следующую команду в консоли WSL - (1), или на Рабочий Стол (2):

sudo cp ./src/qt/komodo-qt.exe /mnt/d/ # (1)
sudo cp ./src/qt/komodo-qt.exe /mnt/c/Users/user/Desktop/ # (2)

Обратите внимание на пути, если вы хотите скопировать бинарник на диск D:\ вводите /mnt/d/ в конце, если же на Рабочий Стол пользователя user - используйте /mnt/c/Users/user/Desktop/ как пусть, где user имя вашего пользователя в Windows.

Подготовка к запуску

Теперь осталось создать файл конфигурации komodo.conf следующего вида:

txindex=1
onlynet=ipv4
# rpcuser=komodo
# rpcpassword=local321
rpcallowip=127.0.0.1
rpcbind=127.0.0.1
server=1

И сохранить его в %APPDATA%\Komodo\komodo.conf :

После чего останется только скачать ZCashParams с помощью этого скрипта (потребуется wget64.exe) и запустить получившийся exe'шник.

Запуск Komodo-Qt (KomodoOcean)

Komodo-Qt (KomodoOcean) собранный из исходников запустился.

Поздравляем! Вы успешно собрали Komodo-Qt (KomodoOcean) из исходников и запустили его. Сразу после запуска начнется процесс синхронизации с сетью, который зависит от скорости вашего интернет соединения и займет примерно около суток.

В следующих статьях мы подробнее расскажем о том как можно завершить процесс синхронизации с сетью быстрее, с помощью bootstrap'а, а также как использовать Komodo-Qt (KomodoOcean) наиболее эффективно. Ну а пока, оставайтесь с нами и не забудьте поделиться ссылкой на эту статью в социальных сетях и мессенджерах.