【转载】EOS源码分析(1) 安装

目前EOS 项目主要支持两类系统,分别是Ubuntu 和 MacOS Sierra,本地的EOS安装,目前有三种形式,你可以根据自己的喜好进行选择。

  • 下载安装包:从Dawn3.0 版本,项目直接提供了安装包,方便开发人员安装
  • 通过自动化安装脚本安装:项目提供了自动安装脚本,脚本会安装所需要的依赖库,并编译EOS项目
  • 手动安装:手动安装依赖库,并编译源代码。

下载安装包

从3.0 版本以后,EOS项目根据平台发布了可供直接下载安装的安装包,你可以通过此链接进行下载。目前最新的版本是3.0.1。

通过自动化脚本安装

针对于Ubuntu 16.10 和MacOS Sierra系统,EOS项目设置了自动化安装脚本,你可以通过此脚本自动安装项目所依赖的库并编译EOS代码。脚本放在EOS代码的根目录下,文件名称为eosio-build.sh,此脚本有两个参数,分别如下:

  • architecture [ubuntu|darwin]
    此参数描述操作系统平台,目前只支持ubuntu 和mac 系统
  • optional mode [full|build]
    如果参数为full,脚本会先下载所依赖的库,然后再进行编译。如果没有填写此参数,默认情况下是full

命令格式如下:
./eosio-build.sh <architecture> <optional mode>

完整的自动化脚本安装命令如下:

1) git clone https://github.com/eosio/eos --recursive  
 
2) cd eos
3) ./eosio_build.sh ubuntu

以上代码具体解释如下:

  • 第一行是从github 上Copy EOS代码到本地;
  • 第二行代码进入到 EOS主目录;
  • 第三行代码是切换到dawn-2.x 分支上;目前github 上主分支下是3.0 的代码,但是测试公网上是2.x 的代码,因此,如果你只是希望搭建一个本机版本,则无需切换到2.x分支,但如果是希望能够链接测试公网的话,需要切换到2.x 分支下。后续等测试公网上版本也全部切换到3.0 之后,就无需再执行这句代码了。
  • 第四行代码是运行自动部署脚本。如果你本机是ubuntu 系统,则第一个参数是ubuntu,如果是在mac 上编译,则需要把此参数修改为darwin

手动安装

EOS 项目的主要开发语言是C++,采用的是C++14 标准,编译系统使用CMake,项目编译所需要的依赖库如下:

Ubuntu 16.10 安装

安装开发工具包:

sudo apt-get update
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
sudo apt-get install clang-4.0 lldb-4.0 libclang-4.0-dev cmake make \
                     libbz2-dev libssl-dev libgmp3-dev \
                     autotools-dev build-essential \
                     libbz2-dev libicu-dev python-dev \
                     autoconf libtool git

安装Boost 1.64

cd ~
wget -c 'https://sourceforge.net/projects/boost/files/boost/1.64.0/boost_1_64_0.tar.bz2/download' -O boost_1.64.0.tar.bz2
tar xjf boost_1.64.0.tar.bz2
cd boost_1_64_0/
echo "export BOOST_ROOT=$HOME/opt/boost_1_64_0" >> ~/.bash_profile
source ~/.bash_profile
./bootstrap.sh "--prefix=$BOOST_ROOT"
./b2 install
source ~/.bash_profile

安装secp256k1-zkp (Cryptonomex branch):

cd ~
git clone https://github.com/cryptonomex/secp256k1-zkp.git
cd secp256k1-zkp
./autogen.sh
./configure
make
sudo make install

安装WASM 编译器binaryen

cd ~
git clone https://github.com/WebAssembly/binaryen.git
cd ~/binaryen
git checkout tags/1.37.14
cmake . && make

把 BINARYEN_ROOT环境变量添加到 .bash_profile文件中:

echo "export BINARYEN_ROOT=~/binaryen" >> ~/.bash_profile
source ~/.bash_profile

默认情况下LLVM 和 Clang 是不支持WASM 编译的,可以通过以下命令编译支持版本:

mkdir  ~/wasm-compiler
cd ~/wasm-compiler
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/llvm.git
cd llvm/tools
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/clang.git
cd ..
mkdir build
cd build
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=.. -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DCMAKE_BUILD_TYPE=Release ../
make -j4 install

编译环境已经设置完毕,可以进行EOS代码编译了;

MacOS Sierra 10.12.6 安装

Mac 上安装依赖库前需要安装另外两个软件:

  • Brew

安装命令如下:
ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

  • 最新版本的 XCode

安装命令如下:
xcode-select --install

安装依赖库:

brew update   
brew install git automake libtool boost openssl [email protected] gmp ninja gettext   
brew link gettext --force

安装secp256k1-zkp (Cryptonomex branch)

cd ~
git clone https://github.com/cryptonomex/secp256k1-zkp.git
cd secp256k1-zkp
./autogen.sh
./configure
make
sudo make install

安装 binaryen v1.37.14

cd ~
git clone https://github.com/WebAssembly/binaryen.git
cd ~/binaryen
git checkout tags/1.37.14
cmake . && make

把 BINARYEN_ROOT环境变量添加到 .bash_profile文件中:

echo "export BINARYEN_ROOT=~/binaryen" >> ~/.bash_profile
source ~/.bash_profile

默认情况下LLVM 和 Clang 是不支持WASM 编译的,可以通过以下命令编译支持版本:

mkdir  ~/wasm-compiler
cd ~/wasm-compiler
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/llvm.git
cd llvm/tools
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/clang.git
cd ..
mkdir build
cd build
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=.. -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DCMAKE_BUILD_TYPE=Release ../
make -j4 install

添加环境变量 WASM_LLVM_CONFIGLLVM_DIR.bash_profile:

echo "export WASM_LLVM_CONFIG=~/wasm-compiler/llvm/bin/llvm-config" >> ~/.bash_profile
echo "export LLVM_DIR=/usr/local/Cellar/llvm/4.0.1/lib/cmake/llvm" >> ~/.bash_profile
source ~/.bash_profile

编译环境已经设置完毕,可以进行EOS代码编译了;

EOS代码编译

下载项目代码

获取EOS 项目代码,命令如下:

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

如果调用以上命令是忘记输入 --recursive 参数的话,可以调用以下命令下载所有子模块代码:

git submodule update --init --recursive

编译代码

在编译前,请确保 WASM_LLVM_CONFIG 环境变量已经设置了 WASM 编译器,智能合约的编辑需要用到此编辑器。完整的下载和编译命令如下:

cd ~
git clone https://github.com/eosio/eos --recursive
mkdir -p ~/eos/build && cd ~/eos/build
cmake -DBINARYEN_BIN=~/binaryen/bin -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib ..
make -j4

编译完成后,在 ~/eos/build/programs 目录下,会生成以下几个执行文件:

  • eosiod : 服务器端区块链节点组件,各EOS节点运行此程序,构建一个去中心化的服务网络
  • eosioc : 客户端命令行程序,通过 RPC 连接 eosiod
  • eosiowd : EOS 钱包
  • eosio-launcher : 区块链节点网络的配置和部署

转自:

作者:尹成
来源:CSDN
原文:https://blog.csdn.net/itcastcpp/article/details/80303894