EOS - 本地构建与运行

前言

按照官方手册操作,使用Docker来运行EOS总是感觉不爽,用着没有那么直观。所以采用文档中自动构建的方式来构建与运行EOS。

环境

这里写图片描述

构建

此次采用自动构建的方式。

获取 EOS源码:

git clone https://github.com/EOSIO/eos --recursive

使用 自动构建脚本构建EOS:

cd eos
./eosio_build.sh

这里说几个构建过程中可能碰到的问题

问题1MongoDB 3.6.3 安装时间过长:安装时间过长的原因在于使用crul下载安装包的速率太慢

  • 手动下载MongoDB安装文件
 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.3.tgz
  • 将安装文件拷贝到~/opt/目录下
cp ~/Download/mongodb-linux-x86_64-3.6.3.tgz ~/opt
  • 注释eos/scripts/eosio_build_ubuntu.sh文件中有关MongoDB下载的部分代码:
# STATUS=$(curl -LO -w '%{http_code}' --connect-timeout 30 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.3.tgz)
# if [ "${STATUS}" -ne 200 ]; then
#   printf "\\tUnable to download MongoDB at this time.\\n"
#   printf "\\n\\tExiting now.\\n\\n"
#   exit 1;
# fi

问题2: CUP_CORE获取失败
原因在于下面的代码无法正确获取到CPU_CORE的数量。

CPU_CORE=$( lscpu | grep "^CPU(s)" | tr -s ' ' | cut -d\  -f2 || cut -d' ' -f2 )
  • 手动修改CPU_CORE的数值为4
CPU_CORE=4

安装构建产物

cd eos/build
sudo make install

由于我已经安装过,所以显示的是更新,结果如下:

....

-- Up-to-date: /usr/local/eosio/bin/nodeos
-- Up-to-date: /usr/local/eosio/var/log/eosio
-- Up-to-date: /usr/local/eosio/var/lib/eosio
-- Up-to-date: /usr/local/eosio/bin/cleos
-- Up-to-date: /usr/local/eosio/bin/keosd
-- Up-to-date: /usr/local/eosio/bin/eosio-launcher
-- Up-to-date: /usr/local/eosio/bin/eosio-abigen
-- Up-to-date: /usr/local/eosio/bin/eosiocpp

....

可以看到核心的cleoskeosd以及nodeos都已经被安装到了/usr/local/eosio目录下。

若果安装了ZSH,想要在全局运行cleoskeosd以及nodeos这些命令,那么需要在~/.zshrc添加如下代码:


gedit ~/.zshrc

# 结尾处
# EOS
alias nodeos=/usr/local/eosio/bin/nodeos
alias cleos=/usr/local/eosio/bin/cleos
alias keosd=/usr/local/eosio/bin/keosd


source ~/.zshrc

运行 (构建本地测试环境)

命令与常见错误

可以执行如下命令启动EOS节点:

nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin

运行结果如下:

2018-07-29T11:22:46.838 thread-0   chain_plugin.cpp:271          plugin_initialize    ] initializing chain plugin
2018-07-29T11:22:46.843 thread-0   block_log.cpp:124             open                 ] Log is nonempty
2018-07-29T11:22:46.843 thread-0   block_log.cpp:142             open                 ] Index is nonempty
2018-07-29T11:22:46.857 thread-0   http_plugin.cpp:344           plugin_initialize    ] configured http to listen on 127.0.0.1:8888
2018-07-29T11:22:46.857 thread-0   net_plugin.cpp:2919           plugin_initialize    ] Initialize net plugin

请注意尽量不要使用Ctrl + Z来结束EOS运行时,这可能会导致EOS结束错误。

错误1: database dirty flag set
在启动命令最后追加--delete-all-blocks

nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --delete-all-blocks

错误2: http service failed to start: Address already in use
该错误是由于使用Ctrl + Z导致未正确结束EOS。使用如下命令杀死所有还在执行的EOS进程:

pkill nodeos
pkill -15 nodeos
pkill -2 nodeos
pkill -TERM nodeos
pkill -SIGTERM nodeos
pkill -INT nodeos
pkill -SIGINT nodeos
pkill -9 nodeos
pkill -KILL nodeos
pkill -SIGKILL nodeos

注意:使用Ctrl + C来结束正在运行中的进程。

使用默认的config.ini文件来配置EOS启动环境

使用如下命令编辑config.ini文件:

gedit ~/.local/share/eosio/nodeos/config/config.ini

在最后追加如下代码,启动相关插件:

enable-stale-production = true
# Enable block production with the testnet producers
producer-name = eosio
# Load the block producer plugin, so you can produce blocks
plugin = eosio::producer_plugin
# As well as API and HTTP plugins
plugin = eosio::chain_api_plugin
plugin = eosio::http_plugin
# This will be used by the validation step below, to view history
plugin = eosio::history_api_plugin

其中enable-stale-production = true会和文件上面的属性重复,将上面的删掉即可。

使用如下命令开启EOS节点和停止运行:

//  startup
nodeos


// stop
// Ctrl + C

引用:

https://github.com/EOSIO/eos/issues/4902
https://github.com/EOSIO/eos/issues/4301
https://www.bcskill.com/index.php/archives/103.html
https://eosio.stackexchange.com/questions/829/address-already-in-use-when-launching-nodeos

猜你喜欢

转载自blog.csdn.net/biezhihua/article/details/81274078
eos
今日推荐