关于hyperledger,那些年我蹚过的那些坑……
Posted 区块链兄弟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于hyperledger,那些年我蹚过的那些坑……相关的知识,希望对你有一定的参考价值。
▲点击蓝字,轻松关注
来源:知乎
原文链接:https://www.zhihu.com/people/monkeyking-98-80/posts
著权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
本文约10000字+,阅读(观看)需要60分钟
前言:
参照网上某人搭建 hyperledger/fabric 的开发环境:
win10:
1、安装vagrant:vagrant_1.9.2.msi
2、安装Oracle VM VirtualBox:VirtualBox-5.1.12-112440-Win.exe
3、从某网下载:virtualbox.box
4、vagrant box add ...
vagrant up
一切ok;
然后用 xshell 登录127.0.0.1:
uname -a
Linux ubuntu-1404 4.4.0-36-generic #55~14.04.1-Ubuntu SMP Fri Aug 12 11:49:30 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
1、安装go:go1.8.linux-amd64.tar.gz
2、配置go环境变量:
export GOROOT=/usr/go
export GOBIN=$GOROOT/bin
export GOARCH=386
export GOOS=linux
export PATH=$GOROOT/bin:$PATH
export GOPATH=/opt/gopath
其它略过不表。
然后:
cd /opt/gopath/src/http://github.com/hyperledger/fabric/
make peer
出现各种download 或 pull失败;
解决办法,登陆一个美国的云服务器,下载了各个编译时下载文件,直接copy进来:
./tools/
chaintool
gradle-2.12-bin.zip
apache-maven-3.3.9-bin.tar.gz
hyperledger_fabric-baseimage_x86_64-0.3.0.tar
然后出现坑:
尝试改成:
出现:
哎,最后发现是自己煞笔了呗,本来是x86_64环境,却配置了一个:
export GOARCH=386:
可能你们没遇到过,因为你们不配置:export GOARCH=386
改成:
export GOROOT=/opt/go
export GOBIN=$GOROOT/bin
export GOARCH=amd64
export GOOS=linux
export PATH=$GOROOT/bin:$PATH
export GOPATH=/opt/gopath
编译能往下进行。
但继续到哪,我没继续搞了;
因为有高人建议:直接用编译好的docker去学习,可以少躺坑。。。
PS:为什么要这样搭建开发环境?为了方便在win10上编辑,virtualbox的ubuntu上编译、运行。多年养成的陋习,改不了。。。
我们继续:
放弃:先make peer,然后docker build... 的方式去学习;
转而:直接用编译好的docker去学习;
1、环境还是:win10 vagrant up ubuntu virtualbox;
2、不再make peer,直接用大拿build好的docker images进行验证测试:
docker load < ./fabric-couchdb.tar
docker tag hyperledger/fabric-couchdb:x86_64-1.0.0-alpha hyperledger/fabric-couchdb:latest
docker load < ./fabric-javaenv.tar
docker tag hyperledger/fabric-javaenv:x86_64-1.0.0-alpha hyperledger/fabric-javaenv:latest
docker load < ./fabric-kafka.tar
docker tag hyperledger/fabric-kafka:x86_64-1.0.0-alpha hyperledger/fabric-kafka:latest
docker images的结果为:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hyperledger/fabric-ca latest 35311d8617b4 12 days ago 240 MB
然后:
cd /opt/gopath/src/http://github.com/hyperledger/fabric/examples/e2e_cli/
执行:
root@ubuntu-1404:/opt/gopath/src/http://github.com/hyperledger/fabric/examples/e2e_cli# ./network_setup.sh up phf-channel-1
结果,坑:
Error: Error endorsing chaincode: rpc error: code = 2 desc = Illegal file mode detected for file src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02/chaincode_example02.go: 100777
Usage:
peer chaincode install [flags]
是在chaincode 安装过程一直报错,提示“Illegal file mode”,就是examples/chaincode/go/chaincode_example02/chaincode_example02.go文件的权限不对;
网上查了一下,貌似这个文件不能有"x"权限 --- 其实这是hyperledger/fabric刚被提到jira上的一个bug,见:
Modifying chaincode and compiling causes a failure on cli install command
尝试通过chown、chmod等方式修改该文件的owner及mode,均失败:
ls examples/chaincode/go/chaincode_example02/chaincode_example02.go -l
-rwxrwxrwx 1 root root 5436 Mar 9 11:13 examples/chaincode/go/chaincode_example02/chaincode_example02.go
可能是这是将win10目录mount到ubuntu fs下导致的,于是,转而直接在/home/vagrant/go/src/http://github.com/hyperledger/ 目录下:
git clone hyperledger/fabric
然后 export GOPATH=/home/vagrant/go,然后 cd
/home/vagrant/go/src/http://github.com/hyperledger/fabric/examples/e2e_cli/
./network_setup.sh up phf-channel-1
chaincode安装成功!
此时:
ls -l ./examples/chaincode/go/chaincode_example02/chaincode_example02.go
-rw-r--r-- 1 root root 5436 Mar 29 09:31 ./examples/chaincode/go/chaincode_example02/chaincode_example02.go
那么,如果继续用:
win10 vagrant up ubuntu virtualbox的环境,怎么办呢?
我的办法是:
1、修改 devenvVagrantfile,屏蔽掉如下一行:
#config.vm.synced_folder "..", "/opt/gopath/src/http://github.com/hyperledger/fabric"
即关闭/opt/gopath/src/http://github.com/hyperledger/fabric下的mount点 --- sync不再生效。
2、然后vagrant up;
3、cd /opt/gopath --- 因为hyperledger/fabric的很多环境配置都是以GOPATH=/opt/gopath为前提,为避免躺更多的坑,所以。。。
mkdir src/http://github.com/hyperledger
cd src/http://github.com/hyperledger
git clone hyperledger/fabric
4、cd /opt/gopath/src/http://github.com/hyperledger/fabric/examples/e2e_cli/
./network_setup.sh up phf-channel-1
就可以了
PS:你vagrant up起来的ubuntu,可提前做:
#!/bin/sh
# 0 - update
sed -i 's/us/cn/g' /etc/apt/sources.list
apt-get update
# 1 - go
mv /opt/go /opt/go_16
GO_INSTALL_DIR=/opt
tar -zxvf ./go1.8.linux-amd64.tar.gz -C ${GO_INSTALL_DIR}/
GOROOT=${GO_INSTALL_DIR}/go
echo GOPATH=${GOPATH}
echo GOARCH=${GOARCH}
node -v
npm version
docker version
go version
# 2 - pip
pip install requests==2.6.0
# 3 - docker python ......
cp ./docker-enter /usr/bin/
chmod 777 /usr/bin/docker-enter
pip install behave nose docker-compose
pip install -I flask==0.10.1 python-dateutil==2.2 pytz==2014.3 pyyaml==3.10 couchdb==1.0 flask-cors==2.0.1 requests==2.4.3 pyOpenSSL==16.2.0 pysha3==1.0b1 grpcio==1.0.4
pip install urllib3 ndg-httpsclient pyasn1 ecdsa python-slugify grpcio-tools jinja2 b3j0f.aop six
pip install -I flask==0.10.1 python-dateutil==2.2 pytz==2014.3 pyyaml==3.10 couchdb==1.0 flask-cors==2.0.1 requests==2.4.3 pyOpenSSL==16.2.0 pysha3==1.0b1 grpcio==1.0.4
pip install requests==2.6.0
# 4 - upgrade ...
apt-get upgrade nodejs
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.4/install.sh | bash
export NVM_DIR="/root/.nvm"
nvm install v6.9.5
node -v
apt-get install npm
npm -v
echo "" >> /usr/local/lib/node_modules/npm/.npmrc
echo "registry = https://registry.npm.taobao.org" >> /usr/local/lib/node_modules/npm/.npmrc
echo "" >> /usr/local/lib/node_modules/npm/.npmrc
NODE_HOME=/root/.nvm/versions/node/v6.9.5/bin
GO_CONFIG_DIR=/root
echo "" >> ${GO_CONFIG_DIR}/.bashrc
echo "export NODE_HOME=${NODE_HOME}" >> ${GO_CONFIG_DIR}/.bashrc
echo "export PATH=${PATH}:${NODE_HOME}/bin " >> ${GO_CONFIG_DIR}/.bashrc
echo "export NODE_PATH=${NODE_HOME}/lib/node_modules" >> ${GO_CONFIG_DIR}/.bashrc
echo "" >> ${GO_CONFIG_DIR}/.bashrc
source ${GO_CONFIG_DIR}/.bashrc
# 5 -
# end.
正如前文所述,chaincode install的坑我们过了;
但是坏消息继续:
就是实例化 chaincode 的时候失败了;
具体原因我没找到,看错误信息,也就是 pull image失败,该load的images我不是都load起来了么?
反正就是卡在这一直不过;
看了其他大拿的文章,发觉我还是少做了一步:
145 cd /opt/gopath/src/http://github.com/hyperledger/fabric/
146 ls
147 mv common/configtx/tool/configtx.yaml ./common/configtx/tool/configtx.yaml_old
148 cp ./examples/e2e_cli/configtx.yaml ./common/configtx/tool/
149 ls ./common/configtx/tool/
做了这一步,然后:
root@ubuntu-1404:/opt/gopath/src/http://github.com/hyperledger/fabric/examples/e2e_cli# ./network_setup.sh up phf-channel-1
fuck,居然成功了(算是蒙的?):
... ...
CORE_NEXT=true
Attempting to Query PEER3 ...3 secs
至此,./network_setup.sh up phf-channel-1 算是成功!
下一步:
按照某大拿的文章,测试:使用CouchDB
(END)
文章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表区块链兄弟赞同其观点或证实其描述。
猜猜你喜欢
点击“阅读原文”参与区块链问题讨论
以上是关于关于hyperledger,那些年我蹚过的那些坑……的主要内容,如果未能解决你的问题,请参考以下文章