本地环境

Andrianto Lie12月7日编辑了这个页面 , 共4个修订

1.获取代码

要下载所有代码,请下载EOS源码和一个或两个子模块的递归。最简单的方法是做一个递归克隆:

$ git clone https://github.com/eosio/eos –recursive

如果不使用–recursive标志来克隆repo,可以通过在repo中运行这个命令来恢复子模块:

$ git submodule update –init –recursive

2.搭建EOS环境

2.1自动搭建环境脚本

对于Ubuntu 16.10和MacOS Sierra,这有一个自动搭建环境脚本,可以安装所有的依赖包并搭建EOS。

这个脚本叫build.sh,它包括下面两个输入。

  • architecture [ubuntu|darwin]
  • optional mode [full|build]

第一个选项确定搭建环境脚本运行的是什么架构,MacOS系统是“darwin”,Ubuntu系统是的“ubuntu”。

第二个可选输入可以是“full”或“build”,其中“build”仅搭建EOS,而“full”安装所有相关包的同时搭建EOS。没有输入代表“full”。

$ ./build.sh $ {architecture}  $ {optional_mode}

像下面所示的那样递归克隆EOS文件库,然后运行位于根路径的eos文件夹下的build.sh 脚本。

2.1.1Ubuntu 16.10

Full类型搭建环境

$ git clone https://github.com/eosio/eos –recursive

$ cd eos

$ ./build.sh Ubuntu full

递增的搭建环境

$ git clone https://github.com/eosio/eos –recursive

$ cd eos

$ ./build.sh ubuntu

继续下一步,创建并启动单节点测试网

2.1.2MacOS Sierra 操作系统

在运行脚本之前,请确保已更新XCode和brew:

$ xcode-select –install

$ ruby​​ -e “ $( curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install ) ”

Full类型搭建环境

$ git clone https://github.com/eosio/eos –recursive

$ cd eos

$ build.sh Darwin

递增的搭建环境

$ git clone https://github.com/eosio/eos –recursive

$ cd eos

$ build.sh darwin

继续下一步,创建并启动单节点测试网

2.2手动搭建环境脚本

2.2.1从源代码搭建环境

如上所述,建议使用build.sh进行搭建环境。但是,如果您想自行搭建环境,请按照以下步骤操作:

WASM_LLVM_CONFIG环境变量用于找到我们最近搭建的WASM编译器。编译eos/contracts文件夹中的示例和各种的案例时会用到它。

$ 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

源代码外搭建环境(Out-of-source builds)也支持。要在编译器中覆盖clang的默认选项,请将这些配置添加到CMake命令中:

-DCMAKE_CXX_COMPILER=/path/to/c++ -DCMAKE_C_COMPILER=/path/to/cc

 

调试(debug)版本要添加-DCMAKE_BUILD_TYPE=Debug配置,也可配置其他常见的编译类型,包括Release和RelWithDebInfo。

搭建环境完成后要运行测试单元,请运行tests夹中的chain_test可执行文件。

EOS附带了许多程序,可以在~/eos/build/programs路径中找到。如下所列:

  • eosd – 服务器端区块链节点组件
  • eosc – 与区块链交互的命令行界面
  • eos-walletd – EOS包
  • launcher – 节点网络组成和部署的应用程序; 更多的内容在launcher那一章叙述。

手动安装依赖包

如果您更愿意手动添加依赖包,请按照以下步骤操作。

这个项目主要是用C ++ 14写的,使用CMake作为它的编译系统。建议使用最新的Clang和最新版本的CMake。

依赖包:

2.2.2干净安装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分支)

$ CD  〜

$ git clone https://github.com/cryptonomex/secp256k1-zkp.git

$ cd secp256k1-zkp

$ ./autogen.sh

$ ./configure

$ make

$ sudo make install

EOS对外部依赖binaryen ,有它才能使用WASM编译器:

$ CD  〜

$ git clone https://github.com/WebAssembly/binaryen.git

$ CD  〜 / binaryen

$ git checkout tags / 1.37.14

$ cmake 。 && make

 

在.bash_profile脚本中添加BINARYEN_ROOT变量设置

$ echo “export BINARYEN_ROOT=~/binaryen” >> ~/.bash_profile

$ source ~/.bash_profile

默认情况下,LLVM和clang不包含WASM编译目标(build target),因此你必须自己创建它:

$ 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并运行一个节点

2.2.3 MacOS Sierra 10.12.6

macOS额外的依赖包:

  • Brew
  • Newest XCode

升级你的XCode到最新版本:

$ xcode-select –install

安装homebrew:

$ ruby​​ -e “ $( curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install ) ”

安装依赖包:

$ brew update

$ brew install git automake libtool boost openssl llvm@4 gmp ninja gettext

$ brew link gettext –force

$ brew link gettext –force

安装 secp256k1-zkp (Cryptonomex branch):

$ CD  〜

$ git clone https://github.com/cryptonomex/secp256k1-zkp.git

$ cd secp256k1-zkp

$ ./autogen.sh

$ ./configure

$ make

$ sudo make install

安装binaryen v1.37.14:

$ CD  〜

$ git clone https://github.com/WebAssembly/binaryen.git

$ CD  〜 / binaryen

$ git checkout tags / 1.37.14

$ cmake 。 && make

在.bash_profile脚本中添加BINARYEN_ROOT变量设置

$ echo  “ export BINARYEN_ROOT =〜/  binaryen ” >>  〜/ .bash_profile

$ 源 〜 /.bash_profile

 

为WASM模块编译LLVM和clang工具 :

 

$ 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

 

在.bash_profile脚本中添加WASM_LLVM_CONFIG 和 LLVM_DIR变量设置

 

$ 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

3. Docker

Docker上也可以简单快速的运行EOS。

3.1.安装依赖

  • 需要DockerDocker 17.05更高版本

3.2.编译eos镜像

$ git clone https://github.com/EOSIO/eos.git –recursive

$ cd eos/Docker

$ docker build . -t eosio/eos

3.3.只启动eosd docker容器

$ docker run –name eosd -p 8888:8888 -p 9876:9876 -t eosio / eos start_eosd.sh arg1 arg2

默认情况下,所有数据都保存在docker volume中。如果数据过期或损坏,可以将其删除:

$ docker inspect –format ‘ {{range .Mounts}} {{.Name}} {{end}} ‘ eosd

fdc265730a4f697346fa8b078c176e315b959e79365fc9cbd11f090ea0cb5cbc

$ docker volume rm fdc265730a4f697346fa8b078c176e315b959e79365fc9cbd11f090ea0cb5cbc

或者,你可以直接将主机目录挂载到容器中

$ docker run –name eosd -v / path-to-data-dir:/ opt / eos / bin / data-dir -p 8888:8888 -p 9876:9876 -t eosio / eos start_eosd.sh arg1 arg2

3.4. 获取信息

$ curl http://127.0.0.1:8888/v1/chain/get_info

3.5启动eosd和walletd容器

$ docker-compose up

使用docker-compose up命令 后,将启动eosd和walletd服务。eosd服务将把端口8888和9876暴露(expose)给主机。Walletd服务不会将任何端口暴露给主机,eosc只有eosc在Walletd容器内运行时才能访问,见“执行eosc命令”一节。

3.5.1 执行eosc命令

你可以使用bash别名运行eosc命令。

$ alias eosc=’docker-compose exec walletd /opt/eos/bin/eosc -H eosd’

$ eosc get info

$ eosc get account inita

 

上传交易所合约示例。

$ eosc set contract exchange contracts/exchange/exchange.wast contracts/exchange/exchange.abi

如果之后不需要Walletd,则可以停止Walletd服务

$ docker-compose stop walletd

3.5.2 更改默认配置

你可以使用docker编写覆盖文件来更改默认配置。例如,创建一个备用配置文件config2.ini和一个docker-compose.override.yml 文件。docker-compose.override.yml文件内容如下:

version: “2”

 

services:

eosd:

volumes:

– eosd-data-volume:/opt/eos/bin/data-dir

– ./config2.ini:/opt/eos/bin/data-dir/config.ini

然后按照以下步骤重新启动Docker容器:

$ docker-compose down

$ docker-compose up

3.5.3 清除数据目录(data-dir)

docker-compose创建的data volume 数据可以使用以下命令删除:

$ docker volume rm docker_eosd-data-volume

4.创建并启动单节点测试网络

在成功编译项目之后,eosd二进制文件应该在于build/programs/eosd目录中。继续运行eosd- 它可能会退出并报错,如果没有,请立即按Ctrl-C关闭它。请注意,eosd创建了一个名为data-dir的目录,该目录包含默认配置(config.ini)和其他内部文件。通过把–data-dir /path/to/data传递给eosd,可以重写这个默认的数据存储路径。

编辑config.ini文件,将下列设置添加到已有的默认设置中:

# Load the testnet genesis state, which creates some initial block producers with the default key

genesis-json = /path/to/eos/source/genesis.json

# Enable production on a stale chain, since a single-node test chain is pretty much always stale

enable-stale-production = true

# Enable block production with the testnet producers

producer-name = inita

producer-name = initb

producer-name = initc

producer-name = initd

producer-name = inite

producer-name = initf

producer-name = initg

producer-name = inith

producer-name = initi

producer-name = initj

producer-name = initk

producer-name = initl

producer-name = initm

producer-name = initn

producer-name = inito

producer-name = initp

producer-name = initq

producer-name = initr

producer-name = inits

producer-name = initt

producer-name = initu

# Load the block producer plugin, so you can produce blocks

plugin = eosio::producer_plugin

# Wallet plugin

plugin = eosio::wallet_api_plugin

# As well as API and HTTP plugins

plugin = eosio::chain_api_plugin

plugin = eosio::http_plugin

现在应该可以运行eosd,看到它开始生产区块。

运行eosd时,应该得到类似于下面的日志消息。这意味着区块已经成功生产。

1575001ms thread-0   chain_controller.cpp:235      _push_block          ] initm #1 @2017-09-04T04:26:15  | 0 trx, 0 pending, exectime_ms=0

1575001ms thread-0   producer_plugin.cpp:207       block_production_loo ] initm generated block #1 @ 2017-09-04T04:26:15 with 0 trxs  0 pending

1578001ms thread-0   chain_controller.cpp:235      _push_block          ] initc #2 @2017-09-04T04:26:18  | 0 trx, 0 pending, exectime_ms=0

1578001ms thread-0   producer_plugin.cpp:207       block_production_loo ] initc generated block #2 @ 2017-09-04T04:26:18 with 0 trxs  0 pending

5.故障排除指南

  1. 尝试启动eosd时会出现类如St9exception: content of memory does not match data expected by executable的错误。

请使用–resync尝试重新启动eosd

  1. 如何找到我正在运行或连接的eosd版本?

使用eosc -H ${eosd_host} -p ${eosd_port} get info命令,你在名为server_version的字段看到版本号。