Alibaba Cloud Linux 2 中编译 Lotus

微笑、不失礼 提交于 2020-04-20 15:39:09

Filecoin 是一个开源的区块链项目,Lotus 是 Filecoin 的其中一个重要客户端。对于想尝鲜区块链这一热门技术的朋友来说,通常会选择 ArchLinux、Ubuntu 等相对易于折腾的发行版来使用。Alibaba Cloud Linux 2 (aka Aliyun Linux 2) 是基于 CentOS 7 的 RPM 生态构建的发行版系统,面对 Lotus 这样的先进生产力,能否老树发新芽呢?让我们开始折腾吧。

1. 购买一台 ECS 服务器。

在实例购买页面,我们买了一台 Aliyun Linux 2.1903 LTS 版本的服务器。由于构建过程中需要频繁访问 GitHub 上的资源,我们选择了香港可用区以加快资源拉取速度。

image

2. 访问 Lotus 文档页面

Lotus 文档页给出了常见的几个发行版的构建方式,离我们最近的就是 Fedora 了。然而直接执行 Fedora 页面上的步骤,并不能正确解决构建依赖。我们需要想想别的办法。

Fedora 文档页面上的依赖如下:

These steps will install the following dependencies:

  • go (1.13 or higher)
  • gcc (7.4.0 or higher)
  • git (version 2 or higher)
  • bzr (some go dependency needs this)
  • jq
  • pkg-config
  • rustup (proofs build)
  • llvm (proofs build)
  • clang (proofs build)
    (其实文档中还漏了 opencl 相关的开发包)

3. 解决依赖

浏览了上面列出的 Fedora 给出的依赖关系,我们幸运地发现,Alibaba Cloud Linux 2 的试验性仓库里有大部分的支持,剩下没有支持的部分,可以通过 EPEL-7 的仓库来支持。配合 EPEL-7 和 Alinux2 试验性仓库,我们可以很方便地解决依赖:

  • go (1.13 or higher): Alinux2 试验性仓库 & EPEL-7 中支持;
  • gcc (7.4.0 or higher): Alinux2 试验性仓库提供 gcc-7 & 8 & 9 的 devtoolset 支持;
  • git (version 2 or higher): Alinux2 试验性仓库提供 git2 支持;
  • bzr (some go dependency needs this): 默认仓库支持;
  • jq: EPEL-7 支持;
  • pkg-config: 默认仓库支持;
  • rustup (proofs build): 宇宙流行做法,通过 https://sh.rustup.rs 来支持
  • llvm (proofs build): Alinux2 默认仓库(plus)支持;
  • clang (proofs build): Alinux2 默认仓库(plus)支持;
  • libOpenCL 库: EPEL-7 支持;

唯一不太好解决的是,文档中提到了 OpenCL 的 mesa lib 库,这个库是从 mesa-20 开始支持的,Alinux2 中只支持到 mesa-18。不过我们尝试了一下,在缺少 mesa OpenCL 库的情况下,也可以顺利完成 Lotus 的构建。

4. 执行命令

确认 Alinux2 支持 Lotus 不存在技术难题之后,我们愉快地开始了依赖的安装:

# 检查系统中的 EPEL-7 仓库的支持
$ yum repolist -v | grep 'epel/7'
Repo-baseurl : https://mirrors.aliyun.com/epel/7/x86_64/
# 如果上述命令返回空,则可以执行下列命令进行安装:
# $ sudo yum install -y epel-release

# 安装 Alinux2 试验性仓库
$ sudo yum install -y alinux-release-experimentals

# 安装依赖软件包
$ sudo yum -y install golang devtoolset-9-gcc git bzr jq pkgconfig \
    opencl-headers ocl-icd ocl-icd-devel clang llvm
    
# 切换到 gcc-9
$ source /opt/rh/devtoolset-9/enable

# 安装 Rust
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 根据提示操作即可

接下来,就可以开始拉取 Lotus 的代码,进行构建了。接下来的步骤和 Lotus 文档中没有什么差异,直接拷贝即可:

$ git clone https://github.com/filecoin-project/lotus.git
$ cd lotus/
$ make clean && make all
$ sudo make install

也可以在代码中构建并运行 bench 工具:

make bench
./bench

这样就可以在系统中直接执行相关命令,开始探索区块链的开发了。

5. 剩余的工作

接下来还需要折腾看看 mesa-opencl 包,是否在 Lotus 中是强依赖。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!