CentOS 7下EOS編譯

臨近EOS主網(wǎng)上線,為了盡快體驗(yàn)學(xué)習(xí)下一代區(qū)塊鏈EOS的魅力,自己也要在測(cè)試環(huán)境中部署一個(gè)實(shí)例進(jìn)行驗(yàn)證。目前在EOS Github的官網(wǎng)上已經(jīng)有基于Ubuntu及MacOS的版本的部署指導(dǎo)及自動(dòng)化腳本。

但實(shí)際研發(fā)人員用的環(huán)境還是比較多樣化的,在生產(chǎn)集群中更多的用的是CentOS系統(tǒng)。由于編譯環(huán)境差別比較大,走了不少?gòu)澛罚裉煊涗浺幌略趺丛谝粋€(gè)純凈CentOS 7.4主機(jī)上編譯EOS節(jié)點(diǎn)的過程以及我遇到的那些坑,以供后人繞行。

1. 硬件環(huán)境準(zhǔn)備

由于需要源碼編譯LLVM WebAssembly,主機(jī)編譯目錄下至少需要有10GB空閑可用空間,內(nèi)存不低于16 GB,CPU核數(shù),越多越好。

2. 基本編譯環(huán)境安裝

根據(jù)EOS.IO的官網(wǎng)介紹,該項(xiàng)目主要是使用 C++14版本進(jìn)行編譯,而CentOS 7倉庫中默認(rèn)帶的編譯器版本是4.8.5,不支持該標(biāo)準(zhǔn),同時(shí)CMake版本也較低,無法支持依賴庫的編譯,因此本次在開始編譯前需要先安裝相關(guān)新版的編譯工具鏈及相關(guān)環(huán)境。

export BUILD_TEMP=${HOME}/tmp
mkdir ${BUILD_TEMP}

##GNU C++ 6.3.1
sudo yum install -y centos-release-scl
sudo yum install -y devtoolset-6

##CMake 3.10.2

export BUILD_TEMP=${HOME}/tmp
mkdir ${BUILD_TEMP}

cd  ${BUILD_TEMP}
mkdir ${HOME}/opt
curl -L https://cmake.org/files/v3.10/cmake-3.10.2-Linux-x86_64.tar.gz -o cmake-3.10.2-Linux-x86_64.tar.gz
tar -zxf cmake-3.10.2-Linux-x86_64.tar.gz -C ${HOME}/opt

export PATH=$PATH:/opt/rh/devtoolset-6/root/bin/:${HOME}/opt/cmake-3.10.2-Linux-x86_64/bin/

##Other compile tool chain
sudo yum install -y git autoconf automake libtool doxygen ocaml  gmp-devel python-devel bzip2-devel openssl-devel libicu-devel bzip2 wget

3. EOS依賴環(huán)境編譯

根據(jù)官網(wǎng)描述,EOS.IO的主要第三方依賴環(huán)境如下

  • Boost 1.64
  • secp256k1-zkp
  • Binaryen
  • LLVM 4.0 with WebAssembly(在實(shí)際編譯中,X86的Target也需要安裝編譯)

3.1. Boost編譯

export BOOST_ROOT=${HOME}/opt/boost_1_64_0
cd  ${BUILD_TEMP}
curl -L https://sourceforge.net/projects/boost/files/boost/1.64.0/boost_1_64_0.tar.bz2 > boost_1.64.0.tar.bz2
tar xvf boost_1.64.0.tar.bz2
cd boost_1_64_0/
./bootstrap.sh "--prefix=$BOOST_ROOT"
./b2 install

3.2. secp256k1-zkp編譯

cd  ${BUILD_TEMP}
git clone https://github.com/cryptonomex/secp256k1-zkp.git
cd secp256k1-zkp
./autogen.sh && ./configure
make
sudo make install

3.3. Binaryen編譯

cd  ${BUILD_TEMP}
git clone https://github.com/WebAssembly/binaryen
cd binaryen
git checkout tags/1.37.14
cmake . && make -j 4
sudo make install

3.4. LLVM WebAssembly+ Host Target

  • 坑一 DLLVM_TARGETS_TO_BUILD
    在這里需要特定說明一下,由于EOS需要LLVM在本地?fù)Q進(jìn)中將C++編譯為WebAssembly在虛擬機(jī)中運(yùn)行,因此對(duì)于LLVM編譯器需要同時(shí)支持X86(本地?fù)Q進(jìn))和WebAssembly兩個(gè)Target進(jìn)行編譯。
    在官方給出的編譯腳本中,由于在Ubuntu環(huán)境中已經(jīng)安裝了基于LLVM的clang,所以對(duì)Cmake的DLLVM_TARGETS_TO_BUILD設(shè)置為""。但在CentOS中由于沒有安裝這個(gè)編譯器,這將會(huì)導(dǎo)致在后續(xù)EOS編譯時(shí)C++編譯器報(bào)錯(cuò)缺失LLVMX86****.so文件,在這里我們需要指定DLLVM_TARGETS_TO_BUILD='host',與主機(jī)相同。
  • 坑二 LLVM的版本
    目前官方的EOS目前只支持4.0版本的llvm編譯器,在Clone Github庫時(shí),一定要選擇branch 40。直接clone最新版本,會(huì)在最后EOS編譯時(shí)報(bào)llvm版本不支持的錯(cuò)誤。
  • 坑三 RTTI沒有開啟
    在官方的編譯安裝腳本中,不不知道為什么沒有開啟LLVM_ENABLE_RTTI,這個(gè)會(huì)導(dǎo)致在后面編譯EOS時(shí)遇到莫名其妙的typeof ** undefine的錯(cuò)誤,LLVM的默認(rèn)編譯配置中也沒有開啟,因此在我們自己編譯的時(shí)候,一定要加上這個(gè)選項(xiàng)DLLVM_ENABLE_RTTI=ON,雪的教訓(xùn)啊~
cd  ${BUILD_TEMP}

mkdir ${BUILD_TEMP}/wasm-compiler/build -p
cd ${BUILD_TEMP}/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 ${BUILD_TEMP}/wasm-compiler/build
cmake -G "Unix Makefiles" -DLLVM_ENABLE_RTTI=ON -DLLVM_TARGETS_TO_BUILD='host' -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DCMAKE_BUILD_TYPE=Release ../llvm
sudo make -j4 install

export WASM_LLVM_CONFIG=/usr/local/bin/llvm-config

4. EOS編譯

如果到這一步均順利完成,現(xiàn)在可以編譯EOS了

cd ${BUILD_TEMP}
git clone https://github.com/eosio/eos --recursive
mkdir -p ${BUILD_TEMP}/eos/build && cd ${BUILD_TEMP}/eos/build
cmake -DBOOST_INCLUDEDIR=${BOOST_ROOT}/include/boost \
-DBOOST_LIBRARYDIR=${BOOST_ROOT}/lib  ..
make -j4

5. 運(yùn)行你的第一個(gè)EOS節(jié)點(diǎn)!

請(qǐng)參考官方文檔Creating and launching a single-node testnet,我就不羅嗦了。


請(qǐng)打賞一個(gè)可憐的攻城獅,ETH捐助地址0x2255b6221479ED4d451914cA7acb2D01ee2ef101
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,915評(píng)論 18 139
  • 前言 2000年,伊利諾伊大學(xué)厄巴納-香檳分校(University of Illinois at Urbana-...
    星光社的戴銘閱讀 15,955評(píng)論 8 180
  • 我們說的Linux其實(shí)指的就是 內(nèi)核(kernel)而已。這個(gè)內(nèi)核控制你主機(jī)的所有硬件并提供系統(tǒng)所有的功能,所以它...
    Zhang21閱讀 7,463評(píng)論 0 18
  • 簡(jiǎn)單點(diǎn) 說話的方式 簡(jiǎn)單點(diǎn) 說什么王權(quán)富貴 說 王富貴 愛情 來的太快 就像龍卷風(fēng) 愛情 走的太快 就像龍卷風(fēng) 你...
    相聲俠閱讀 959評(píng)論 2 2
  • 3-25 【子曰:居上不寬,為禮不敬,臨喪不哀,吾何以觀之哉?】 三個(gè)反面~ 居上不寬。既然居上,自然有過人之處,...
    空空的山谷閱讀 284評(píng)論 0 0