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
步骤,可以使本地开发更加友好。
如果你是新手,建议直接看通过docker快速构建安装EOSIO。
自动化脚本安装
有一个自动化的构建脚本,可以安装所有依赖项并构建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:Docker 17.05或更高版本
- docker-compose :版本>= 1.10.0
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 Hub 镜像来自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的开发。
汇智网原创翻译,转载请标明出处。原文
- 有趣的算法(五) ——Dijkstra双栈四则运算
- CSS深入理解学习笔记之float
- 轻松初探 Python 篇(五)—dict 和 set 知识汇总
- 全面解析C#中的异步编程为什么要异步过去糟糕的体验一个新的方式Tasks基于任务的异步编程模型Async和await时间处理程序和无返回值的异步方法结束语
- CSS深入理解学习笔记之absolute
- 5个经典的JavaScript面试题
- 轻松初探 Python 篇(四)—list tuple range 知识汇总
- CSS深入理解学习笔记之overflow
- Python爬虫实践——简单爬取我的博客
- Python爬虫入门(二)
- 在ASP.NET MVC5应用程序中快速接入QQ和新浪微博OAuth起步创建应用程序使用NUGET更新OWIN中间件启动SSL支持申请腾讯QQ的Oauth申请新浪微博的Oauth快速接入资源地址&源码
- 有趣的算法(六) ——Find-Union算法
- 有趣的算法(七) ——快速排序改进算法
- 编写你人生中第一个机器学习代码吧!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在linux下玩转带有超时时间的connect函数
- Linux/CentOS服务器安全配置通用指南
- 详解centos7中配置keepalived日志为别的路径
- jointplot快速探究两组变量的分布及关系
- linux中alarm函数的实例讲解
- 如何给Linux虚拟机连上WiFi详解
- Linux系统查看CPU、机器型号、内存等信息
- 实战基本的Linux sed命令示例代码
- 在Linux中如何查看可用的网络接口详解
- Linux程序运行时加载动态库失败的解决方法
- Linux/CentOS系统同步网络时间的2种方法详解
- Linux 常用命令之Linux more命令使用方法
- Ubuntu下VIM配置成C++开发编辑器
- Ubuntu环境下使用G++编译CPP文件
- Linux下Tomcat的几种运行方式讲解