EOS原始碼分析(1)安裝

尹成發表於2018-05-13
目前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 <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,專案編譯所需要的依賴庫如下:

- 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

相關文章