一直想學習EOS開發,可是不知道怎麼入門。最近從GitHub上下載了源碼,發現官方已經提供了完整的EOSIO開發入門教程,既然如此趕忙開始行動。今天是系列文章的第一篇,介紹如何使用Docker搭建本地環境。html
官方支持兩種方式搭建本地環境node
我我的首選Docker,由於能夠將與EOSIO相關的軟件、環境都封裝在一個鏡像中,不論是出了問題要回退,仍是學完之後刪除相關的軟件,Docker都很方便。git
因此在這篇文章中我就不介紹怎麼使用源碼構建了,有興趣的同窗能夠參考官方文檔的Building EOSIO章節。github
在正式開始構建以前,咱們先來了解EOSIO的組成部分,官方文檔對於EOSIO是這麼介紹的。docker
EOSIO comes with a number of programs(EOSIO由下面的程序構成):json
- nodeos - server-side blockchain node component(服務端的區塊鏈節點組件)
- cleos - command line interface to interact with the blockchain(與區塊鏈進行交互的命令行界面)
- keosd - EOSIO wallet(EOSIO錢包)
- eosio-launcher - application to assist with deploying a multi-node blockchain network(用來協助部署一個多節點區塊鏈網絡的應用程序)
中文是我本身翻譯的,請原諒個人學渣翻譯水平,因爲對EOSIO不瞭解,因此只能按照字面意思硬譯。翻譯完以後,我發現除了keosd(EOSIO錢包),其它幾個程序的做用仍然不明因此。ubuntu
好在今天的任務是搭建環境,可以將這幾個程序安裝起來而且正常運行就能夠了,各個程序的具體做用後面再作深刻學習。網絡
參考開發文檔,執行下面的命令,若是源碼已下載可忽略第一行。app
git clone https://github.com/EOSIO/eos.git –recursive
cd eos/Docker
docker build . -t eosio/eoscurl
開始執行之後不須要人工干預,讓機器自動運行就能夠了,整個過程會持續半小時到一小時。
在執行的過程中,咱們來分析一下構建的步驟,打開eos/Docker/DockerFile 文件,能夠看到下面的內容。
FROM eosio/builder as builder
RUN git clone -b master –depth 1 https://github.com/EOSIO/eos.git –recursive \
&& cd eos \
&& cmake -H. -B」/tmp/build」 -GNinja -DCMAKE_BUILD_TYPE=Release -DWASM_ROOT=/opt/wasm -DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_C_COMPILER=clang -DCMAKE_INSTALL_PREFIX=/tmp/build -DSecp256k1_ROOT_DIR=/usr/local \
&& cmake –build /tmp/build –target installFROM ubuntu:16.04
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install openssl && rm -rf /var/lib/apt/lists/*
COPY –from=builder /usr/local/lib/* /usr/local/lib/
COPY –from=builder /tmp/build/bin /opt/eosio/bin
COPY –from=builder /tmp/build/contracts /contracts
COPY –from=builder /eos/Docker/config.ini /eos/genesis.json /
COPY nodeosd.sh /opt/eosio/bin/nodeosd.sh
ENV EOSIO_ROOT=/opt/eosio
RUN chmod +x /opt/eosio/bin/nodeosd.sh
ENV LD_LIBRARY_PATH /usr/local/lib
VOLUME /opt/eosio/bin/data-dir
ENV PATH /opt/eosio/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
整個構建過程能夠分紅下面幾個步驟:
正當我覺得構建會很順利的時候,命令行上出現一條錯誤信息:
在執行」COPY –from=builder /eos/Docker/config.ini /eos/genesis.json /」 語句時出錯,eos/genesis.json文件不存在。
這就奇怪了,難道官方開發人員本身沒有跑過構建腳本?仍是我本地環境的緣由致使的錯誤?
我嘗試着將DockerFile中的」eos/genesis.json / 「替換成」eos/genesis.json」,由於結尾那個多餘的 / 看着很是可疑,與前面的地址中間隔了一個空格。
修改以後沒有報錯,構建成功而且生成了鏡像,可是在啓動鏡像時出現異常,此法不通。
我又另外嘗試了幾個方法,仍然沒法生成正確的鏡像,無奈之下,我去GitHub上提交了一個Bug,看看官方開發人員怎麼說。
然並卵,只有兩個同病相憐的小夥伴說跟我遇到了同樣的問題,官方開發人員並無答覆。
生成不了正確的鏡像,難道個人EOS開發之旅要就此夭折?
固然不會,不然我也不必寫今天這篇文章了,正所謂條條大路通羅馬,本身生成不了鏡像,就拿官方已經生成好的。
還記得前面執行的命令麼
docker build . -t eosio/eos
這句話的意思是讓咱們生成一個名爲eosio/eos的鏡像文件,在Docker的命名習慣下,eosio/eos對應了Docker公共倉庫eosio命名空間下的eos倉庫。也就是說,EOS官方頗有可能已經把編譯好的鏡像文件上傳到Docker公共倉庫中。
事實是否如此?我嘗試作了如下操做。
1.刪除本地異常的eosio/eos鏡像
docker rmi e7bc2acf31bf
2.下載eosio/eos鏡像
docker pull eosio/eos
還真讓我下載到了。
下載好了鏡像,咱們來進一步驗證該鏡像是否可用,不論是本身生成的鏡像,仍是從Docker倉庫下載的,下面的驗證步驟都是同樣的。
參考開發文檔Start nodeos docker container only章節。
1.啓動一個nodeos節點
docker run –name nodeos -p 8888:8888 -p 9876:9876 -t eosio/eos nodeosd.sh arg1 arg2
啓動成功
2.驗證nodeos節點是否可用
驗證經過
3.同時啓動nodeos和kesod節點
docker volume create –name=nodeos-data-volume
docker volume create –name=keosd-data-volume
docker-compose -f docker-compose.yml up "-d"
這一步要注意幾點:
4.執行cleos命令
先設置cleos環境變量/etc/profile
export PATH=$PATH:/root/eos/build/programs/nodeos export PATH=$PATH:/root/eos/build/programs/cleos
而後執行cleos命令,測試eos安裝環境
cleos get info
cleos get account inita
注意head_block_num的值時10239,在前面驗證nodeos節點是否可用時,返回的head_block_num是711,這說明nodeos節點已經在自動生成區塊了。
至此環境驗證完畢,部署成功。
整個環境構建過程並不複雜,開發文檔已經寫得比較清楚,順利的話1到2個小時能夠完成。
不過你們仍是要注意隨機應變,不能徹底依賴開發文檔,好比當我遇到生成鏡像失敗的問題時,直接從Docker倉庫下載鏡像,這一點EOS的開發文檔中是沒有的。
另外還有一點要注意,開發文檔的內容變更很頻繁。我剛開始看文檔的時候,仍是在 https://github.com/EOSIO/eos 裏面,不知何時開始就變到 https://github.com/EOSIO/eos/wiki 裏面,目錄結構也變了。
最後仍是要吐槽一下EOS官方開發人員
今天中午在GitHub看到昨天提交的BUG已經Close,官方開發人員的回覆是:已經刪除genesis.json文件。我尚未測試,但願此次修改以後不會再有新的問題。