摘要:如果你的环境搭建再云服务器上,例如阿里云或者腾讯云,可以不用更新源,直接在自己的主机上使用远程连接工具连接上云主机,环境就算完成了若在本地不能连接上云主机,或者虚拟机,检查一下是否已经安装并启动若没有,可以参加网上的教程,配置远程连接。
前言
最近在参加一个比赛,使用到了区块链的开源软件hyperledger,由于之前从未接触过区块链,以及和区块链开发相关的内容,所有在网上查阅了大量的资料,并且通过学习yeasy(杨宝华)开源的入门书籍区块链技术指南以及进阶学习的《区块链原理、设计与应用》,对区块链的一些相关概念有了一定认识。这里记录的是我安装hyperledger fabric的所有步骤,同时也是一个快速搭建单机环境的参考教程。
准备好机器环境本人的区块链网络部署在VMware搭建的ubuntu16.04的环境下(推荐使用该版本的系统),详细的系统版本为ubuntu-16.04.4-desktop-amd64.iso ,是从网易开源镜像站下载的。对于如何使用VMware安装虚拟机以及让虚拟机访问网络,网上有许多教程,这里就不重复讲了。
当将系统安装完成后,需要更换源,使用desktop版的可以直接在设置里面选择最佳服务器,如下图所示
若使用的是服务器版本,则可以使用如下命令换成高速的源
先备份原来的源文件
$ sudo cp /etc/apt/source.list /etc/apt/source.list.bak
打开source.list文件,删除原来的内容
$ sudo vim /etc/apt/source.list
任选下面一组源文件复制到source.list中
网易源
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
阿里源
# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties deb http://archive.canonical.com/ubuntu xenial partner deb-src http://archive.canonical.com/ubuntu xenial partner deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
搜狐源
deb http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse deb http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse deb http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse deb http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse deb http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse deb-src http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse deb-src http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse deb-src http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse deb-src http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse deb-src http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse
复制进去后,使用:wq保存,然后使用如下命令更新一下
$ sudo apt-get install update
执行完成后环境就基本上准备好了,如果使用的是服务器版本,觉得使用不方便的话,可以使用xshell之类的远程连接工具连接你的虚拟机。如果你的环境搭建再云服务器上,例如阿里云或者腾讯云,可以不用更新源,直接在自己的主机上使用远程连接工具连接上云主机,环境就算完成了(若在本地不能连接上云主机,或者虚拟机,检查一下ssh是否已经安装并启动,若没有,可以参加网上的教程,配置远程连接)。
安装GO语言环境不推荐使用apt的方式安装GO,原因是这样安装的版本比较老,推荐安装最新版的GO,具体安装命令如下
下载最新的GO安装包,具体的最新版本号可以从Golang官网上查看
$ wegt https://dl.google.com/go/go1.10.2.linux-amd64.tar.gz
解压安装包到/usr/local目录下
$ sudo tar -C usr/local -xzf go1.10.2.linux-amd64.tar.gz
编辑当前用户的环境变量
$ vim ~/.profile
添加如下内容
export PATH=$PATH:/usr/local/go/bin export GOROOT=/usr/local/go #这里配置的GOPATH目录为家目录的的go文件夹 export GOPATH=$HOME/go export PATH=$PATH:$HOME/go/bin
使用:wq保存后使用如下命令将保存立即刷新
$ source ~/.profile
建立GOPATH目录
由于在环境变量中配置了GOPATH目录的位置,所以我们需要在家目录下创建该文件夹
$ cd ~ $ mkdir go
查看go版本,测试环境配置是否成功
$ go version go version go1.10 linux/amd64安装Docker
这里使用的Docker的官方文档来安装docker
如果系统中有旧版本的Docker,需要先使用如下命令卸载
$ sudo apt-get remove docker docker-engine docker.io
更新apt包索引
$ sudo apt-get update
安装软件包以允许apt通过HTTPS使用远程库
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
若出现无法识别命令,可以先将该命令复制到一个文本文件中,将去掉,将所有语句放在同一行下,然后复制执行。
添加Docker的官方GPG密钥
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
通过搜索指纹的最后8个字符,确认您现在拥有指纹识别码9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
$ sudo apt-key fingerprint 0EBFCD88 pub 4096R/0EBFCD88 2017-02-22 Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid Docker Release (CE deb)sub 4096R/F273FCD8 2017-02-22
使用以下命令设置稳定版本的远程库
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
再次更新apt包索引
$ sudo apt-get update
使用apt安装docker-ce
$ sudo apt-get install docker-ce
查看docker版本,测试环境配置是否成功
$ docker version Client: Version: 18.03.1-ce API version: 1.37 Go version: go1.9.5 Git commit: 9ee9f40 Built: Thu Apr 26 07:17:20 2018 OS/Arch: linux/amd64 Experimental: false Orchestrator: swarm Server: Engine: Version: 18.03.1-ce API version: 1.37 (minimum version 1.12) Go version: go1.9.5 Git commit: 9ee9f40 Built: Thu Apr 26 07:15:30 2018 OS/Arch: linux/amd64 Experimental: false
安装完成之后,需要将当前用户添加到docker用户组,然后为该用户添加sudo权限
若没有创建docker用户组,可以使用如下命令创建一个GID为999,组名为docker的用户组
$ sudo groupadd –g 999 docker
将当前用户(ubuntu)添加到docker用户组并分配sudo权限
$ sudo usermod -aG docker ubuntu
注销后重新登录,然后添加阿里云的Docker Hub镜像(注意,不同版本的添加方法不同,见阿里云容器 Hub)
$ sudo mkdir -p /etc/docker $ sudo tee /etc/docker/daemon.json <<-"EOF" { "registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"] } EOF $ sudo systemctl daemon-reload $ sudo systemctl restart docker
如果觉得阿里云镜像不好用,可以选择DaoClound的镜像,配置方式见DaoCloud官方文档
安装Docker-ComposeDocker-Compose是支持通过模板脚本批量创建的一个组件。在安装 Docker-Compose之前,需要安装python-pip
安装python-pip
$ sudo apt-get python-pip
下载 Docker-Compose,这里使用的是国内的DaoClound加速器进行下载
$ curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
将Docker-Compose文件夹移动到/usr/local/bin目录下
$ sudo mv ~/docker-compose /usr/local/bin/docker-compose
为Docker-Compose附上可执行权限
$ chmod +x /usr/local/bin/docker-compose下载Fabric源码
先在GOPATH下创建对应的目录
$ mkdir -p ~/go/src/github.com/hyperledger
切换到对应目录,使用Git命令将fabric的源码从github上克隆下来
$ cd ~/go/src/github.com/hyperledger $ git clone https://github.com/hyperledger/fabric.git
由于Fabric一直在更新,而我们并不需要使用最新的源码,所有将版本切换到v1.0.0
$ cd ~/go/src/github.com/hyperledger/fabric $ git checkout v1.0.0下载Fabric Docker镜像
由于刚才设置了Docker Hub镜像的地址,并且官方文件中也提供了批量下载的脚本,所有我们只需运行下面命令即可
$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/ $ source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0
由于刚才设置的是国内的镜像站,在本地网速还不错的情况下下载数度还是很快的。当下载完成后,使用如下命令检查镜像列表
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE dev-peer0.org1.example.com-marbles-v4 latest 089d43e100c9 5 hours ago 173MB dev-peer0.org1.example.com-fabcar-1.0 latest 6047921ee993 7 hours ago 173MB hyperledger/fabric-tools latest 0403fd1c72c7 10 months ago 1.32GB hyperledger/fabric-tools x86_64-1.0.0 0403fd1c72c7 10 months ago 1.32GB hyperledger/fabric-couchdb latest 2fbdbf3ab945 10 months ago 1.48GB hyperledger/fabric-couchdb x86_64-1.0.0 2fbdbf3ab945 10 months ago 1.48GB hyperledger/fabric-kafka latest dbd3f94de4b5 10 months ago 1.3GB hyperledger/fabric-kafka x86_64-1.0.0 dbd3f94de4b5 10 months ago 1.3GB hyperledger/fabric-zookeeper latest e545dbf1c6af 10 months ago 1.31GB hyperledger/fabric-zookeeper x86_64-1.0.0 e545dbf1c6af 10 months ago 1.31GB hyperledger/fabric-orderer latest e317ca5638ba 10 months ago 179MB hyperledger/fabric-orderer x86_64-1.0.0 e317ca5638ba 10 months ago 179MB hyperledger/fabric-peer latest 6830dcd7b9b5 10 months ago 182MB hyperledger/fabric-peer x86_64-1.0.0 6830dcd7b9b5 10 months ago 182MB hyperledger/fabric-javaenv latest 8948126f0935 10 months ago 1.42GB hyperledger/fabric-javaenv x86_64-1.0.0 8948126f0935 10 months ago 1.42GB hyperledger/fabric-ccenv latest 7182c260a5ca 10 months ago 1.29GB hyperledger/fabric-ccenv x86_64-1.0.0 7182c260a5ca 10 months ago 1.29GB hyperledger/fabric-ca latest a15c59ecda5b 10 months ago 238MB hyperledger/fabric-ca x86_64-1.0.0 a15c59ecda5b 10 months ago 238MB hyperledger/fabric-baseos x86_64-0.3.1 4b0cab202084 12 months ago 157MB
出现以上结果说明镜像已经下载成功
启动Fabric网络并运行e2e_cli项目进入e2e_cli目录,并执行启动命令
$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/ $ ./network_setup.sh up
这个过程做了如下操作
1.编译生成Fabric公私钥,证书的程序,程序在目录:fabric/release/linux-amd64/bin下2.基于configtx.yaml生成创世区块和通道相关信息,并保存到channel-artifacts文件夹中
3.基于crypto-config.yaml生成公私钥和证书信息,并保存在crypto-config文件夹中
4.基于docker-compose-cli.yaml启动1 Orderer + 4 Peer + 1 CLI的Fabric容器
5.在CLI启动的时候,会运行srcipt/script.sh文件,这个脚本文件包含了创建Channel,加入Channel,安装Example02,运行Example02等功能
最后运行完成,我们会看到如下截图,说明网络启动成功了
我们以安装好的Example02进行测试,在官方例子中,channel的名字是mychannel,链码的名字是mycc,我们首先重新打开一个命令行,然后进入CLI,
输入以下命令即可
$ docker exec -it cli bash
运行以下命令可以查询a账户的余额
$ peer chaincode query -C mychannel -n mycc -c "{"Args":["query","a"]}"
查询结果如下图所示
可以看到a账户的余额现在是90
运行以下命令可以查询b账户的余额
$ peer chaincode query -C mychannel -n mycc -c "{"Args":["query","b"]}"
查询结果如下图所示
可以看到b账户的余额现在是210
现在将b账户的余额转100给a账户,运行如下命令
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -c "{"Args":["invoke","b","a","100"]}"
执行结果如下图所示
可以看到执行成功了
再次查询a账户的余额
$ peer chaincode query -C mychannel -n mycc -c "{"Args":["query","a"]}"
查询结果如下图所示
可以看到a账户的余额现在是190,比之前多了100
再次查询b账户的余额
$ peer chaincode query -C mychannel -n mycc -c "{"Args":["query","b"]}"
查询结果如下图所示
可以看到b账户的余额现在是110,比之前少了100
调用链码一切正常
关闭区块链网络退出CLI容器
root@4941e8bd4bd6:/opt/gopath/src/github.com/hyperledger/fabric/peer# exit
关闭Fabric网络
$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli $ ./network_setup.sh down
最后出现如下图说明关闭区块链网络成功
至此,部署以及测试fabric的环境已经全部完成,下一篇博客我将记录如何在此基础上部署及运行IBM官方区块链例子marbles(弹珠资产)
参考快速搭建一个Fabric 1.0的环境
Hyperledger Fabric 1.0 从零开始(五)——运行测试e2e
超级账本搭建流程fabric-sample first-network
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/24075.html
摘要:协议的细节由一个名为的处理。运行下面的脚本来让所有的事情都发生一两分钟后,命令提示符将返回运行结果如下图所示现在运行该命令查看当前正在运行的容器。 showImg(https://segmentfault.com/img/bVbazHF?w=709&h=159); 前言 本教程基本上是对Marbles项目的翻译过程. 如果英文比较好的话,建议根据官方操作说明,一步步进行环境部署。当然你...
摘要:脚本列出了在结束时安装的映像。在不同的体系结构,将用标识体系结构的字符串替换。提供了许多来支持各种编程语言,官方发布了两款针对和的和文档。。 入门 在我们开始之前,如果你还没有这样做,你可能希望检查是否已经在开发区块链应用程序和/或运行Hyperledger Fabric的平台上安装了所有前提条件。 一旦安装了前提条件,就可以下载并安装HyperLedger Fabric了,当我们在F...
摘要:和比特币协议有所不同的是,以太坊的设计十分灵活,极具适应性。超级账本区块链的商业应用超级账本超级账本是基金会下的众多项目中的一个。证书颁发机构负责签发撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 从比特币开始 一个故事告诉你比特币的原理及运作机制 这篇文章的定位会比较科普,尽量用类比的方法将比特币的基本原理讲出来...
摘要:阿里云容器服务区块链解决方案第一时间同步升级,在新功能的基础上,提供了弹性裸金属服务器神龙内置容器化集成阿里云日志服务等方面的增强。 摘要: 全球开源区块链领域影响最为广泛的Hyperledger Fabric日前宣布了1.1版本的正式发布,带来了一系列丰富的新功能以及在安全性、性能与扩展性等方面的显著提升。阿里云容器服务区块链解决方案第一时间同步升级,在v1.1新功能的基础上,提供了...
摘要:企业区块链平台企业级许可的分布式分类账平台,为广泛的行业用例提供模块化和多功能性。这些节点通过应用已经由共识协议验证的交易来维护分类帐的副本,该交易被分组为包括将每个块绑定到前一个块的散列的块中。 企业区块链平台 企业级许可的分布式分类账平台,为广泛的行业用例提供模块化和多功能性。 介绍 一般而言,区块链是一个不可变的交易分类账,维护在一个分布式对等节点网络中。这些节点通过应用已经由共...
阅读 3512·2021-11-17 17:01
阅读 3918·2021-11-08 13:12
阅读 2477·2021-10-08 10:04
阅读 686·2021-09-29 09:35
阅读 1418·2021-09-26 10:12
阅读 2019·2021-09-07 09:58
阅读 1952·2019-08-30 15:55
阅读 2134·2019-08-30 13:14