Skip to content

Развертка witness node BitShares и CLI Wallet на linux машине из исходников

Maksim Parkhomenko edited this page Jan 23, 2018 · 8 revisions

Сборка ноды и клиента кошелька из исходников

Процесс сборки

  1. Для начала подтянем исходники из репозитория на GitHub и все необходимые подмодули при помощи git.
    git clone https://github.com/bitshares/bitshares-2
    cd bitshares-2
    git submodule update --init --recursive
    cd ..
    
  2. Далее понадобится установить все необходимые зависимости для чистой установки на Ubuntu 14.04 LTS.
    sudo apt-get update
    sudo apt-get install gcc-4.9 g++-4.9 cmake make \
                         libbz2-dev libdb++-dev libdb-dev \
                         libssl-dev openssl libreadline-dev \
                         autoconf libtool git libcurl4-openssl-dev
    
  3. Для сборки ноды нам потребуется библиотека boost версии 1.57.0.
    В связи с тем, что с Ubuntu 15.04 поставляется слишком старая версия данной библиотеки, её придется установить руками. Стоит заметить, что boost 1.58.0 требует C++14 в связи с чем не может быть собран на Ubuntu LTS.
    export BOOST_ROOT=$HOME/opt/boost_1_57_0
    sudo apt-get update
    sudo apt-get install autotools-dev build-essential \
                         g++ libbz2-dev libicu-dev python-dev
    wget -c 'http://sourceforge.net/projects/boost/files/boost/1.57.0/boost_1_57_0.tar.bz2/download'\
         -O boost_1_57_0.tar.bz2
    sha256sum boost_1_57_0.tar.bz2
    # "910c8c022a33ccec7f088bd65d4f14b466588dda94ba2124e78b8c57db264967"
    tar xjf boost_1_57_0.tar.bz2
    cd boost_1_57_0/
    ./bootstrap.sh "--prefix=$BOOST_ROOT"
    ./b2 install
    
    Команда sha256sum boost_1_57_0.tar.bz2 служит для проверки валидности скачанного архива, ее вывод должен совпадать с содержимым следующей закомментированной строки.
  4. После установки всех зависимостей и загрузки исходников BitShares мы можем собрать ноду. Для этого нужно запустить cmake для конфигурации, а затем произвести сборку из исходников при помощи make. Если вам нужен только клиент кошелька, то следует пропустить команду make witness_node.
    cd ../bitshares-2
    cmake -DBOOST_ROOT="$BOOST_ROOT" -DCMAKE_BUILD_TYPE=Release .
    make witness_node
    
    Так же если вам понадобится использовать клиент-кошелек, собрать его можно следующей командой:
    make cli_wallet
    
    Стоит отметить, что переменная окружения $BOOST_ROOT должна указывать ваш на путь установки boost в случае, если вы установили его самостоятельно.

Примечания

Ubuntu 14.04

В связи с тем, что g++-4.9 не доступен на 14.04 LTS, сперва придется добавить репозиторий.

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update

Если у вас проблемы в процессе сборки из-за несовместимости ABI, используйте gcc 4.9.

CC=gcc-4.9 CXX=g++-4.9 cmake .

Ubuntu 15.04

Ubuntu 15.04 использует gcc 5, который имеет c++11 ABI по умолчанию, в то время как библиотека boost собрана с cxx11 ABI, что является проблемой на многих дистрибутивах. Если у вас проблемы в процессе сборки из-за несовместимости ABI, используйте gcc 4.9.

CC=gcc-4.9 CXX=g++-4.9 cmake .

Процесс обновления

Для того, чтобы обновить вашу ноду, нужно выполнить следующие команды (для обновления только клиента кошелька вам следует пропустить команду make witness_node):

cd ~/bitshares-2
git fetch
git checkout <version>
git submodule update --init --recursive
cmake .
make witness_node

Так же если вам понадобится обновить клиент-кошелек, сделать это можно следующей командой:

make cli_wallet

cd ~/bitshares-2 может отличаться в зависимости от того, по какому пути вы собирали свою ноду.

Запуск ноды

Нода собрана, настало время запустить ее. Для того чтобы запустить полную ноду, к которой можно подключаться, нам нужно открыть RPC интерфейс.

./programs/witness_node/witness_node --rpc-endpoint="0.0.0.0:8090"

Мы открыли порт 8090 и теперь он доступен через Интернет (за исключением ситуаций, связанных с router/firewall). Это вполне безопасно до тех пор, пока ваши приватные ключи не задействованы в процессе работы ноды (пока ваша нода не производит блоки). Если все же вы хотите оставить RPC интерфейс доступным только локально с данной машины, следует использовать "localhost:8090".
Стоит учитывать, что понадобится некоторое время, чтобы ваша нода синхронизировалась с сетью.

Файл конфигурации BitShares и рабочая директория

Нода принимает дополнительный параметр –data-dir для определения рабочей директории, где хранится конфигурация, блокчейн и локальные базы данных (по умолчанию это директория witness_node_data_dir, которая будет автоматически создана со стандартным файлом конфигурации, если его нет).
Файл конфигурации лежит в рабочей директории и называется config.ini, в нем можно задавать и переопределять параметры ноды, если стандартные вас не устраивают.
Стоит учитывать, что пути относительные от рабочей директории, из которой запускается нода.

Стабильность ноды и supervisor

Ноду рекомендуется запускать из под screen или tmux, чтобы она продолжала работать по завершению сессии. Но лучше всего доверить контроль над ней утилите supervisor.
Для начала следует установить ее:

sudo apt-get update
sudo apt-get install supervisor

Затем нужно добавить файл конфигурации supervisor для нашей ноды:

cd /etc/supervisor/conf.d
sudo nano sudo nano bitshares_node.conf

Файл следует дополнить следующим содержимым:

[program:bitshares_node]
command=/home/<user>/bitshares_witness_node/bitshares-2/programs/witness_node/witness_node --rpc-endpoint="0.0.0.0:8090"
directory=/home/<user>/bitshares_witness_node/bitshares-2
stdout_logfile=/var/log/supervisor/bitshares_node_out.log
stderr_logfile=/var/log/supervisor/bitshares_node_err.log
autostart=false
autorestart=true
numprocs=1
user=<user>

Стоит учитывать, что <user> нужно заменить на имя пользователя, от которого собиралась нода. Если вы понимаете, что делаете, следует указать необходимого вам пользователя для запуска и корректные пути к собранной ноде. Также рекомендуется ознакомиться с документацией к supervisor и кастомизировать файл конфигурации под ваши цели.
После того, как файл конфигурации создан и корректно заполнен, следует сказать supervisor об этом:

sudo supervisorctl update

Далее мы можем запускать, проверять статус и останавливать ноду следующими командами:

sudo supervisorctl start bitshares_node
sudo supervisorctl status
sudo supervisorctl stop bitshares_node

Развертка через Docker

Процесс развертки узла заметно упрощается при помощи Docker:

  1. Выкачиваем репозиторий с Dockerfile:
    git clone https://github.com/u-tech-bitshares/dockerfiles.git
    
  2. Собираем image:
    cd dockerfiles/bitshares-core
    docker build -t bitshares-2:ubuntu .
    
  3. Запускаем контейнер, закрыв RPC интерфейс от внешней сети:
    docker run --name bts-node -d -p 127.0.0.1:8090:8090 -p 9090:9090 bitshares-2:ubuntu
    
    Или оставив его открытым:
    docker run --name bts-node -d -p 8090:8090 -p 9090:9090 bitshares-2:ubuntu
    
    Для последующих остановки и запуска контейнера используйте команды:
    docker stop bts-node
    docker start bts-node
    
  4. Заворачиваем необходимые пути и порты через nginx на 127.0.0.1:8090 в случае, если RPC интерфейс закрыт от внешней сети и нужно его открыть.

Включение генерации блоков

Для того, чтобы нода могла генерировать блоки, нужно добавить два параметра в ее конфигурацию:

  • witness-id
  • private-key - пара из публичного ключа и приватного ключа кошелька

Параметр witness-id и публичный ключ можно получить из кошелька следующим образом:

>>> get_witness <accountname>
{
  [...]
  "id": "1.6.10",
  "signing_key": "GPH7vQ7GmRSJfDHxKdBmWMeDMFENpmHWKn99J457BNApiX1T5TNM8",
  [...]
}

Соответственно в конфигурации задается:

witness-id = "1.6.10"

Приватные ключи можно экспортировать из большинства кошельков (например dump_private_keys), в конфигурации они выглядят примерно так:

private-key = ["BTS7vQ7GmRSJfDHxKdBmWMeDMFENpmHWKn99J457BNApiX1T5TNM8","5JGi7DM7J8fSTizZ4D9roNgd8dUc5pirUe9taxYCUUsnvQ4zCaQ"]

Draft

  • When restarting the witness node, it may be required to append the –replay-blockchain parameter to regenerate the local (in-memory) blockchain state.

Источники и полезные статьи