关于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


然后出现
坑:


关于hyperledger,那些年我蹚过的那些坑……


尝试改成:


关于hyperledger,那些年我蹚过的那些坑……


出现:


关于hyperledger,那些年我蹚过的那些坑……


哎,最后发现是自己煞笔了呗,本来是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进行验证测试:


关于hyperledger,那些年我蹚过的那些坑……


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


关于hyperledger,那些年我蹚过的那些坑……


docker images的结果为:


docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

hyperledger/fabric-ca         latest            35311d8617b4      12 days ago       240 MB


关于hyperledger,那些年我蹚过的那些坑……


然后:


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


关于hyperledger,那些年我蹚过的那些坑……


关于hyperledger,那些年我蹚过的那些坑……


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的坑我们过了;


但是坏消息继续:


关于hyperledger,那些年我蹚过的那些坑……


就是实例化 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,那些年我蹚过的那些坑……的主要内容,如果未能解决你的问题,请参考以下文章

那些年我用awk时踩过的坑——awk使用注意事项

关于我学XSS躺过的那些坑

那些年我写过的mysql命令

那些年我跳过的坑

那些年我踩过的坑之 rsync daemon详解

关于在使用scrapy-redis分布式踩过的那些坑: