参考博客:
https://blog.csdn.net/weixin_44573310/article/details/108553953
https://blog.csdn.net/u013782473/article/details/100608795
提前说明,下面给的代码语句,如果遇到跑不通的情况,可以试试在前面加sudo
,很多问题就是因为权限不够引起的。
一、前期准备
1、cURL最新版安装
# 下载最新版的cURL并将其解压
wgethttps://curl.haxx.se/download/curl-7.65.3.tar.xz
sudo tar xzvf curl-7.63.0.tar.gz -C /home
# 编译并安装cURL
cd /home/curl-7.65.3
./configure
make
sudo make install
通过运行curl --version查看是否安装成功。
2、Docker和Docker Compose安装
Docker
首先卸载可能存在的旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates gnupg-agent software- properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
docker version查看是否成功
3、Docker Compose
# 下载Docker Compose二进制文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod x /usr/local/bin/docker-compose
4、Go安装
# 下载go1.11.linux-amd64.tar.gz并将其解压到指定目录(此处为/usr/local)
wget https://studygolang.com/dl/golang/go1.11.linux-amd64.tar.gz
tar xzvf go1.11.linux-amd64.tar.gz -C /usr/local
goenvset.sh文件内容如下所示:
cat >> /etc/profile << EOF
export GOROOT=/usr/local/go
export GOARCH=amd64
export GOOS=linux
export GOPATH=/home/ubuntu/gopath
export GOBIN=\$GOPATH/bin
export PATH=\$GOPATH/bin:\$GOROOT/bin:\$PATH
EOF
# 执行已有的goenvset.sh向/etc/profile中写入相应的环境变量
sudo chmod 705 goenvset.sh # 更改goenvset.sh的权限使其可执行
sudo ./goenvset.sh # 执行goenvset.sh脚本
# 使环境变量生效
source /etc/profile
二、Fabric安装
1、将fabric-samples下载到$GOPATH/src/github.com/hyperledger目录中
mkdir -p $GOPATH/src/github.com/hyperledger
cd $GOPATH/src/github.com/hyperledger
# 克隆fabric-samples项目并切换到v1.4tag
git clone https://github.com/hyperledger/fabric-samples.git
cd fabric-samples
git checkout -b sample v1.4.4
2、安装Fabric Binaries和Fabric相关的Docker镜像
cd $GOPATH/src/github.com/hyperledger/fabric-samples/scripts
# 安装Fabric、Fabric-ca以及第三方Docker镜像(./bootstrap.sh <fabric> <fabric-ca> <thirdparty>)
./bootstrap.sh 1.4.0 1.4.0 0.4.14
会报错
gzip: stdin: unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now
==> There was an error downloading the binary file. Switching to incremental download.
==> Downloading file…
Failure downloading binaries (curl RC=6). Please try again and the download will resume from where it stopped.
值得注意的是,里面的二进制文件是下载不下来的。因为下载二进制文件的网页,已经打不开了。所以,要把二进制文件的内容,注释掉。
进入scripts目录下,有一个bootstrap.sh的脚本
#binariesInstall() {
# echo "===> Downloading version ${FABRIC_TAG} platform specific fabric binaries"
# binaryDownload ${BINARY_FILE} https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/${ARCH}-${VERSION}/${BINARY_FILE}
# if [ $? -eq 22 ]; then
# echo
# echo "------> ${FABRIC_TAG} platform specific fabric binary is not available to download <----"
# echo
# fi
# echo "===> Downloading version ${CA_TAG} platform specific fabric-ca-client binary"
# binaryDownload ${CA_BINARY_FILE} https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric-ca/hyperledger-fabric-ca/${ARCH}-${CA_VERSION}/${CA_BINARY_FILE}
# if [ $? -eq 22 ]; then
# echo
# echo "------> ${CA_TAG} fabric-ca-client binary is not available to download (Available from 1.1.0-rc1) <----"
# echo
# fi
#}
在这个文件中,也可以根据自己的需求,修改fabric的版本号,我改成了1.4.4。
修改完毕保存后,./bootstrap.sh启动这个脚本
如以下二进制文件未下载完成则,人工执行命令
wget https://github.com/hyperledger/fabric/releases/download/v1.4.4/hyperledger-fabric-linux-amd64-1.4.4.tar.gz
wget https://github.com/hyperledger/fabric-ca/releases/download/v1.4.4/hyperledger-fabric-ca-linux-amd64-1.4.4.tar.gz
tar xzvf hyperledger-fabric-linux-amd64-1.4.4.tar.gz -C $GOPATH/src/github.com/hyperledger/fabric-samples/
tar xzvf hyperledger-fabric-ca-linux-amd64-1.4.4.tar.gz -C $GOPATH/src/github.com/hyperledger/fabric-samples/
#向/etc/profile中写入环境变量
sudo echo 'export PATH=$GOPATH/src/github.com/hyperledger/fabric-samples/bin:$PATH' >> /etc/profile
#使环境变量生效
source /etc/profile
ps:如果
wget https://github.com/hyperledger/fabric/releases/download/v1.4.4/hyperledger-fabric-linux-amd64-1.4.4.tar.gz
这句话下载较慢,也可以通过下面两个网址,滑到页面最底下,点击相应版本自行下载后,再解压
https://github.com/hyperledger/fabric/releases/tag/v1.4.4 https://github.com/hyperledger/fabric-ca/releases/tag/v1.4.4
2、如docker相关镜像未下载完成则执行如下命令下载相关镜像。
# 下载Fabric相关镜像(fabric-peer、fabric-orderer、fabric-ccenv、fabric-tools),此处以fabric-peer镜像为例,其他镜像同理
docker pull hyperledger/fabric-peer:1.4.0
docker tag hyperledger/fabric-peer:1.4.0 hyperledger/fabric-peer:latest
# 下载Fabric第三方镜像(fabric-couchdb、fabric-kafka、fabric-zookeeper),此处以fabric-couchdb为例,其他镜像同理
docker pull hyperledger/fabric-couchdb:0.4.14
docker tag hyperledger/fabric-couchdb:0.4.14 hyperledger/fabric-couchdb:latest
# 下载Fabric CA镜像
docker pull hyperledger/fabric-ca:1.4.0
docker tag hyperledger/fabric-ca:1.4.0 hyperledger/fabric-ca:latest
3、通过运行Build your first network
样例来进行测试、
cd $GOPATH/src/github.com/hyperledger/fabric-samples/first-network
# 编译通过Golang开发的chaincode并启动相关的容器
./byfn.sh up
./byfn.sh up -l node
./byfn.sh up -o kafka
#停止first-network网络中所有的容器,删除crypto材料和4个artifacts(genesis.block、mychannel.block、Org1MSPanchor.tx、Org2MSPanchor.tx)以及chaincode镜像
./byfn.sh down
这样就可以啦!
遇到的问题
1、ERROR: Couldn’t connect to Docker daemon at http+docker://localhost - is it running?
方法一:可以先./byfn.sh down
,再./byfn.sh up
方法二:
sudo systemctl unmask docker.service
sudo systemctl unmask docker.socket
sudo systemctl start docker.service
2、Error: could not assemble transaction, err proposal response was not successful, error code 500, msg error starting container: error starting container: Failed to generate platform-specific docker build: Failed to pull hyperledger/fabric-ccenv:latest: API error (404): manifest for hyperledger/fabric-ccenv:latest not found: manifest unknown: manifest unknown
!!! Chaincode instantiation on peer0.org2 on channel ‘mychannel’ failed !!!
========= ERROR !!! FAILED to execute End-2-End Scenario ===========
ERROR !!! Test failed
原因:Instantiation of Chaincode using Fabric Node manifest for hyperledger/fabric-ccenv:latest not found
解决方法:
# 手动下载最新版
docker pull hyperledger/fabric-ccenv:2.1
# 加上最新版的标签
docker tag hyperledger/fabric-ccenv:2.1 hyperledger/fabric-ccenv:latest
# 重新执行之前的指令
(参考:https://blog.csdn.net/u013288190/article/details/109572367)
3、报错“Error: got unexpected status: BAD_REQUEST – error applying config update to existing channel ‘mychannel’: error authorizing update: error validating ReadSet: proposed update requires that key [Group] /Channel/Application be at version 0, but it is currently at version 1”
方法:已经存在mychannel,之前启动的fabric network没有正常停止,如果之前执行./byfn.sh up,那么相应的执行./byfn.sh down来停止fabric network。不要直接使用docker stop 或者 docker rm 停止删除容器。
(参考:https://blog.csdn.net/weixin_44150643)
4、Error response from daemon: manifest for xxx:latest not found: manifest unknown…
错误的意思是docker需要我们指定下载镜像的版本号。
我们可以登录docker hub:https://hub.docker.com/u/library,搜索自己想要下载的镜像名:
(参考:https://yanglinwei.blog.csdn.net/article/details/105043400)
5、 Cannot run peer because cannot init crypto, folder “/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp” does not exist
!!! Channel creation failed !!!
方法:./byfn.sh down
学习网址:
1、Hyperledger Fabric release-1.4 官方手册:https://hyperledger-fabric.readthedocs.io/en/release-1.4/whatis.html
2、docker官方教程(Get Docker CE for Ubuntu):https://docs.docker.com/install/linux/docker-ce/ubuntu/
3、http://cw.hubwiz.com/card/c/fabric-command-manual/1/3/1/
4、https://github.com/chaozh/awesome-blockchain-cn
pink老师说,在github上,搜awe fabric、awe java就能搜到相应的各种素材教程