前言
按照官方手册操作,使用Docker来运行EOS总是感觉不爽,用着没有那么直观。所以采用文档中自动构建的方式来构建与运行EOS。
环境
构建
此次采用自动构建的方式。
获取 EOS源码:
git clone https://github.com/EOSIO/eos --recursive
使用 自动构建脚本构建EOS:
cd eos
./eosio_build.sh
这里说几个构建过程中可能碰到的问题:
问题1:MongoDB 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
....
可以看到核心的cleos
和keosd
以及nodeos
都已经被安装到了/usr/local/eosio
目录下。
若果安装了ZSH
,想要在全局运行cleos
和keosd
以及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