EOS源码分析(1)安装

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

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

## 下载安装包
从3.0 版本以后,EOS项目根据平台发布了可供直接下载安装的安装包,你可以通过[ 此链接]( https://github.com/EOSIO/eos/releases)进行下载。目前最新的版本是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 ```

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

```
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,项目编译所需要的依赖库如下:

- Clang 4.0.0
- CMake 3.5.1
- Boost 1.64
- OpenSSL
- LLVM 4.0
- [ secp256k1-zkp (Cryptonomex branch)]( https://github.com/cryptonomex/secp256k1-zkp)
- [ binaryen]( https://github.com/WebAssembly/binaryen)

### 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)]( https://github.com/cryptonomex/secp256k1-zkp):

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

安装WASM 编译器[ binaryen]( https://github.com/WebAssembly/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代码编译]( ####EOS代码编译)了;

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

- Brew
>   安装命令如下:
>   ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- 最新版本的 XCode
>   安装命令如下:
>   xcode-select --install
    
安装依赖库:

```sh
brew update
brew install git automake libtool boost openssl llvm@4 gmp ninja gettext
brew link gettext --force
```

安装[ secp256k1-zkp (Cryptonomex branch)]( https://github.com/cryptonomex/secp256k1-zkp):

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

安装 [ binaryen v1.37.14]( https://github.com/WebAssembly/binaryen):

```sh
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 编译的,可以通过以下命令编译支持版本:

```sh
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_CONFIG``LLVM_DIR``.bash_profile`:

```sh
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代码编译
#### 下载项目代码
获取EOS 项目代码,命令如下:

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

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

```sh
git submodule update --init --recursive
```

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

```sh
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 : 区块链节点网络的配置和部署







网址:http://www.qukuailianxueyuan.io/



欲领取造币技术与全套虚拟机资料

区块链技术交流QQ群:756146052  备注:CSDN

尹成学院微信:备注:CSDN





网址:http://www.qukuailianxueyuan.io/



欲领取造币技术与全套虚拟机资料

区块链技术交流QQ群:756146052  备注:CSDN

尹成学院微信:备注:CSDN

你可能感兴趣的:(区块链)