超级账本Fabric 2.x 详细安装步骤及可能问题解决方式
超级账本Fabric 2.x 详细安装步骤及可能问题解决方式
使用系统版本:Ubuntu 18.04
提示1:任何命令错误都可以试试加sudo提升权限!!!
提示2:如果Ubuntu系统没有换源可以参考如何修改ubuntu软件源为国内源进行换源。
提示3:学习安装链码可参考超级账本Fabric2.x 如何将智能合约部署到通道。
参考文章:官方文档
Hyperledger Fabric2.0.0报错集锦
一、准备阶段
1.1 安装pip并更新
pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。
sudo apt install python-pip# 直接使用pip install --upgrade pip 命令会很慢,需要换源# 这里直接使用-i参数,指定pip源pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
1.2 安装curl
cURL是一个利用URL语法在命令行下工作的文件传输工具。
sudo apt install curl
1.3 安装git
git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
sudo apt install git
1.4 安装docker
首先需要安装17.06.2-ce或更高版本,建议安装最新版本的docker。 安装docker之前为确保docker版本过低,卸载以前的docker,重新安装docker。
sudo apt-get remove docker docker-engine docker.io
卸载docker完成之后开始安装docker,分别执行以下命令
sudo apt install docker.io
查看版本
docker -v
(可选)如果你希望 docker daemon 在系统启动的时候会自动启动的话,使用下边的命令
sudo systemctl enable docker
将你的用户添加到 docker 组。
sudo usermod -a -G docker <username>
最后重启服务
sudo systemctl daemon-reload sudo systemctl restart docker
修改docker镜像源
# docker默认的源为国外官方源,下载速度较慢,可改为国内加速 cd /etc/docker sudo vim daemon.json # 写入 {"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"] } #保存退出 #重启docker服务 systemctl restart docker.service # 进入主目录 cd ~
1.5 安装docker-compose
- 执行下列命令安装
sudo apt install docker-compose
- 查看是否安装成功
docker-compose -v
- 允许其他用户执行compose相关命令
sudo chmod +x /usr/share/doc/docker-compose
1.6 安装Go语言
- 首先安装一些必要的依赖
sudo apt install libtool libltdl-dev
- 去 studygolang网站 下载Go语言的安装包,目前最新版本: go1.15.5.linux-amd64.tar.gz
将压缩包复制到/usr/local路径下,然后进行解压sudo wget https://studygolang.com/dl/golang/go1.15.5.linux-amd64.tar.gz
- 下载完 Golang 压缩包之后,使用 tar 命令将压缩包解压到指定的 /usr/local/ 路径下,命令如下
sudo tar -xzvf go1.15.5.linux-amd64.tar.gz -C /usr/local/
- 下面开始配置环境变量
sudo vim /etc/profile #在文件末尾加入如下代码 export PATH=$PATH:/usr/local/go/bin export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
- 使用 source 命令,使刚刚添加的配置信息生效
source /etc/profile
- 使用 go version 命令验证是否安装成功
go version
如果显示了版本号,就说明安装成功。
二、安装示例、二进制和 Docker 镜像
2.1 下载fabric源码
首先创建文件夹(默认在~目录下)
mkdir -p go/src/github.com/hyperledger/
进入刚刚创建的文件夹内
cd go/src/github.com/hyperledger/
从github上拉取fabric的源码
git clone https://github.com/hyperledger/fabric.git # 注意:这一步下载会很慢,可以使用科学上网方法 # 也可以使用Chrome浏览器中GitHub加速插件,下面使用加速插件连接替换 # 以下代码执行其中一行即可。 git clone https://hub.fastgit.org/hyperledger/fabric.git # or git clone https://github.com.cnpmjs.org/hyperledger/fabric.git # or git clone https://github.91chifun.workers.dev//https://github.com/hyperledger/fabric.git
2.2 执行bootstrap.sh脚本
fabric官方提供了一个bootstrap.sh的脚本, 该脚本拥有三个功能 :1. 下载fabric-samples文件; 2. 下载二进制文件; 3. 拉取docker镜像。 并且这个脚本支持三个参数, 可以灵活地控制它的执行 . 分别是
-b:加上此参数,则不下载二进制文件
-d:加上此参数则不拉取docker镜像
-s:加上此参数则不下载fabric-samples
在完成2.1的操作后,进入~/go/src/github.com/hyperledger/fabric/scripts目录,会见到bootstrap.sh脚本文件,执行即可。
cd ~/go/src/github.com/hyperledger/fabric/scripts
sudo ./bootstrap.sh
注意!!!!
- 直接执行bootstrap.sh脚本会非常慢,并且容易因为运行时间过长而断开网络连接,从而下载失败。因此不建议直接执行bootstrap.sh脚本,建议从2.3开始继续往下走。
- 如果使用以下方式依旧觉得慢,可以尝试超级账本Fabric安装示例、二进制和 Docker 镜像的另一种方式。但是以下方式操作更加简单,是更推荐的方式。
2.3 修改bootstrap.sh
- 进入bootstrap.sh
vim ~/go/src/github.com/hyperledger/fabric/scripts/bootstrap.sh
- 修改cloneSamplesRepo() 函数
在cloneSamplesRepo() 函数中会发现fabric-samples是在GitHub中克隆的,注释原克隆代码,修改为以下任一克隆代码(可以试试哪一个访问地址最快,选择最快的访问地址)
# 源代码为
# git clone -b master https://github.com/hyperledger/fabric-samples.git && cd fabric-samples
# 修改为
git clone -b master https://hub.fastgit.org/hyperledger/fabric-samples.git && cd fabric-samples
# or
git clone -b master https://github.com.cnpmjs.org/hyperledger/fabric-samples.git && cd fabric-samples
# or
git clone -b master https://github.91chifun.workers.dev//https://github.com/hyperledger/fabric-samples.git && cd fabric-samples
修改后的cloneSamplesRepo() 函数如下所示
cloneSamplesRepo() {# clone (if needed) hyperledger/fabric-samples and checkout corresponding# version to the binaries and docker images to be downloadedif [ -d first-network ]; then# if we are in the fabric-samples repo, checkout corresponding versionecho "==> Already in fabric-samples repo"elif [ -d fabric-samples ]; then# if fabric-samples repo already cloned and in current directory,# cd fabric-samplesecho "===> Changing directory to fabric-samples"cd fabric-sampleselseecho "===> Cloning hyperledger/fabric-samples repo"#git clone -b master https://github.com/hyperledger/fabric-samples.git && cd fabric-samplesgit clone -b master https://hub.fastgit.org/hyperledger/fabric-samples.git && cd fabric-samplesfiif GIT_DIR=.git git rev-parse v${VERSION} >/dev/null 2>&1; thenecho "===> Checking out v${VERSION} of hyperledger/fabric-samples"git checkout -q v${VERSION}elseecho "fabric-samples v${VERSION} does not exist, defaulting master"git checkout -q masterfi
}
- 修改pullBinaries() 函数
在pullBinaries() 函数中会发现二进制文件fabric v* 和 fabric ca v*也是在GitHub中下载的,注释原下载代码,修改为以下任一下载代码(可以试试哪一个访问地址最快,选择最快的访问地址)
# 源代码为
download "${BINARY_FILE}" "https://github.com/hyperledger/fabric/releases/download/v${VERSION}/${BINARY_FILE}"
download "${CA_BINARY_FILE}" "https://github.com/hyperledger/fabric-ca/releases/download/v${CA_VERSION}/${CA_BINARY_FILE}"
# 修改为
download "${BINARY_FILE}" "https://github.91chifun.workers.dev//https://github.com/hyperledger/fabric/releases/download/v${VERSION}/${BINARY_FILE}"
download "${CA_BINARY_FILE}" "https://github.91chifun.workers.dev//https://github.com/hyperledger/fabric-ca/releases/download/v${CA_VERSION}/${CA_BINARY_FILE}"
修改后的pullBinaries() 函数如下所示
pullBinaries() {echo "===> Downloading version ${FABRIC_TAG} platform specific fabric binaries"# download "${BINARY_FILE}" "https://github.com/hyperledger/fabric/releases/download/v${VERSION}/${BINARY_FILE}"download "${BINARY_FILE}" "https://github.91chifun.workers.dev//https://github.com/hyperledger/fabric/releases/download/v${VERSION}/${BINARY_FILE}"if [ $? -eq 22 ]; thenechoecho "------> ${FABRIC_TAG} platform specific fabric binary is not available to download <----"echoexitfiecho "===> Downloading version ${CA_TAG} platform specific fabric-ca-client binary"# download "${CA_BINARY_FILE}" "https://github.com/hyperledger/fabric-ca/releases/download/v${CA_VERSION}/${CA_BINARY_FILE}"download "${CA_BINARY_FILE}" "https://github.91chifun.workers.dev//https://github.com/hyperledger/fabric-ca/releases/download/v${CA_VERSION}/${CA_BINARY_FILE}"if [ $? -eq 22 ]; thenechoecho "------> ${CA_TAG} fabric-ca-client binary is not available to download (Available from 1.1.0-rc1) <----"echoexitfi
}
保存bootstrap.sh脚本。
2.4 执行修改后bootstrap.sh脚本
直接执行修改后bootstrap.sh脚本即可。
cd ~/go/src/github.com/hyperledger/fabric/scripts
sudo ./bootstrap.sh
# 下载速度可能还是很慢,可以等等再下载,因为可能源服务器下载量太大。
# 但是就算比较慢,还是比直接在GitHub上下载要快得多!!!
配置环境
运行后在fabric-samples目录下会形成bin和config目录。
将其添加到 PATH 环境变量中,以便在不需要指定每个二进制文件的绝对路径的情况下获取这些命令
sudo vim /etc/profile
export PATH=$GOPATH/src/github.com/hyperledger/fabric/scripts/fabric-samples/bin:$PATH
# 保存退出
# 执行
source /etc/profile
验证二进制文件和环境变量的配置是否成功,出现版本信息,说明安装成功.
peer version
三、使用Fabric的测试网络
3.1 启动测试网络
在fabric-samples代码库的test-network目录中找到启动网络的脚本。在此目录中,可以找到带注释的脚本network.sh,该脚本在本地计算机上使用Docker镜像建立Fabric网络。
执行以下命令来启动网络
cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network
sudo ./network.sh up
# 此命令创建一个由两个对等节点和一个排序节点组成的Fabric网络
3.2 创建一个通道
可以使用network.sh脚本在Org1和Org2之间创建通道并加入他们的对等节点。 运行以下命令以创建一个默认名称为“ mychannel”的通道:
sudo ./network.sh createChannel
如果命令成功执行,您将看到以下消息打印在你的日志:
========= Channel successfully joined ===========
你也可以使用channel标志创建具有自定义名称的通道。 作为一个例子,以下命令将创建一个名为channel1的通道:
sudo ./network.sh createChannel -c channel1
通道标志还允许你创建多个不同名称的多个通道。 创建mychannel或channel1之后,你可以使用下面的命令创建另一个名为channel2的通道:
sudo ./network.sh createChannel -c channel2
如果你想一步建立网络并创建频道,则可以使用up和createChannel模式一起:
# 先使用sudo ./network.sh down关闭上面开启的Fabric网络。否则会失败。
sudo ./network.sh up createChannel
3.3 在通道启动一个链码
使用network.sh创建通道后,你可以使用以下命令在通道上启动链码:
sudo ./network.sh deployCC
注意!!!
可能出现的问题1
执行上面的命令后可能会出现找不到go命令的错误,这是因为sudo命令会重置当前的环境变量,导致go命令找不到。聪明的人可能会想到不加sudo命令,然后运行后你会发现提示权限不够。
Error: failed to normalize chaincode path: failed to determine module root: exec: "go": executable file not found in $PATH
解决方法如下:
vim ~/.bashrc
# 开头或末尾添加
alias sudo='sudo env PATH=$PATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH'
# 保存退出
# 重置环境配置
source ~/.bashrc
可能出现的问题2
执行上面的命令后可能会出现以下错误:
Error: failed to normalize chaincode path: 'go list' failed with: go: github.com/golang/protobuf@v1.3.2: Get "https://proxy.golang.org/github.com/golang/protobuf/@v/v1.3.2.mod": dial tcp 216.58.200.49:443: connect: connection refused: exit status 1
看错误提示可以看到它是访问golang的官网https://proxy.golang.org,这是外网,自然报错。
解决方法如下:
# 在命令行直接运行
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
解决以上两个问题后重新运行启动链码命令即可。
3.4 与网络交互
在启用测试网络后,可以使用peer CLI与您的网络进行交互。 peer CLI允许你调用已部署的智能合约,更新通道,或安装和部署新的智能合约。使用以下命令将bin文件夹中peer二进制文件添加到你的CLI路径:
export PATH=${PWD}/../bin:${PWD}:$PATH
将fabric-samples代码库中的FABRIC_CFG_PATH设置为指向其中的core.yaml文件:
export FABRIC_CFG_PATH=$PWD/../config/
设置环境变量,以允许你作为Org1操作peer CLI:
# Environment variables for Org1
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051
CORE_PEER_TLS_ROOTCERT_FILE和CORE_PEER_MSPCONFIGPATH环境变量指向Org1的organizations文件夹中的的加密材料。如果你使用./network.sh deployCC安装和启动fabcar链码,你现在可以从CLI查询账本。 运行以下命令以获取已添加到通道账本中的汽车列表:
sudo peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'
注意!!!运行上面的查询命令可能会出现以下的错误:
Fatal error when initializing core config : error when reading core config file: Config File "core" Not Found in "[/home/test/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network]"
上面的错误还是因为环境变量的问题。解决方法如下,进入对应目录,执行启动指令:
sudo vim /etc/sudoers
# 将”Defaults env_reset”改成”Defaults !env_reset”,
# 使用sudo模式需要重置用户的所有环境变量,改变此选项后就不再重置了。
Defaults !env_reset
再次执行查询命令,如果再次出现以下错误:
Error: endorsement failure during query. response: status:500 message:"make sure the chaincode fabcar has been successfully defined on channel mychannel and try again: chaincode fabcar not found"
解决方法如下:
cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/fabcar
sudo ./startFabric.sh
再次执行查询命令
cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network
sudo peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'
当网络成员要转移或更改帐上的资产时,将调用链码。 使用以下命令调用fabcar链码来更改账本上汽车的所有者:
sudo peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabcar --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"changeCarOwner","Args":["CAR9","Dave"]}'
如果命令成功,您应该看到以下响应:
Chaincode invoke successful. result: status:200
3.5 关停网络
使用完测试网络后,可以使用以下命令关闭网络:
sudo ./network.sh down
写在最后
学习安装链码可参考超级账本Fabric2.x 如何将智能合约部署到通道。
如果想要学习更多的hyperledger-fabric知识,推荐去看官方文档。
超级账本Fabric 2.x 详细安装步骤及可能问题解决方式相关推荐
- 用Kubernetes部署超级账本Fabric的区块链即服务(1)
用Kubernetes部署超级账本Fabric的区块链即服务(1) 2017年08月13日 00:00:00 阅读数:937 题图摄于旧金山市区:云海中的 Twin Peaks 不久前,我们发表了如何 ...
- 用Kubernetes部署超级账本Fabric的区块链即服务
关注微信公众号 区块链大本营,学习更多区块链技术及应用知识. 区块链行业投稿,请邮件联系 jiawd@csdn.net 本文将探讨如何把 Fabric v1.0自动化部署在现今最流行的 Kuberne ...
- 超级账本Fabric 1.0多节点集群的部署(2)
上期文章阐述了超级账本 Fabric 1.0多节点部署的方法概述,得到广大读者的关注,笔者们连夜赶工,今天发布连载之二,介绍具体搭建 Fabric 1.0 集群的步骤. 注:部署过程中大量使用了doc ...
- 基于超级账本Fabric的供应链跟踪解决方案【开源】
2019独角兽企业重金招聘Python工程师标准>>> 本项目为基于Hyperledger Fabric区块链的供应链资产跟踪解决方案,项目主要包括链码和Web应用两部分.Fabri ...
- 超级账本Fabric中的权限管理和策略
权限管理是区块链网络十分重要的功能,负责控制某个身份在某个场景下是否允许采取某个操作(如读写某个资源). 超级账本 Fabric 项目通过策略(Policy)来灵活指定各场景下的操作权限. 策略应用场 ...
- 超级账本Fabric的架构与设计
超级账本Fabric项目自诞生之日起就吸引了全球众多企业的密切关注,已经先后发布了两个大的版本,0.6实验版本(2016年9月)和1.0正式版本(2017年7月). 目前,超级账本Fabric架构上核 ...
- 超级账本Hyperledger-Fabric本地编译与安装(来源于区块链-原理、设计与应用)
超级账本Hyperledger-Fabric本地编译与安装 来源于杨保华等<区块链-原理.设计与应用> 本地编译安装部署超级账本Fabric网络. 超级账本Fabric基于Go语言实现, ...
- 【链块技术51期】超级账本Fabric教程(一):超级账本入门
原文链接:超级账本Fabric教程(一):超级账本入门 本节分享有关拆超级账本的概念以及体验部署过程. 一.简介 是一个带有可插入各种功能模块架构的区块链实施方案,目标是打造成一个由全社会共同维护的开 ...
- 安装 | Windows 10下基于Anaconda的TensorFlow详细安装步骤(续)——Pycharm运行tensorflow
github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 Blogger:MichaelBeecha ...
最新文章
- linux php任务计划,Linux--PHP脚本的计划任务
- echart x轴标签偏移_移动端H5页面滑动手势X轴实例
- jquery上传图片
- 基于fiddler的网络爬虫校园网自动登陆系统
- 喜马拉雅贺雯迪:基于端到端TTS实现更具生动、富有情感的语音合成表现
- 【数据结构与算法】【算法思想】贪心算法
- 2012浙大878计算机专业基础综合大题答案解析
- 怎么使用Eclipse默认的keystore签名打包成Apk
- Spring对字段和集合的注入---依赖注入
- python安装笔记_Python学习笔记(一)python的安装和配置
- java线性表多个属性_顺序存储结构的线性表(java实现)
- Android网络编程之——文件断点下载(暂停/继续/重新下载)
- 数据分析师与数据科学家的区别
- java服务端性能优化_记我的一次 Java 服务性能优化
- Borůvka algorithm
- 浙江海發進出口股份有限公司官网上线|LTD五金技术行业案例分享
- php下雨效果源码,ps下雨效果制作步骤
- css解决 多张图片如何统一大小 且没拉伸问题
- 高等数学(拉格朗日乘子法):NOI 2012 骑行川藏
- 安装主机及服务器系统
热门文章
- ESP8266开发之旅 进阶篇⑩ sniffer混杂模式,监听802.11帧,黑科技基础
- MICCAI 2020 Challenges
- 什么是AP,胖瘦AP如何区分?
- ARM开发板移植lsusb命令
- 通熟易懂的设计模式(一)
- soundex mysql,如何使用Doctrine和Symfony 3实现Soundex搜索(在MySql中)
- 简约开源导航书签管理系统PHP源码
- android power键测试,Android Framework层Power键关机流程(一,Power长按键操作处理)...
- 快速解决Ubuntu镜像在官网下载速度很慢的方法
- 合路器Combiner Multiplexer