前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在ubuntu下 搭建区块链 (Hyperledger Fabric) 可在腾讯云实验室测试

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

原创
作者头像
林滨
修改2018-11-30 10:29:59
2.7K0
修改2018-11-30 10:29:59
举报
文章被收录于专栏:林滨的专栏

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

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

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

点我查看HashChain

1、 环境准备

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

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

1.1 请编辑原列表

代码语言:javascript
复制
执行命令:sudo vi /etc/apt/sources.list

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

代码语言:javascript
复制
  执行命令:   :%s/us./cn./g

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

1.2 权限问题

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

代码语言:javascript
复制
执行命令:sudo passwd

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

切换到root账号

代码语言:javascript
复制
执行命令:su root

更新源

代码语言:javascript
复制
执行命令:sudo apt-get update

2、配置GO环境

2.1 下载GO 并安装

代码语言:javascript
复制
执行命令(下载):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 编辑配置
代码语言:javascript
复制
执行命令: vim ~/.profile

添加以下内容:

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

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

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

代码语言:javascript
复制
执行命令(跳转到根目录):cd ~
代码语言:javascript
复制
执行命令(创建名称为go的文件夹):mkdir go

3、遇到锁的问题

3.1 遇到锁问题这样解决

命令模式出现如下提示:

代码语言:javascript
复制
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?

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

代码语言:javascript
复制
执行命令:sudo rm  /var/lib/dpkg/lock

4、安装docker

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

代码语言:javascript
复制
执行命令: sudo apt-get update

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

代码语言:javascript
复制
执行命令:curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

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

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

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

代码语言:javascript
复制
执行命令:sudo apt-get -y update
代码语言:javascript
复制
执行命令:sudo apt-get -y install docker-ce

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

代码语言:javascript
复制
执行命令:sudo docker version

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

代码语言:javascript
复制
执行命令:sudo usermod -aG docker ubuntu

### 注销并重新登录,然后添加阿里云的Docker Hub镜像

代码语言:javascript
复制
执行命令:sudo mkdir -p /etc/docker
代码语言:javascript
复制
执行命令: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,运行脚本:

代码语言:javascript
复制
执行命令:sudo apt-get install python-pip

5.2 然后是安装docker-compose

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

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

6、Fabric源码下载

6.1 github上clone 下载源代码

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

代码语言:javascript
复制
执行命令: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版本的源码即可:

代码语言:javascript
复制
执行命令:cd ~/go/src/github.com/hyperledger/fabric
执行命令:git checkout v1.0.0

6.3 Fabric Docker镜像的下载

这个其实很简单,因为我们已经设置了Docker Hub镜像地址,所以下载也会很快。官方文件也提供了批量下载的脚本。我们直接运行:

代码语言:javascript
复制
执行命令: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镜像了。由于我们设置了国内的镜像,所以下载应该是比较快的。

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

代码语言:javascript
复制
执行命令:docker images

7 、编译cryptogen

7.1 证书工具的使用

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

代码语言:javascript
复制
执行命令:sudo apt install libtool libltdl3-dev

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

代码语言:javascript
复制
执行命令:cd ~/go/src/github.com/hyperledger/fabric

执行命令:make cryptogen

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

代码语言:javascript
复制
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 用户

代码语言:javascript
复制
执行命令: ./network_setup.sh up

8.2 运行fabric 的example

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

代码语言:javascript
复制
执行命令:docker exec -it cli bash

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

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

可以看到余额是90:

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

代码语言:javascript
复制
执行命令(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 再次查看账户

代码语言:javascript
复制
执行命令:peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

可以看到余额是:70

代码语言:javascript
复制
ps:如果要退出 docker 请使用命令:exit


后续总结

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

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

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

第二步 进行业务操作

代码语言:javascript
复制
开启docker网络,执行命令:docker exec -it cli bash

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

代码语言:javascript
复制
查询账户余额,执行命令:peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

转账,执行命令:

代码语言:javascript
复制
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"]}'

第三步退出

代码语言:javascript
复制
在docker中,可以退出,执行命令:exit
代码语言:javascript
复制
关闭区块链网络,执行命令:./network_setup.sh down

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、 环境准备
    • 1.1 请编辑原列表
      • 1.2 权限问题
      • 2、配置GO环境
        • 2.1 下载GO 并安装
          • 2.2 配置go
            • 2.3 在根目录下创建 go文件夹
            • 3、遇到锁的问题
              • 3.1 遇到锁问题这样解决
                • 5.1 Docker-compose是支持通过模板脚本批量创建Docker容器的一个组件。在安装Docker-Compose之前,需要安装Python-pip,运行脚本:
                • 5.2 然后是安装docker-compose
                • 我们从官方网站(https://github.com/docker/compose/releases)下载也可以从国内的进行DaoClound下载,为了速度快接下来从DaoClound安装Docker-compose,运行脚本:
                • 6.1 github上clone 下载源代码
                • 6.2 Fabric 切换到指定版本v1.0.0
                • 6.3 Fabric Docker镜像的下载
                • 7.1 证书工具的使用
            • 4、安装docker
            • 5、 Docker-Compose的安装
            • 6、Fabric源码下载
            • 7 、编译cryptogen
            • 8 、启动Fabric网络并完成ChainCode的测试
              • 8.1 切换到root 用户
                • 8.2 运行fabric 的example
                  • 8.2.2 然后,我们试一试把a账户的余额再转20元给b账户,运行命令:
                  • 8.2.3 再次查看账户
              • 后续总结
              • 第一步 开启网络(前提是环境已经部署完成,网络状态是关闭的)
              • 第二步 进行业务操作
              • 第三步退出
              相关产品与服务
              容器镜像服务
              容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档