EOS開發環境搭建,如何編譯安裝構建EOSIO
獲取程式碼
下載所有的EOSIO程式碼,clone eos
庫和所有的子模組。
shell 命令如下:
git clone https://github.com/EOSIO/eos --recursive
如果忘記加 --recursive
引數也沒關係,隨後也可以用命令 clone 所有子模組。
git submodule update --init --recursive
安裝構建設定
EOSIO可以在多個平臺上安裝構建,並有各種路徑進行安裝構建。大多數使用者更喜歡使用自動化指令碼或docker,而更高階的使用者或希望部署公共節點的使用者可能需要手動方法。構建內容生成在eos/build
eos/build/programs
資料夾的子資料夾中找到。
- 自動化指令碼 :適合於大多數開發人員,這個指令碼是基於Mac OS和許多Linux版本的。
- docker-compose方式 :到目前為止最快的安裝方法,可以在兩分鐘內啟動並執行一個節點。也就是說,它需要一些額外的本地配置來進行開發,以便順利執行並遵循我們提供的教程。
- 手動安裝構建:適用於那些可能對自動化指令碼有衝突的環境,或者希望對其構建進行更多控制的開發者。
- 可執行檔案安裝構建:一個可選的
make install
步驟,可以使本地開發更加友好。
自動化指令碼安裝
有一個自動化的構建指令碼,可以安裝所有依賴項並構建EOSIO。指令碼支援以下作業系統。
我們正在支援和將來發佈會支援的Linux/UNIX發行版。
- Amazon 2017.09 和更高版本。
- Centos 7。
- Fedora 25和更高版本(推薦 Fedora 27)。
- Mint 18。
- Ubuntu 16.04(推薦 Ubuntu 16.10)。
- MacOS Darwin 10.12和更高版本(推薦 MacOS 10.13.x)。
從eos
目錄執行安裝構建指令碼:
cd eos
./eosio_build.sh
docker-compose方式構建
如果你只是想跑起來,可能通過docker快速構建安裝EOSIO更適合。否則你想了解更高階的構建,那麼繼續。
安裝依賴項
Docker的要求
- 至少7GB RAM(DOCK->首選項->高階->記憶體->7GB或以上)
- 如果安裝構建失敗,請確保你已經調整了Docker記憶體設定,然後再試一次。
構建eos映象
git clone https://github.com/EOSIO/eos.git --recursive --depth 1
cd eos/Docker
docker build . -t eosio/eos
以上將在預設情況下構建對主分支的最新提交。如果想針對特定的分支/tag,可以使用生成引數。例如,如果希望根據v1.0.0 tag生成Docker映象,可以執行以下操作:
docker build -t eosio/eos:v1.0.0 --build-arg branch=v1.0.0 .
預設情況下,eosio.system的 symbol 設定為SYS
。在構建Docker映象時,可以使用 symbol 引數來做到這一點。
docker build -t eosio/eos --build-arg symbol=ABC.
在 docker 中啟動 nodeos
docker run --name nodeos -p 8888:8888 -p 9876:9876 -t eosio/eos nodeosd.sh -e arg1 arg2
預設情況下,所有資料都儲存在docker卷中。如果資料過時或損壞,則可以刪除它:
$ docker inspect --format '{{ range .Mounts }}{{ .Name }}{{ end }}' nodeos
fdc265730a4f697346fa8b078c176e315b959e79365fc9cbd11f090ea0cb5cbc
$ docker volume rm fdc265730a4f697346fa8b078c176e315b959e79365fc9cbd11f090ea0cb5cbc
或者,可以直接將宿主目錄安裝到docker中。
docker run --name nodeos -v /path-to-data-dir:/opt/eosio/bin/data-dir -p 8888:8888 -p 9876:9876 -t eosio/eos nodeosd.sh -e arg1 arg2
獲取區塊鏈資訊
curl http://127.0.0.1:8888/v1/chain/get_info
在docker中啟動nodeos和keosd
docker volume create --name=nodeos-data-volume
docker volume create --name=keosd-data-volume
docker-compose up -d
在docker-compose -d
之後,將啟動nodeos
和keosd
兩個服務。nodeos服務會將埠8888和9876提供給主機。kesod服務不向主機公開任何埠,只有當在cleos容器中執行cleos時,cleos才可以訪問它。
執行cleos命令
你可以執行cloes
通過bash別名
alias cleos='docker-compose exec keosd /opt/eosio/bin/cleos -u http://nodeosd:8888 --wallet-url http://localhost:8900'
cleos get info
cleos get account inita
如果你想在任何地方使用cleos
命令,你可以在docker-compose.yml
指定路徑:
alias cleos='docker-compose -f path-to-eos-dir/Docker/docker-compose.yml exec keosd /opt/eosio/bin/cleos -u http://nodeosd:8888 --wallet-url http://localhost:8900'
提交exchange示例合約:
cleos set contract exchange contracts/exchange/
如果你不需要keosd
,可以停止使用keosd
服務:
docker-compose stop keosd
開發構建客戶合約
由於eosio/eos映象不包含合約開發所需的依賴關係(這樣設計是為了保持較小映象尺寸),所以需要使用 eosio/eos-dev映象。此映象包含使用eosiocpp構建合約的所需二進位制檔案和依賴項。
可以使用Docker Hub上可用的映象或進入到dev資料夾並手動構建映象。
cd dev
docker build -t eosio/eos-dev .
修改預設配置
可以使用docker compose更改預設配置。例如,建立一個備用配置檔案config2.ini
和docker-compose.override.yml
,內容如下:
version: "2"
services:
nodeos:
volumes:
- nodeos-data-volume:/opt/eosio/bin/data-dir
- ./config2.ini:/opt/eosio/bin/data-dir/config.ini
然後重啟docker:
docker-compose down
docker-compose up
刪除data-dir
docker-compose建立的data卷可以被刪除:
docker volume rm nodeos-data-volume
docker volume rm keosd-data-volume
Docker Hub
建立一個新的docker-compose.yaml
檔案內容如下:
version: "3"
services:
nodeosd:
image: eosio/eos:latest
command: /opt/eosio/bin/nodeosd.sh --data-dir /opt/eosio/bin/data-dir -e
hostname: nodeosd
ports:
- 8888:8888
- 9876:9876
expose:
- "8888"
volumes:
- nodeos-data-volume:/opt/eosio/bin/data-dir
keosd:
image: eosio/eos:latest
command: /opt/eosio/bin/keosd --wallet-dir /opt/eosio/bin/data-dir --http-server-address=127.0.0.1:8900
hostname: keosd
links:
- nodeosd
volumes:
- keosd-data-volume:/opt/eosio/bin/data-dir
volumes:
nodeos-data-volume:
keosd-data-volume:
注意:預設版本是最新版本,可以將其更改為你想要的版本。
- 執行:
docker pull eosio/eos:latest
- 執行:
docker-compose up
EOSIO 1.0 Testnet
我們可以很容易地建立一個EOSIO 1.0本地Testnet測試鏈,使用docker映象。只需執行以下命令:
注意:如果你想使用mongo db外掛,你必須首先在data-dir/config.ini
啟用它。
# pull images
docker pull eosio/eos:v1.0.0
# create volume
docker volume create --name=nodeos-data-volume
docker volume create --name=keosd-data-volume
# start containers
docker-compose -f docker-compose-eosio1.0.yaml up -d
# get chain info
curl http://127.0.0.1:8888/v1/chain/get_info
# get logs
docker-compose logs -f nodeosd
# stop containers
docker-compose -f docker-compose-eosio1.0.yaml down
預設情況下,blocks
資料儲存在--data-dir
下,預設情況下錢包檔案儲存在--wallet-dir
下,當然,你可以根據需要更改這些檔案路徑。
關於MongoDB外掛
目前,MongoDB外掛在config.ini
中被禁用,預設情況下,必須在config.ini
中手動更改它,或者可以在docker-compose檔案中將config.ini
檔案mount到/opt/eosio/bin/data-dir/config.ini
。
手動安裝構建
若要手動生成,請使用以下步驟在eos
資料夾中建立build
資料夾,然後執行build。下面的步驟假設eos
儲存庫被clone到home(即,~)資料夾中。還假定已經安裝了必要的依賴項。請參見手動安裝依賴項。
cd ~
mkdir -p ~/eos/build && cd ~/eos/build
在Linux平臺上,使用這個cmake
命令:
cmake -DBINARYEN_BIN=~/binaryen/bin -DWASM_ROOT=~/wasm-compiler/llvm -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib -DBUILD_MONGO_DB_PLUGIN=true ..
在MacOS上,使用這個cmake
命令:
cmake -DBINARYEN_BIN=~/binaryen/bin -DWASM_ROOT=/usr/local/wasm -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib -DBUILD_MONGO_DB_PLUGIN=true ..
然後在所在平臺上執行:
make -j$( nproc )
也支援Out-of-source安裝構建。若要在編譯器中重寫預設選擇,請將這些標誌新增到CMake命令:
-DCMAKE_CXX_COMPILER=/path/to/c++ -DCMAKE_C_COMPILER=/path/to/cc
對於除錯模式的安裝構建,新增-DCMAKE_BUILD_TYPE=Debug
。其他常見的構建型別包括Release
和RelWithDebInfo
。
可執行檔案安裝構建
為了便於智慧合約開發,可以使用make install
將目標內容安裝到/usr/local
中。此步驟要從build
目錄下執行的。需要適當的安裝許可權。
cd build
sudo make install
系統需求(包括所有平臺)
- 記憶體 7GB
- 硬碟 20GB
安裝構建的驗證
可選地,可以對我們的構建執行一組測試,以執行一些基本驗證。要在構建後執行測試套件,啟動mongod
然後執行make test
。
在 Linux 平臺上:
~/opt/mongodb/bin/mongod -f ~/opt/mongodb/mongod.conf &
在 MacOS 平臺上:
/usr/local/bin/mongod -f /usr/local/etc/mongod.conf &
然後執行下面的操作:
cd build
make test
另:《EOS智慧合約與DApp開發入門》教程已經上線,歡迎大家關注:
本教程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智慧合約開發與部署、使用程式碼與智慧合約互動等核心知識點,最後綜合運用React和EOS的各知識點完成一個便籤DApp的開發。
如果你希望學習以太坊相關的內容,可以選擇以下教程:
匯智網原創翻譯,轉載請標明出處。原文