Raspberry Pi 4 и Komodo

Сегодня мы поговорим о возможностях использования семейства одно платных компьютеров Raspberry Pi для развертывания ноды / кошелька Komodo, а также попробуем понять насколько это оправданно и эффективно. Ни для кого не секрет, что запустить bitcoin-ноду на RPi не представляет особенных проблем, для этого даже есть специальное ПО, такое как Umbrel, myNode и т.п. Однако, аналогичные широко распространенные решения для Komodo (KMD) или того же ZCash (ZEC) - почему-то встречаются гораздо реже. И причина здесь в повышенных системных требованиях к оперативной памяти (RAM) устройства, на котором предполагается работа ноды.

Если для ПО Bitcoin размер RAM не так критичен, и тот же демон Bitcoin Core (bitcoind) может превосходно чувствовать себя и при наличии на устройстве всего 2 Gb RAM, то для работы ПО Komodo (ZCash, Pirate и т.п.) требуется уже минимум 4 Gb свободной (!) оперативной памяти. Т.е. необходимо чтобы на девайсе было минимум 8 Gb RAM. До недавнего времени для одно платных компьютеров семейства Raspberry Pi это было недостижимо, однако с выходом модели Raspberry Pi 4 ситуация изменилась:

Raspberry Pi 4 Model B

Как видно из спецификаций:

  • Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz
  • 2GB, 4GB or 8GB LPDDR4-3200 SDRAM (depending on model)
  • 2.4 GHz and 5.0 GHz IEEE 802.11ac wireless, Bluetooth 5.0, BLE
  • Gigabit Ethernet
  • 2 USB 3.0 ports; 2 USB 2.0 ports.
  • Raspberry Pi standard 40 pin GPIO header (fully backwards compatible with previous boards)
  • 2 × micro-HDMI ports (up to 4kp60 supported)
  • 2-lane MIPI DSI display port
  • 2-lane MIPI CSI camera port
  • 4-pole stereo audio and composite video port
  • H.265 (4kp60 decode), H264 (1080p60 decode, 1080p30 encode)
  • OpenGL ES 3.1, Vulkan 1.0
  • Micro-SD card slot for loading operating system and data storage
  • 5V DC via USB-C connector (minimum 3A*)
  • 5V DC via GPIO header (minimum 3A*)
  • Power over Ethernet (PoE) enabled (requires separate PoE HAT)
  • Operating temperature: 0 – 50 degrees C ambient

Существуют 2-х, 4-х и 8-гигабайтные версии этого мини-ПК. Нас, как вы уже поняли, интересует именно 8-ми гигабайтная версия. Давайте попробуем посчитать, что нам потребуется для начала:

Помимо этого нам также потребуется microSD карта для установки ОС, а также жесткий диск (HDD) или, что лучше, твердотельный накопитель (SSD) с интерфейсом USB 3.0 для хранения блокчейнов. Здесь каждый может выбрать себе решение по бюджету, например, на кейсе для HDD/SSD, если его внешний вид абсолютно не важен, можно сэкономить и взять самый дешевый. Найти 1 Tb SSD накопитель в пределах 7-8 тыс. руб. также не представляет проблем.

Знакомимся с комплектующими

Комплектующие для сборки ноды Komodo на Raspberry Pi

По итогам, все комплектующие были заказаны и доставлены вовремя, кроме HDMI кабеля, который, как оказалось, был у нас в наличии. Однако, переходник micro-HDMI - HDMI все же пришлось докупить, равно как и картридер, которого тоже почему-то не оказалось под рукой. Суммарно, все комплектующие нам обошлись в 23048 руб., что уже превышает стоимость того же бюджетного ноутбука или ПК начальной комплектации. Экономически - покупка стационарного ПК для запуска ноды Komodo кажется более выгодной, однако, не стоит забывать о том, что решение на Raspberry Pi, помимо всего прочего, компактно, энергоэффективно, а, главное, бесшумно. Впрочем, провести сравнение с обычным ПК и поговорить о плюсах и минусах - мы, я думаю, еще успеем.

Материнская плата Raspberry Pi 4 Model B, блок питания, корпус

Вот так скромно выглядит комплект поставки материнской платы:

Raspberry Pi 4 Model B, комплект поставки

А вот так, все это выглядит после установки в корпус:

Оригинальный блок питания для Raspberry Pi 4

Блок питания для нашего мини-ПК решено было брать оригинальный, на фото выше - вы видите его характеристики и внешний вид. Как видите, система охлаждения (радиатор и кулер для чипа) у нас пока не предусмотрена, но это не беда, если в наших задачах SoC будет греться - всегда есть вариант докупить его.

После того как все собрано (корпус кстати получился очень удобным, в плане открывания / закрывания), остается только установить программное обеспечение.

Устанавливаем ОС

Заходим на сайт https://www.raspberrypi.org/software/ и скачиваем и устанавливаем Raspberry Pi Imager. С помощью этого ПО можно выбрать и установить необходимую ОС на microSD в несколько кликов. Выбираем в меню Other general purpose OS -> Ubuntu 20.04.3 LTS (RPi 3/4/400) 64-bit (обратите внимание, нас интересует именно 64-битная серверная версия ОС):

Raspberry Pi Imager: выбор ОС для установки

Если вас по каким-то причинам не устраивает автоматический установщик или вы не хотите пользоваться Raspberry Pi Imager, вы можете скачать образ ОС здесь и ознакомиться с инструкцией по "ручной установке" тут.

Пока ОС копируется на флешку, можно успеть собрать бокс для SSD, в нашем случае процесс копирования оказался не быстрым и занял больше 5-7 минут, судя по ощущениям:

Установка SSD для хранения блокчейн в кейс (бокс)

По окончании копирования ОС на microSD вы увидите вот такое сообщение:

Завершение копирования ОС на microSD карту

Настраиваем ПО

После завершения копирования - самое время вставить нашу microSD в Raspberry Pi и подключить его к сети:

Raspberry Pi в сборе

По-умолчанию Ubuntu настроена на получение адреса по DHCP, поэтому, если вы все сделали правильно, то после включения питания и подключения Ethernet кабеля вы должны увидеть ваш Raspeberry Pi в списке DHCP Leases вашего роутера. Также, после запуска ОС вы сможете подключиться к вашему мини-ПК по SSH, используя логин и пароль - ubuntu / ubuntu. Для подключения по SSH мы рекомендуем использовать PuTTY  или SecureCRT:

Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-1042-raspi aarch64)

После входа в систему и обязательной смены пароля по-умолчанию, обновим пакеты и установим минимально необходимый нам набор пакетов:

sudo apt update
sudo apt upgrade
sudo apt install curl wget git mc ssh-import-id libgomp1

Теперь настало время подключить и разметить наш USB SSD. Вводим команду lsblk и убеждаемся что устройство sda присутствует в списке. Также убеждаемся что это наш SSD, с помощью sudo fdsik -l /dev/sda:

Убеждаемся что подключенный через USB SSD видится системой

Мы попробуем отформатировать диск в системе exFAT, чтобы к данным, расположенным на нем, можно было без проблем получить доступ и в Linux, и в Windows. Это нужно для того, чтобы отсоединив диск от Raspberry Pi вы могли записать на него что-то, подключив его к вашему Windows ПК, т.к. если мы бы отформатировали диск в ext4, то его использование с ОС Windows было бы затруднительно. Однако, перед тем как форматировать диск, необходимо разметить, для этого:

  • Запускаем fdisk с помощью sudo fdisk /dev/sda
  • Нажимаем g для создания таблицы разделов GPT
  • Нажимаем n для создания нового раздела. Т.к. мы будем создавать на диске всего один раздел, то на все последующие вопросы о номере раздела, стартовом и конечном секторе отвечаем просто нажатием Enter. В результате у нас будет создан раздел с типом Linux filesystem.
  • Изменим типа раздела на Microsoft Basic Data Partition (EBD0A0A2-B9E5-4433-87C0-68B6B72699C7), нажав t и введя 11
  • После чего нажмем w для сохранения изменений и окончания разметки диска.
Разметка USB SSD диска

Будьте внимательны при разметке диска, если к вашему Raspberry Pi подключено больше одного USB устройства, при неправильном выборе диска, вы рискуете удалить все данные на вашем устройстве.

Теперь осталось создать файловую систему, т.е. отформатировать диск в exFAT:

sudo apt install exfat-utils
sudo mkfs.exfat -n BLKCHAIN /dev/sda1
sudo fsck.exfat /dev/sda1
sudo mkdir /mnt/exfat
sudo mount -t exfat /dev/sda1 /mnt/exfat
Создание и монтирование файловой системы exFAT

Создадим папки для блокчейна, соответствующие им symlink'и, а также файл конфигурации komodo.conf:

cd ~
mkdir /mnt/exfat/.zcash-params
mkdir /mnt/exfat/.komodo
ln -s /mnt/exfat/.zcash-params/ .zcash-params
ln -s /mnt/exfat/.komodo/ .komodo

cat <<EOF > ~/.komodo/komodo.conf
txindex=1
onlynet=ipv4
rpcuser=komodo
rpcpassword=local321
rpcallowip=127.0.0.1
rpcbind=127.0.0.1
server=1
EOF

И наконец, скачаем параметры ZCashParams, необходимые для корректной работы демона Komodo:

wget https://raw.githubusercontent.com/KomodoPlatform/komodo/master/zcutil/fetch-params.sh
chmod +x fetch-params.sh
./fetch-params.sh

Теперь скачаем и запустим демон komodo для архитектуры aarch64. К слову, ни на официальном сайте Komodo, ни в Git'е проекта - мы не нашли релизов komodod для этой архитектуры. Однако, буквально на днях один из членов команды Komodo опубликовал ссылку на бинарники komodod для архитектуры aarch64 на канале #dev-general в Discord'е Komodo. Чем мы и воспользовались:

wget https://download.kmd.sh/komodo/komodo-0.7.1-aarch64-linux-gnu.tar.gz
tar zxvf komodo-0.7.1-aarch64-linux-gnu.tar.gz

Можно запускать демон:

./komodod &
Нода komodo, запущенная на Raspberry Pi 4 Model B

Поздравляем, вы запустили ноду komodo на вашем Raspberry Pi 4 Model B. Теперь, когда демон Komodo (komodod) работает мы можем воспользоваться утилитой komodo-cli для управления им. Например, с помощью команды ./komodo-cli getinfo мы можем посмотреть текущий статус:

Вывод komodo-cli getinfo

Например, мы видим что на момент ввода команды синхронизировано 36787 блоков из 2586653, текущий баланс нашего кошелька (на момент последнего синхронизированного блока) - 0 KMD, а также другую информацию. По завершению синхронизации вы сможете начать полноценно пользоваться cli кошельком. Как? Мы расскажем в следующих статьях.

Оставайтесь с нами, делитесь ссылками на наши статьи в социальных сетях, мессенджерах и на профильных форумах. Впереди еще много интересного!

Вместо FAQ

  • Для того чтобы безопасно извлечь ваш USB SSD необходимо сначала остановить демона komodo с помощью команды ./komodo-cli stop, затем отмонтировать файловую систему sudo umount /mnt/exfat и только потом физически извлекайте устройство из USB.
  • Если вы перезагрузили ваш Raspberry Pi или вытащили / вставили USB диск - необходимо снова примонтировать файловую с помощью sudo mount -t exfat /dev/sda1 /mnt/exfat .
  • Если вы будете экспериментировать с получением / отправкой KMD - не забывайте что все ваши приватные ключи, которые дают доступ к вашим монетам хранятся в файле ~/.komodo/wallet.dat и только в нем. Поэтому не забывайте периодически делать его резервную копию куда-либо.
  • Как посмотреть температуру CPU вашего Raspberry Pi:
    sed "s/\(...\)$/.\1°C/" < /sys/class/thermal/thermal_zone0/temp (в наших тестах температура CPU в процессе синхронизации держалась в районе 70-71°C, при использовании кейса без радиаторов, т.е. без какой-либо даже пассивной системы охлаждения).

Решение проблем

  • В процессе работы системы выяснились несколько неприятных моментов. С пластиковым корпусом без какой-либо, даже пассивной, системы охлаждения температура CPU в процессе работы достигала 70+ градусов. Было принято решение заменить корпус на тот, который планировался изначально - Qumo Aluminum. После замены корпуса температура в процессе работы держалась в пределах 50 градусов.
  • Также выяснилось, что USB SSD по каким-то причинам периодически самопроизвольно "переподключается", что влияет на общую стабильность системы при работе с блокчейном. Заказали вот такой Разветвитель USB GiNZZU GR-384UAB хаб с дополнительным питанием. Чуть позже расскажем о полученном опыте его использования.
  • После подключения USB хаба с дополнительным питанием - проблема с "переподключениями" и периодическими зависаниями при операциях с SSD, в нашем случае, к сожалению, сохранилась. После чего мы решили попробовать переформатировать SSD в ext4, вместо exFAT, пожертвовав "совместимостью" с Windows системами. Как показала практика - это стало решением всех проблем.
cd ~
rm .komodo
rm .zcash-params # удаляем созданные ранее symlink'и из $HOME
# переразмечаем диск и создаем один раздел, с помощью fdisk, только теперь
# уже не меняем тип раздела, а сразу после его создания записываем изменения
# на диск с помощью команды w
sudo mkfs -t ext4 /dev/sda1 # создаем ФС ext4
sudo mkdir /mnt/ssd # создаем точку монтирования
sudo mount -t ext4 /dev/sda1 /mnt/ssd/ # монтируем ФС
sudo chown -R ubuntu:ubuntu /mnt/ssd # не забываем про права
# содаем папки и symlink'и
mkdir /mnt/ssd/.zcash-params
mkdir /mnt/ssd/.komodo
ln -s /mnt/ssd/.zcash-params/ .zcash-params
ln -s /mnt/ssd/.komodo/ .komodo
# далее все также, как и описано выше, начиная с создания komodo.conf


USB-хаб GiNZZU GR-384UAB в работе