Домашняя нода - это просто и выгодно!

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


Операционная система будет Ubuntu, никаких монитора, клавиатуры и мыши не понадобится. Устанавливать и обслуживать ноду вы будете со своего обычного домашнего компа (не чаще, чем выходит новая версия ноды на github).
Итак, что нам понадобится:

  1. Для начинающих я рекомендую модуль eMMC флеш объемом 64G. Технология eMMC по своим характеристикам приближается к SSD. Этот “диск” крепится прямо к плате Rock64 и даст возможность разместить на нем как операционную систему Ubuntu, так и весь софт ноды с блокчейном.
  2. Если вы продвинутый пользователь, лучше выбрать внешний SSD носитель. Я купил себе Goodram IRDM 120GB 2.5" SATAIII c переходником. Кроме того, для работы собственно операционки Ubuntu я взял модуль eMMC на 16G. Можно было бы обойтись без этого и грузиться прямо с внешнего SSD диска, тут уж как вам позволит фантазия.
    Вам потребуются скиллы - монтирование раздела во время загрузки и создание символьных ссылок. В статье я этого не описываю, для специалиста вопросов быть не должно.

Итак, приступим. Сразу поделюсь своим печальным опытом на этапе заказа плат Rock64. Хитрые китайцы откровенно впаривают брак! Год назад я заказал 3 платы, все 3 оказались дефектными. Эмпирическим путем я позднее выяснил, на что обращать внимание при покупке.


Стрелкой показано, где контролёры ставят метку маркером. Если на вашей Rock64 закорючка в этом месте - скорее всего, придется отсылать на замену (в Штаты). Для обоснования претензий придется развернуть весь софт ноды и дать ей поработать. У меня неисправные вылетали с ошибкой в течение 10 минут - часа.
Если в ваших краях есть магазин дистрибьютера - лучше прийти туда и лично убедиться, что вам достанется.

Итак, распакуем плату Rock64. С помощью программы Etcher запишем образ u-boot-flash-spi-rock64.img.xz на SD карту. Вставляем SD в Rock64 и включаем питание. Где-то через полминуты начнет мигать светодиод Power с интервалом около секунды. Можно выключать питание, SD карта больше не понадобится. Теперь наша Rock64 умеет загружаться с нескольких источников, например, с USB или по сети. Даже если вы планируете использовать исключительно модуль eMMC, это не повредит.

Приступаем к установке операционной системы. Вставляем модуль eMMC в адаптер USB и Etcher’ом зашиваем туда образ (Ubuntu_bionic_default.7z). Безопасно извлекаем адаптер и вставляем eMMC в плату Rock64 на постоянное место жительства. Собираем плату в корпусе, снимаем защитные пленки с теплоотводящей прокладки и клеим ее на радиатор. Желательно, чтобы прокладка не накрывала модуль eMMC, чтобы не возникло механического перекоса с последующим ухудшением контакта в разъеме. Накрываем крышку корпуса и завинчиваем.
Соединяем будущую ноду Ethernet кабелем с роутером и включаем питание.
Спустя примерно минуту в вашей локальной сети появится новое устройство, предположим, роутер назначил ему ip адрес 192.168.1.130 (я буду использовать этот адрес далее в качестве примера). Если dhcp в роутере отключено, очевидно, вы сами знаете, что делать :slight_smile:
Если нового устройства в локальной сети не появилось, придется подключать к Rock64 монитор и смотреть, в чем беда. Это электроника, наука неточная, всякое бывает.

Итак, устройство в сети появилось. Нам нужно пробросить порт 6868 для связи с нодой. Опционально можно также прокинуть порт для доступа к ноде по ssh для управления извне. Подробнее тут писать я не вижу смысла, поскольку роутеры у всех разные и способы, соответственно, тоже.

Берем свой домашний компьютер, заходим в командную строку и набираем:
ssh root@192.168.1.130
В качестве пароля вводим 1234.
root/1234 - это дефолтные логин и пароль пользователя при первом старте операционных систем от Armbian. Далее вам будет предложено сменить пароль администратора и завести нового пользователя. Проделайте это. Пусть имя нового пользователя будет rock64. Выбирайте сложные пароли - это основа безопасности ваших средств. В дальнейшем для подключения к вашей ноде надо будет набирать:
ssh rock64@192.168.1.130
Если потребуется выполнить какую-то команду от имени администратора, достаточно добавить в начале sudo и ввести пароль администратора, если спросят.
sudo команда

Давайте обновим систему до последней версии:
sudo apt update
sudo apt upgrade
Скорее всего, обновится ядро linux и потребуется перезагрузка для активации изменений:
sudo reboot NOW
Связь с терминалом вашего компьютера будет разорвана, где-то через минуту вновь залогиньтесь:
ssh rock64@192.168.1.130

Устанавливаем Java:
sudo apt install openjdk-8-jdk
Проверяем:
java -version
Получим нечто подобное:
java version “1.8.0_221”
Java™ SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot™ 64-Bit Server VM (build 25.221-b11, mixed mode)

Для удобства навигации и редактирования, установим также программу Midnight Commander:
sudo apt install mc

Продлеваем жизнь нашего диска, а заодно слегка увеличиваем быстродействие системы (отключаем системные логи)
sudo service rsyslog stop
sudo systemctl disable rsyslog

Переходим в домашнюю папку:
cd ~
Скачиваем последнюю версию ноды (на момент написания статьи, это 1.1.2)
wget https://github.com/wavesplatform/Waves/releases/download/v1.1.2/waves_1.1.2_all.deb
Устанавливаем ноду:
sudo dpkg -i waves_1.1.2_all.deb
Устанавливаем недостающую в стандартной поставке ноды библиотеку (для архитектуры arm64):
wget https://dl.bintray.com/brox/leveldbjni/org/fusesource/leveldbjni/leveldbjni-all/1.20.1/leveldbjni-all-1.20.1.jar
sudo cp leveldbjni-all-1.20.1.jar /usr/share/waves/lib/
sudo mcedit /usr/share/waves/bin/waves
Находим текст org.ethereum.leveldbjni-all-1.18.3.jar и меняем его на leveldbjni-all-1.20.1.jar. Сохраняем и выходим.

Небольшое лирическое отступление. Эту библиотеку leveldbjni-all-1.20.1.jar собрал я из исходников, которые были заброшены авторами много лет назад. Там один единственный артефакт - для архитектуры linux-arm64. Чтобы добавить его в официальную ноду, предстоит много головной боли - надо добавить все уже имеющиеся артефакты (win-x86, win-x64, osx, linux-x86, linux-x64) в один пакет. Возможно, кто-то возьмется за эту работу, но точно не я :slight_smile:

Теперь осталось отредактировать файл конфигурации.
sudo mcedit /usr/share/waves/conf/waves.conf
Это тема для отдельной статьи, и я, пожалуй, здесь останавливаться на этом не буду. Скажу лишь, что для начала вам не понадобится ни rest API, ни матчер. Ограничьтесь минимальными изменениями.

Время скрестить пальцы и испытать!
sudo service waves start
Чтобы наблюдать за процессом вживую, набираем:
journalctl -u waves.service -f
Если увидим нечто вроде

-- Logs begin at Thu 2019-09-26 13:01:40 UTC. -- Sep 26 13:01:41 rock64 systemd[1]: Started Waves node. Sep 26 13:01:43 rock64 waves[687]: Java HotSpot(TM) 64-Bit Server VM warning: G1 GC is disabled in this release. Sep 26 13:01:55 rock64 waves[687]: INFO c.w.Application$ - Starting... Sep 26 13:01:58 rock64 waves[687]: INFO a.event.slf4j.Slf4jLogger - Slf4jLogger started Sep 26 13:02:00 rock64 waves[687]: INFO c.w.Application$ - Waves v1.1.2 Blockchain Id: W Sep 26 13:04:39 rock64 waves[687]: INFO c.w.n.PeerDatabaseImpl - Loaded 180 known peer(s) from peers.dat Sep 26 13:04:42 rock64 waves[687]: INFO c.w.n.HandshakeHandler$Server - [2a47954f 54.93.155.41:45932] Accepted handshake Handshake(wavesW,(1,1,2),Fork Detector,1562767266,Some(/54.93.155.41:6868)) Sep 26 13:04:42 rock64 waves[687]: INFO c.w.n.HandshakeHandler$Server - [3e771e8b 35.156.19.4:42664] Accepted handshake Handshake(wavesW,(1,1,2),waves-official-eu-node-7,432078,Some(/35.156.19.4:6868)) Sep 26 13:04:44 rock64 waves[687]: INFO c.w.s.BlockchainUpdaterImpl - New height: 1723531 Sep 26 13:04:46 rock64 waves[687]: INFO c.w.n.HandshakeHandler$Server - [dab60aa7 185.70.86.16:52574] Accepted handshake Handshake(wavesW,(1,1,2),Xsentus Node,806927,None)

значит, все в порядке. Нет надобности ждать сутками до полной загрузки всего блокчейна - лучше скачать уже готовый.
Прервать вывод journalctl, как и любой другой вывод на экран, можно по Ctrl+C
Остановим ноду:
sudo service waves stop

sudo rm -rf /var/lib/waves/data
sudo wget -qO- http://blockchain.wavesnodes.com/blockchain_last.tar | tar xv -C /var/lib/waves

Наконец, снова запускаем ноду и ждем, пока в логах появится майнинг микроблоков.
sudo service waves start
journalctl -u waves.service -f

Sep 26 13:46:30 rock64 waves[687]: INFO c.w.s.BlockchainUpdaterImpl - MicroBlock(5QjiXAw… -> 3D9WAYw…, txs=8) appended
Sep 26 13:46:36 rock64 waves[687]: INFO c.w.s.BlockchainUpdaterImpl - New height: 1723590

На этом настройку ноды можно считать завершенной. Ради интереса можете запустить утилиту htop и полюбоваться:
htop
(выход - F10)

Набираем в командной строке exit и ждем, пока нода появится в списке. Заходим в холодный кошелек, переводим в лизинг на адрес кошелька ноды не менее 1000 waves, радуемся :slight_smile:

2 Симпатий

Спасибо за статью, очень круто всё описано. И, как я понял, проблем с производительностью никаких. А что касается аптайма? Насколько мне известно, операторы домашнего интернета раз в Х дней гарантированно дропают коннекшн?

У меня дропается на пару минут, все само реконнектится, аптайм 99.9%
“Ни единого разрыва :slight_smile:

Ну для домашнего эксперимента более чем, полагаю =)

Основная проблема может быть, если уехал, а электричество рубанули. Ставить еще бесперебойник не очень хочется, да и могут надолго вырубить. Пока кнопку не нажмешь, не запустится. Но это редко бывает. Для небольшой ноды вариант, для крупных нод, конечно VPS.

Тоже думаю компактную станцию развернуть, на miniITX можно уложиться в 10-12к с запасом по ресурсу (цены в магазинах СПб, можно и дешевле, если с заморочками). Есть железо, но более громоздкое, хочется компактный вариант. В принципе по сравнению с VPS окупится за год, только есть запас по ресурсам и можно модернизировать, если что ОЗУ еще воткнуть, SSD-120 на год-два должно хватить, к камню не требовательно. Да и если что сгорело, можно заменить, а Rock64, если еще и с таким процентом брака, я лучше переплачу…

Первый месяц моя нода жила на VPS, и за этот месяц даунтайм был 8 часов! Дома и за полгода столько не накопилось

Что-то многовато. У меня дома комп вечно работающий столько не дает. Тех работы были наверно.

Охлаждение, как по мне, и в правду ни к чему. Температура едва до 70 дойдет, а это норма.

Летом доходила до 72 (с радиатором), правда за окном было под 40

Не критично ведь всё равно, верно?
Я конечно сужу опираясь на температуры гпушек

Кажись, где-то читал, что сам CPU выдерживает до 120 градусов