一直想学习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文件。我尚未测试,但愿此次修改以后不会再有新的问题。