🌐 Установка и запуск EOS на Windows

in #eos7 years ago

Если вы разработчик C++ для Windows, а MS Visual Studio — ваш любимый IDE, то вы наверняка задавались вопросом — возможно ли скомпилировать код EOS напрямую в Windows?

Мы несколько раз брались за C++ компиляторы в Windows, но безрезультатно. Основная проблема заключается в том, что, хотя код EOS и вписывается в WIN32, но, к сожалению, не полностью. Кроме того, компилятор Windows Clang ведёт себя иначе, чем его аналог Unix — он оказался более строгим. Например, такие выражения, как std::move(u8"env"), Windows не допускает.

Тем не менее, мы придумали альтернативное решение — это подсистема Windows для Linux в сочетании с интегрированной средой разработки Visual Studio Code. Как вы увидите, такой подход работает намного лучше, чем код, скомпилированный непосредственно в Windows.

Предусловия

Вам необходимо работать на Windows 10, версии 1703, также известной как Creators Update. Для подтверждения вашей версии Windows откройте Панель управления и перейдите к Система > Информация о системе.

Если у вас более ранняя версия Windows 10 и по каким-либо причинам вы не хотите обновляться до версии 1703, вы всё равно можете попробовать, если вам удастся обновить подсистему Windows для Linux с Ubuntu 14 до Ubuntu 16.

Подсистема Windows для Linux может быть установлена только на системный диск. Если объём вашего дискового пространства невелик (потребуется дополнительно 3-4 ГБ), возможно, вам потребуется расширить свой системный раздел с помощью средств, доступных для скачивания здесь.

Оснащение

Сначала мы включаем подсистему Windows для Linux, а затем получаем доступ к интерфейсу командной строки Bash из Visual Studio.

Подсистема Windows для Linux

Официальное руководство по установке подсистемы Windows для Linux можно найти здесь. Тем не менее для вашего удобства мы представляем следующую упрощённую процедуру:

  1. Откройте PowerShell в режиме администратора (кликните правой кнопкой мыши, выберите Запуск от имени администратора) и выполните команду: Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

  2. Перезагрузите компьютер при необходимости.

  3. Включите Режим разработчика:
    -- Откройте Панель управления и перейдите в Обновление и безопасность > Для разработчиков.
    -- Выберите Режим разработчика.
    -- При необходимости снова перезагрузите компьютер.

  4. Откройте командную строку Windows и введите bash. После принятия лицензионного соглашения образ пользовательского режима Ubuntu будет загружен и извлечен в %localappdata%\lxss\. Вам будет предложено создать имя пользователя для Linux и пароль. После завершения процесса ярлык под названием Bash on Ubuntu on Windows будет добавлен в ваше меню "Пуск".

  5. Запустите новую оболочку в Ubuntu, либо:
    -- Наберите bash в командной строке, или
    -- Используйте ярлык Bash on Ubuntu on Windows, доступный в меню "Пуск".

  6. После того, как вы окажетесь внутри оболочки Linux, убедитесь, что вы используете Ubuntu 16: lsb_release -a

  7. И, наконец, обновите Ubuntu:
    sudo apt update
    sudo apt full-upgrade

Повторная установка Ubuntu

Следующий шаг не является обязательным. Используйте его только в том случае, если вам по каким-либо причинам необходимо повторить установку Ubuntu.

  1. Откройте командную строку Windows и введите:
    lxrun /uninstall /full для удаления
    lxrun /install для повторной установки

  2. Наберите bash для запуска новой оболочки в Ubuntu и выполните обновление в ней:
    sudo apt update
    sudo apt full-upgrade

Visual Studio Code

Загрузите и установите Visual Studio Code с официального сайта. Для включения bash-консоли Ubuntu в Visual Studio Code необходимо изменить Параметры пользователя:
-- Перейдите к Файл > Настройки > Параметры пользователя.
-- Добавьте следующую запись в правую панель, чтобы изменить настройки по умолчанию: "terminal.integrated.shell.windows": "C:\\Windows\\sysnative\\bash.exe".
-- После сохранения изменений вы должны суметь переключить консоль Ubuntu с помощью Ctrl + ' или Вид > Интегрированный терминал.

В качестве дополнения можно добавить расширения C++ в Visual Studio Code, поскольку они могут быть полезны для разработки на C++. Набрав Ctrl + Shift + X, чтобы открыть панель расширений, вы сможете добавить следующие расширения:

-- C/C++
-- C++ Intelisense
-- CMakeTools
-- CMake Tools Helper
-- Code Runner

Компилирование исходного кода

Создайте рабочую локацию для EOS в файловой системе Windows. В этом руководстве мы будем использовать X:\Workspaces\EOS, но, очевидно, вы выберете своё собственное местоположение.

В файловой системе Linux вышеуказанное расположение будет отображено как /mnt/x/Workspaces/EOS. Выбранное вами местоположение будет отображено соответствующим образом.

Примечание: используйте нижний регистр для имени диска, как /mnt/x/ в нашем случае.

На этом этапе вы можете начать использовать оболочку Ubuntu в Visual Studio Code (Вид > Интегрированный терминал). Её главным преимуществом является поддержка простого способа копирования и вставки команд.

Все следующие команды должны выполняться в оболочке Ubuntu.

  1. Определите все следующие изменяемые параметры системы:
    export WORKSPACE_DIR=/mnt/x/Workspaces/EOS
    export EOSIO_INSTALL_DIR=${WORKSPACE_DIR}/eos
    export EOS_PROGRAMS=${EOSIO_INSTALL_DIR}/build/programs
    export TEMP_DIR=/tmp

Примечание: не забудьте заменить x/Workspaces/EOS на соответствующий путь к местоположению рабочей локации на вашем компьютере.

  1. Сохраните указанные выше системные переменные в файл ~/.bashrc
    echo "export WORKSPACE_DIR=${WORKSPACE_DIR}" >> ~/.bashrc
    echo "export EOSIO_INSTALL_DIR=${EOSIO_INSTALL_DIR}" >> ~/.bashrc
    echo "export EOS_PROGRAMS=${EOS_PROGRAMS}" >> ~/.bashrc

  2. Установите cmake и git:
    sudo apt install cmake
    sudo apt install git

  3. Клонируйте исходный код из репозитория EOS:
    cd ${WORKSPACE_DIR}
    git clone https://github.com/eosio/eos --recursive

  4. Теперь вы готовы приступить к фактической компиляции исходного кода. Этот шаг может занять несколько часов, что зависит от мощности компьютера, и потребует от вас периодического подтверждения некоторых действий. Также будет необходимо ввести пароль sudo.
    cd ${EOSIO_INSTALL_DIR}
    ./build.sh ubuntu full

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

Запуск исполняемых файлов

Если ошибки не произошло, вы получаете скомпилированный в вашей системе Windows код EOS с несколькими библиотеками и исполняемыми файлами в качестве результата. Исполняемые файлы помещаются в папку $EOS_PROGRAMS:

  • eosd – компонент ноды блокчейна на стороне сервера,
  • eosc – интерфейс командной строки для взаимодействия с блокчейном,
  • eos-walletd – кошелёк EOS,
  • launcher – приложение для создания и развертывания сети; более подробная информация доступна здесь.

На этом этапе вы должны иметь возможность запускать тесты, описанные в eos/README.md.

Для полноты картины давайте попробуем запустить EOS:
cd ${EOS_PROGRAMS}/eosd && ./eosd

На этом этапе должен произойти выход с ошибкой, указывающей на то, что файл genesis.json не определён. В том случае, если EOS не выходит с этой ошибкой, вы всегда можете закрыть его с помощью комбинации клавиш ctrl + C.

Производство блоков

Найдите путь к вашему файлу genesis.json. В нашем случае это каталог /mnt/x/Workspaces/EOS/eos/build/genesis.json, но, скорее всего, ваш путь будет другой, что зависит от выбранной рабочей локации.

Отредактируйте файл config.ini(в нашем случае он находится здесь: X:\Workspaces\EOS\eos\build\programs\eosd\data-dir\config.ini) Используя Блокнот (или другой текстовый редактор на ваш выбор), найдите запись enable-stale-production и измените её на enable-stale-production = true.

Затем добавьте в config.ini следующее содержимое:

genesis-json = /mnt/x/Workspaces/EOS/eos/build/genesis.json

producer-name = inita
producer-name = initb
producer-name = initc
producer-name = initd
producer-name = inite
producer-name = initf
producer-name = initg
producer-name = inith
producer-name = initi
producer-name = initj
producer-name = initk
producer-name = initl
producer-name = initm
producer-name = initn
producer-name = initq
producer-name = initr
producer-name = inits
producer-name = initt
producer-name = initu

plugin = eos::producer_plugin
plugin = eos::chain_api_plugin
plugin = eos::wallet_api_plugin
plugin = eos::account_history_api_plugin
plugin = eos::http_plugin 

Примечание: убедитесь, что для genesis.json задан верный путь – скорее всего, ваш путь будет отличаться от приведённого выше.

На этом этапе при повторном запуске eosd он должен начать производство блоков:
cd ${EOS_PROGRAMS}/eosd && ./eosd

Если всё работает нормально, вы должны увидеть в консоли следующее:

232901ms thread-0   chain_plugin.cpp:80           plugin_initialize    ] initializing chain plugin
232902ms thread-0   producer_plugin.cpp:159       plugin_initialize    ] Public Key: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
232903ms thread-0   http_plugin.cpp:132           plugin_initialize    ] host: 127.0.0.1 port: 8888
232905ms thread-0   http_plugin.cpp:135           plugin_initialize    ] configured http to listen on 127.0.0.1:8888
...
232998ms thread-0   producer_plugin.cpp:170       plugin_startup       ] producer plugin:  plugin_startup() begin
232999ms thread-0   producer_plugin.cpp:175       plugin_startup       ] Launching block production for 19 producers.

*******************************
*                             *
*   ------ NEW CHAIN ------   *
*   -   Welcome to EOS!   -   *
*   -----------------------   *
*                             *
*******************************

Your genesis seems to have an old timestamp
Please consider using the --genesis-timestamp option to give your genesis a recent timestamp

233012ms thread-0   producer_plugin.cpp:185       plugin_startup       ] producer plugin:  plugin_startup() end
233012ms thread-0   http_plugin.cpp:147           plugin_startup       ] start processing http thread
...
233059ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/account_history/get_transaction
233060ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/account_history/get_transactions
237003ms thread-0   chain_controller.cpp:235      _push_block          ] initq #1 @2017-09-29T16:03:57  | 0 trx, 0 pending, exectime_ms=0
237005ms thread-0   producer_plugin.cpp:233       block_production_loo ] initq generated block #1 @ 2017-09-29T16:03:57 with 0 trxs  0 pending
240003ms thread-0   chain_controller.cpp:235      _push_block          ] initc #2 @2017-09-29T16:04:00  | 0 trx, 0 pending, exectime_ms=0
240004ms thread-0   producer_plugin.cpp:233       block_production_loo ] initc generated block #2 @ 2017-09-29T16:04:00 with 0 trxs  0 pending
243003ms thread-0   chain_controller.cpp:235      _push_block          ] initd #3 @2017-09-29T16:04:03  | 0 trx, 0 pending, exectime_ms=0

Примечание: Случается, что eosd зависает и не производит блоков с первой попытки. В таком случае просто выйдите из процесса нажатием комбинации клавиш ctrl + C, затем немного подождите и повторите попытку.

Обновление исходного кода

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

cd ${EOSIO_INSTALL_DIR}
git pull
rm -r build && mkdir build && cd build
export BOOST_ROOT=${HOME}/opt/boost_1_64_0
cmake -DCMAKE_BUILD_TYPE=Debug \
    -DCMAKE_C_COMPILER=clang-4.0 \
    -DCMAKE_CXX_COMPILER=clang++-4.0 \
    -DWASM_LLVM_CONFIG=${HOME}/opt/wasm/bin/llvm-config \
    -DBINARYEN_BIN=${HOME}/opt/binaryen/bin \
    -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl \
    -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib \
    ../ && make

Если вам нужны руководства по запуску EOS на других операционных системах, пожалуйста, обратитесь к этому списку.


Свежие новости в Телеграм: t.me/EOS_RU


Переведено @rusteemitblog

Оригинал поста: ЗДЕСЬ


Если вам нравится то, что мы делаем - поддержите witness blockchained на Steem!


Sort:  

Please transilite this in english.

i think you will find a link just above " Оригинал поста: ЗДЕСЬ " you will get the english version there,
good day to u @ovronil )

You can find eng. version here