EOS源码编译安装踩坑血泪史

EOS使得区块链进入了3.0时代,处理交易的速度更快,DPos共识机制让资源消耗更小。要学习EOS,先从其源码的编译安装开始。

源码安装的过程参考EOS官网教程:Shell Scripts | EOSIO Developer Docs

安装环境:Ubuntu18.04

官网的教程看起来操作非常简单,但是我在安装的过程中遇到了很多问题,卡了好几天才彻底解决。下面按照我的操作过程,依次描述遇到的主要问题以及找到其对应解决方法的血泪史。

一、下载源码中的问题

将源码下载到eosio/eos文件夹中后,因为此时源码的内容不全,需要更新子模块。我跟随官网的指示运行了如下命令。

cd ~/eosio/eos
git submodule update --init --recursive

这是我踩到的第一个坑。该命令会从github下载数据,但是由于网络原因,github服务器的连接非常不稳定,经常会遇到连接失败报错。

我重试了很多次,并且尝试将指令中的网址拷贝到浏览器下访问。除此之外,我还试过在EOS代码中搜索含github网址的文件,将其全部替换为国内的镜像网址,但是仍有不少内容还没有镜像,只能将其改回重试。每一次重试都在下载一两个子模块后就连接失败。在经过无数次的重试后完成了子模块更新。

二、编译安装源码的问题

我按照官网的指示使用源码中的安装脚本进行安装,运行如下命令。

cd ~/eosio/eos
./scripts/eosio_build.sh

首先我遇到了权限不足的报错,使用sudo解决。

再次运行时,遇到了llvm版本相关的报错。提示需要7-11版本的llvm,而我先前安装的是13.0版本。除此之外还有clang与gcc版本不匹配的警告信息,提示可以带-P参数执行eosio_build.sh脚本。-P参数表示运行脚本自动安装指定版本的依赖包。要注意的是依赖包会从github下载,依然有连接不稳定的问题,多次尝试即可。

第三次运行时我带入了-P参数,但不知为何安装llvm后提示没有找到文件。我怀疑是电脑中先前安装的13.0版本的llvm没有清理干净,造成了影响。于是我配置了一台新的虚拟机,从头开始再次尝试。

在新虚拟机中终于完成了依赖包的安装,但是又遇到了如下报错。

在网上搜索了各种资料都没有解决,最后我在eos官网中搜索gpg,找到了如下线索。

执行上图红框中的命令后,依然存在问题。这时我注意到红框前的apt update命令,想着试一试执行了一下。系统提示有95个项目可以upgrade,于是我又执行了sudo apt upgrade。全部更新完成后再次执行编译脚本,终于解决了该问题,进入EOS的编译。

刚开始的编译过程非常顺利,一直进行到74%,虚拟机开始变得极其卡顿,到了完全无法操作的程度。我发现编译到70%后,虚拟机的内存占用极高(电脑只有8G内存,给虚拟机分配了7G,刚好满足EOS编译的最低要求),于是将编译停止后再次启动。但是EOS不能从上次中断的位置继续,每次都会检查依赖完整性后从零开始配置和编译。这次运行编译脚本后我将电脑放置了一个通宵,第二天早上发现在77%时编译进程被kill。接下来的多次尝试都会在这里卡死。

我又考虑了是否是系统版本原因,将原来的Ubuntu16.04换成了18.04,依然出现killed。我观测到每次运行的过程中电脑的内存都被用满,硬盘的使用也一直保持100%。这样的情况使我不得不考虑硬件的原因。我决定扩大电脑只有8G的物理内存,换了两条内存升级到了32G。

升级内存后我迫不及待地直接在修电脑的店里就开始执行编译。这次直接给虚拟机分配了20G的内存。编译的过程中我持续观测内存的占用情况,最高达到了18G。看来官网给出的7G内存要求远远不够。

在经历了数天的艰难困苦后终于编译成功,显示信息如下(编译完成太开心了忘了截图)

然后按照官网的教程执行安装脚本,成功后显示如下。

三、 测试编译结果

按照官网的教程执行测试命令,过程如下。

至此EOS的源码编译安装终于完成。

猜你喜欢

转载自blog.csdn.net/ClarkCC/article/details/123393792