EOS 本地开发环境搭建
*EOS 主网已经于北京时间 2018 年 6 月 10 日晚 9 点开启交易。作为一个爱折腾的码农,花了一整天的事件尝试着搭建了本地测试网络。中间踩的坑比较多, 记录一下,分享出来,希望其他朋友看了之后可以少踩一些坑。
首先看下官方给的最低硬件配置:
System Requirements (all platforms)
8GB RAM free required
20GB Disk free required
所以说内存低于 8GB 的同学就不要尝试了
然后再看看 EOS 超级节点的配置门槛
AWSEC 2 主机 x1.32x large 型
128 核处理器
2 TB 内存
2x1920 GB SSD
25Gb 带宽
啧啧, 果然不是穷逼能玩的起的,据说每年租用费都高达 76 万 RMB.
我物理机安装的是 ubuntu 16.04 LTS, 为了不影响我的开发环境,我选择在 docker 容器里面搭建测试环境,因为 EOS 运行环境需要安装各种依赖,我担心 它分分钟把我的开发主机环境搞的一团糟。如果对 docker 容器还不了解的同学,请看下我的另外一篇 docker 容器入门的博客 docker学习笔记(一)
容器使用的镜像还是 ubuntu, 官方推荐的是 ubuntu16.04 或者 ubuntu 18.04, 我这里选择 ubuntu 18.04, 先使用 docker pull 命令把容器镜像下载下来:
docker pull ubuntu:18.04
然后创建容器,按照官方的推荐需要映射两个端口 8888 和 9876
docker run -it -v /data/eos:/temp -p 8888:8888 -p 9876:9876 --name eos ubuntu:18.04 /bin/bash
注意: 我这里使用了 -v 参数映射了我宿主机的一个文件夹进去,方便我们宿主机和容器之间的文件传输.
接下来,去 github 下载 eos 的源代码, 这里需要下载所有的子模块,所以需要使用 --recursive 参数.
cd /temp
git clone https://github.com/EOSIO/eos --recursive
由于我们做了文件夹映射,所以如果你觉得容器里面的速度太慢,你也可以在宿主机运行,只不过目录需要切换到 /data/eos
项目比较大,源代码差不多有 800 多MB,真的相当于一个操作系统了, 如果没有翻墙的话,github 会很慢,还有可能会超时下载失败。但是没关系,如果下载失败了 在项目的根目录执行下面代码可以继续 pull 代码
git submodule update --init --recursive
代码下载完了之后,就可以开始构建环境了, EOS 提供了一个自动化构建的脚本, 从项目的根目录执行自动化构建脚本就好了。
cd eos
./eosio_build.sh
首先自动构建脚本会先安装依赖包,这个过程大概需要15分钟左右,根据你的网速决定。当然你可以可以自己手动安装,这样构建脚本就不会安装了.
sudo apt-get install clang-4.0 lldb-4.0 libclang-4.0-dev cmake make \
automake libbz2-dev libssl-dev libgmp3-dev autotools-dev \
build-essential libicu-dev python2.7-dev python3-dev \
autoconf libtool zlib1g-dev doxygen graphviz
在安装依赖的时候还有一个小插曲,就是 eosio_build.sh 这个自动化构建脚本里面默认你不是 root 用户的,所以它里面很多命令都用了 sudo , 这样就会导致报一个这样的错误:
这个很简单,打开 eosio_build.sh 脚本,把里面所有的 sudo 全部去掉。比如把 sudo apt-get update 换成 apt-get update, 以此类推.
依赖安装一切很顺利,然后接下来你会遇到第二个坑,就是 eosio_build.sh 会在 github 上面下载很多项目来编译安装,比如 mongo-c-driver 等。
github 用的是亚马逊的 aws 云存储,国内访问非常慢,经常下着下着就断了,相信不少人都吐槽过这个。所以安装进行到第二阶段的时候我这边是报了一个这样的错误:
由于 mongo-c-driver 下载失败,执行下面的解压命令的时候出错了,重试了好几次,每次都是到这里下载失败。后来不想浪费时间了,直接去 github 把 mongo-c-driver-1.9.3.tar.gz 下载下来,然后 copy 到 /tmp
下载地址:https://github.com/mongodb/mongo-c-driver/releases?after=1.9.4 (opens new window)
wget https://github.com/mongodb/mongo-c-driver/releases/download/1.9.3/mongo-c-driver-1.9.3.tar.gz
cp mongo-c-driver-1.9.3.tar.gz /tmp
然后在回到 eos 的项目根目录, 修改构建脚本
vim scripts/eosio_build_ubuntu.sh
注释掉从 281 到 290 行,这几行是下载 mongo-c-driver 的
#STATUS=$(curl -LO -w '%{http_code}' --connect-timeout 30 https://github.com/mongodb/mongo-c-driver/releases/download/1.9.3/mongo-c-driver- 1.9.3.tar.gz)
282 # if [ "${STATUS}" -ne 200 ]; then
283 # if ! rm -f "${TEMP_DIR}/mongo-c-driver-1.9.3.tar.gz"
284 # then
285 # printf "\\n\\tUnable to remove file %s/mongo-c-driver-1.9.3.tar.gz.\\n" "${TEMP_DIR}"
286 # fi
287 # printf "\\tUnable to download MongoDB C driver at this time.\\n"
288 # printf "\\tExiting now.\\n\\n"
289 # exit 1;
290 # fi
然后把那几行删除 mongo-c-driver-1.9.3.tar.gz 的脚本也注释掉,防止后面安装失败你又得重新拷贝,最后安装完了之后你一次性的把 /tmp 下面的文件删除就好。
297 # if ! rm -f "${TEMP_DIR}/mongo-c-driver-1.9.3.tar.gz"
298 # then
299 # printf "\\n\\tUnable to remove file %s/mongo-c-driver-1.9.3.tar.gz.\\n" "${TEMP_DIR}"
300 # printf "\\n\\tExiting now.\\n\\n"
301 # exit 1;
302 # fi
我这里在编译 mongo-cxx-driver 时候报了编译失败的错误:
CMake Error at src/bsoncxx/CMakeLists.txt:86 (find_package):
Could not find a configuration file for package "libbson-static-1.0" that
is compatible with requested version "1.10.0".
The following configuration files were considered but not accepted:
/usr/local/lib/cmake/libbson-static-1.0/libbson-static-1.0-config.cmake, version: 1.9.3
-- Configuring incomplete, errors occurred!
See also "/tmp/mongo-cxx-driver/build/CMakeFiles/CMakeOutput.log".
Cmake has encountered the above errors building the MongoDB C++ driver.
Exiting now.
这是因为 EOS 默认下载的是最新的稳定版 mongo-cxx-driver, master/stable , 导致依赖高版本的 libbson 库,而我系统装的是低版本的. 那显然解决方案就是有两个:
- 降低 mongo-cxx-driver 的版本
- 升高系统 libbson 库的版本
考虑到升级系统的依赖库版本成本太高,可能导致其他应用程序不可用,甚至系统会崩溃, 所以我们采取保守的做法, 就是给 mongo-cxx-driver 版本降级.
办法很简单,打开 scripts/eosio_build_ubuntu.sh, 修改第 339 行脚本:
把
git clone https://github.com/mongodb/mongo-cxx-driver.git --branch releases/stable --depth 1
改成
git clone https://github.com/mongodb/mongo-cxx-driver.git --branch releases/v3.2 --depth 1
然后要记得先删除之前 clone 的高版本文件,否则又会报错说无法创建 /tmp/mongo-cxx-driver 文件夹
rm -rf /tmp/mongo-cxx-driver
然后再重新执行 eosio_build.sh, 会发现上面的问题解决了. 装完 mongo C++ 之后,还会有几个软件时不时下载失败(如下图)
没关系,重新之心 eosio_build.sh 就好了,它会接着上次失败的地方继续安装。
装完一些依赖插件之后,就迎来了 EOS 主程序代码编译,要编译比较久,你会发现你的 CPU 在满负荷工作,CPU 风扇猛转,几乎所有的 CPU 资源都用光了。下面贴上我的 雷神笔记本执行 top 命令之后的情况:
经过漫长的编译过程(我的笔记本大概编译了 2 个小时, 跟我当初编译 Linux 内核的时候耗时差不多), 终于出现了我们想看到的界面:
至此,恭喜你,编译完成了。 不过你还需完成最后一步 -- 安装.
进入到 build 目录,执行 make install (如果你不是超级管理员的身份登录的话,记得带上 sudo)
cd build
make install
默认他是安装到 /usr/local/bin 的, cd /usr/local/bin 你会看到下面命名行工具
-rwxr-xr-x 1 root root 8348888 Jun 12 03:16 cleos*
-rwxr-xr-x 1 root root 27419840 Jun 12 03:17 eosio-abigen*
-rwxr-xr-x 1 root root 5572280 Jun 12 03:16 eosio-launcher*
-rwxr-xr-x 1 root root 2520360 Jun 12 02:59 eosio-s2wasm*
-rwxr-xr-x 1 root root 698896 Jun 12 03:03 eosio-wast2wasm*
-rwxr-xr-x 1 root root 4973 Jun 12 02:56 eosiocpp*
-rwxr-xr-x 1 root root 7629688 Jun 12 03:16 keosd*
-rwxr-xr-x 1 root root 13072 Jun 10 15:29 mongoc-stat*
-rwxr-xr-x 1 root root 48067344 Jun 12 03:15 nodeos*
下面测试,先启动 Mongodb 服务
~/opt/mongodb/bin/mongod -f ~/opt/mongodb/mongod.conf &
然后启动节点
nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin
启动之后如果没有问题就会自动开始生成区块(producing blocks)
然后就可以使用 cleos 等命令行工具进行你想要的各种操作了。
至此,EOS 本地开发环境搭建搭建完成.
这里顺便提一句,本文是使用 docker 容器模拟物理机器来搭建的,如果单纯想用容器去跑 EOS 服务,要简单的多,只要执行几条命令就好了, 官网有详细的教程 https://github.com/EOSIO/eos/blob/master/Docker/README.md (opens new window), 感兴趣的 同学可以去看看,我这里就不赘述了.
# 参考连接
本站博文如非注明转载则均属作者原创文章,引用或转载无需申请版权或者注明出处,如需联系作者请加微信: geekmaster01