在ubuntu下 搭建区块链 (Hyperledger Fabric) 可在腾讯云实验室测试

作为目前Hash chain 的CTO,接到很多开源社区的朋友请教,大家对于区块链抱有很大程度上的热诚。但是由于区块链开发技术门槛较高,广谱技术开发普及度不高。所以准备出个教程,本来昨天已经在腾讯云实验室测试部署完成,但是由于没被审核通过,审核同学可能规矩比较严吧,再加上平时工作太忙了,没办法细致整合,我就把在实验室的原内容照搬在底下,只能让大家跟着文章,看一看,一起了解。

有不懂的地方可以加群问答:qq:538327407

同时也感谢:Hashchain 研发中腾讯区块链团队的童鞋们鼎力帮助和支持!

点我查看HashChain

1、 环境准备

### 如果在 腾讯云实验室环境,不需要执行这一步

在安装完Ubuntu后,需要保证apt source是国内的,不然如果是国外的话会很慢很慢的。具体做法是

1.1 请编辑原列表

执行命令:sudo vi /etc/apt/sources.list

打开这个apt源列表,如果其中看到是http://us.xxxxxx之类的,那么就是外国的,如果看到是http://cn.xxxxx之类的,那么就不用换的。我的是美国的源,所以需要做一下批量的替换。在命令模式下,输入:

  执行命令:   :%s/us./cn./g

就可以把所有的us.改为cn.了。然后输入:wq即可保存退出。

1.2 权限问题

如果后面遇到权限问题,切换到root 账户

执行命令:sudo passwd

修改设置自己的密码,两次,建议选择123456

切换到root账号

执行命令:su root

更新源

执行命令:sudo apt-get update

2、配置GO环境

2.1 下载GO 并安装

执行命令(下载):wget https://studygolang.com/dl/golang/go1.9.linux-amd64.tar.gz
执行命令(解压):sudo tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz

【注意:不要使用apt方式安装go,apt的go版本太低了!】

2.2 配置go

  • 2.1.1 编辑配置
执行命令: vim ~/.profile

添加以下内容:

export PATH=$PATH:/usr/local/go/bin 
export GOROOT=/usr/local/go 
export GOPATH=$HOME/go 
export PATH=$PATH:$HOME/go/bin
编辑保存并退出vi后(esc 键退出命令模式, wq即可保存退出。记得把这些环境载入:
执行命令:source ~/.profile

2.3 在根目录下创建 go文件夹

我们把go的目录GOPATH设置为当前用户的文件夹下,所以记得创建go文件夹

执行命令(跳转到根目录):cd ~
执行命令(创建名称为go的文件夹):mkdir go

3、遇到锁的问题

3.1 遇到锁问题这样解决

命令模式出现如下提示:

Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

解决方法:删除锁定的文件

执行命令:sudo rm  /var/lib/dpkg/lock

4、安装docker

#### step 1: 安装必要的一些系统工具

执行命令: sudo apt-get update

#### step 2: 安装GPG证书

执行命令:curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

#### Step 3: 写入软件源信息

执行命令:sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

#### Step 4: 更新并安装 Docker-CE

执行命令:sudo apt-get -y update
执行命令:sudo apt-get -y install docker-ce

#### step 5:查看是否安装完成,显示当前的docker版本

执行命令:sudo docker version

### 安装完成后需要修改当前用户(我使用的用户叫ubuntu)权限:

执行命令:sudo usermod -aG docker ubuntu

### 注销并重新登录,然后添加阿里云的Docker 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

5、 Docker-Compose的安装

5.1 Docker-compose是支持通过模板脚本批量创建Docker容器的一个组件。在安装Docker-Compose之前,需要安装Python-pip,运行脚本:

执行命令:sudo apt-get install python-pip

5.2 然后是安装docker-compose

我们从官方网站(https://github.com/docker/compose/releases)下载也可以从国内的进行DaoClound下载,为了速度快接下来从DaoClound安装Docker-compose,运行脚本:

执行命令:curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
执行命令:sudo mv ~/docker-compose /usr/local/bin/docker-compose 
chmod +x /usr/local/bin/docker-compose

6、Fabric源码下载

6.1 github上clone 下载源代码

我们可以使用Git命令下载源码,首先需要建立对应的目录,然后进入该目录,Git下载源码:

执行命令:mkdir -p ~/go/src/github.com/hyperledger 
执行命令:cd ~/go/src/github.com/hyperledger 
执行命令:git clone https://github.com/hyperledger/fabric.git

6.2 Fabric 切换到指定版本v1.0.0

由于Fabric一直在更新,所有我们并不需要最新最新的源码,需要切换到v1.0.0版本的源码即可:

执行命令:cd ~/go/src/github.com/hyperledger/fabric
执行命令:git checkout v1.0.0

6.3 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

这样就可以下载所有需要的Fabric Docker镜像了。由于我们设置了国内的镜像,所以下载应该是比较快的。

### 下载完毕后,我们运行以下命令检查下载的镜像列表:

执行命令:docker images

7 、编译cryptogen

7.1 证书工具的使用

编译生成 cryptogen之前我们需要安装一个软件包,否则编译时会报错

执行命令:sudo apt install libtool libltdl3-dev

Fabric提供了专门编译cryptogen的入口,我们只需要运行以下命令即可:

执行命令:cd ~/go/src/github.com/hyperledger/fabric

执行命令:make cryptogen

运行后系统返回如下结果即代表编译成功了

build/bin/cryptogen 
CGO_CFLAGS=" " GOBIN=/home/studyzy/go/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/cryptogen/metadata.Version=1.0.0" github.com/hyperledger/fabric/common/tools/cryptogen 
Binary available as build/bin/cryptogen

ps:我们在build/bin文件夹下就可以看到编译出来的cryptogen程序。

8 、启动Fabric网络并完成ChainCode的测试

我们仍然停留在e2e_cli文件夹,这里提供了启动、关闭Fabric网络的自动化脚本。我们要启动Fabric网络,并自动运行Example02 ChainCode的测试,执行一个命令:

8.1 切换到root 用户

执行命令: ./network_setup.sh up

8.2 运行fabric 的example

我们仍然是以现在安装好的Example02为例,在官方例子中,channel名字是mychannel,链码的名字是mycc。我们首先进入CLI,我们重新打开一个命令行窗口,输入:

执行命令:docker exec -it cli bash

8.2.1 运行以下命令可以查询a账户的余额:

执行命令(docker环境):peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

可以看到余额是90:

8.2.2 然后,我们试一试把a账户的余额再转20元给b账户,运行命令:

执行命令(docker环境):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","a","b","20"]}'

8.2.3 再次查看账户

执行命令:peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

可以看到余额是:70

ps:如果要退出 docker 请使用命令:exit


后续总结

第一步 开启网络(前提是环境已经部署完成,网络状态是关闭的)

跳转指定文件夹,执行命令:cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
启动网络,执行命令:./network_setup.sh up

这个时候,关掉终端,重新开一个终端,网络是存在的,正常的

第二步 进行业务操作

开启docker网络,执行命令:docker exec -it cli bash

运行以下命令可以查询a账户的余额:

查询账户余额,执行命令:peer chaincode query -C mychannel -n mycc -c '{"Args":["query","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","a","b","20"]}'

第三步退出

在docker中,可以退出,执行命令:exit
关闭区块链网络,执行命令:./network_setup.sh down

注意:网络关闭,后面重新开启,数据恢复初始

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏架构技术

[转]Docker容器可视化监控中心搭建

【原文链接】https://www.jianshu.com/p/9e47ffaf5e31?hmsr=toutiao.io&utm_medium=toutiao....

1213
来自专栏木子昭的博客

安装CentOS7虚拟机, 配置docker套件

CentOS7比ubuntu的一键式安装要稍微复杂一些, 有些小伙伴按照下一步, 下一步的套路安装完成, 发现没有图像化界面, 在纯粹的命令行里面, 很多小伙伴...

1284
来自专栏Fred Liang

Panel

一句话描述:Panel 是一个移动端 APP,提供云服务器以及容器管理服务,用户可以快速地通过 Panel 创建,启动,停止,销毁云服务器和容器。

621
来自专栏Java技术分享

Linux操作系统安装的5种方法以及心得

  其中光盘安装是最普遍的,也是最简单的我就不写了。我安装的这台机器没有光驱,也没有软驱!!!只有网卡和一个128MU盘"o"

2657
来自专栏张善友的专栏

配置Subversion

采用Subversion作为版本控制,配置方式如下: 版本控制选用Subversion,它对重构的支持比CVS要好。例如改名,原子提交等CVS无法支持的操作。 ...

17710
来自专栏linux驱动个人学习

Linux启动流程

启动第一步--加载BIOS  当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包...

3215
来自专栏L宝宝聊IT

kvm命令行安装

6932
来自专栏张善友的专栏

IIS 7.0探索用于 Windows Vista 的 Web 服务器和更多内容

我经常听到 Microsoft 内部和外部的人将新的 IIS 7.0 Web 服务器称为 Microsoft 在过去几年中所进行的最重要的开发工作之一。考虑到 ...

2289
来自专栏Java 技术分享

Ubuntu on win10

5178
来自专栏Java技术分享

1.Linux操作系统安装的5种方法以及心得

  安装Linux共有五种方法   1、光盘       2、硬盘   3、NFS 映像   4、FTP   5、HTTP   其中光盘安装是最普遍的,也是最简...

2337

扫码关注云+社区