2019独角兽企业重金招聘Python工程师标准>>>
搭建方法主要参考http://hyperledger-fabric.readthedocs.io/en/latest/dev-setup/devenv/的英文文档说明,和另一篇windows下的文章(http://8btc.com/article-3815-1.html)在mac pro下进行了尝试过程是出现了许多问题,我进行了一些调整和 细化的解释。目前在mac下安装是没有问题的 过程如下:
准备工作:
Git client(https://git-scm.com/downloads)
Go - 1.6 or later(https://golang.org/)
Vagrant - 1.8.6 or later(https://www.vagrantup.com/)
VirtualBox - 5.0 or later(https://www.virtualbox.org/)
这些都必须要用到,git主要用于同步源码,go主要是搭建go语言的编译环境,因为源码是go语言编写的。点击文档说明的链接下载,安装方法和环境变量的设置可以百度,一大堆的参考资料,基本都比较靠谱。后两个就更简单,下载下来安装就行了。另外,由于后面要用到ssh命令,我下载了一个Cygwin64 Terminal,安装选择包的时候搜索openssh,然后选择这个包,安装之后,也需要配置环境变量,具体自己百度。
搭建步骤:
第一步:
首先确保你之前安装go语言的编译环境搭建好了。
然后在git命令行中输入 :
git config --get core.autocrlfgit
config --global core.autocrlf false
第二步:
把github中的fabric源码拉下来
cd $GOPATH/src
mkdir -p github.com/hyperledger
cd github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git
$GOPATH这个目录在windows下可以随便定,建议后面的按他说的来。源文档的git clone命令可能是针对有Linux id的来的,可以不用他的命令。
第三步:
用Vagrant来配置虚拟机
cd $GOPATH/src/github.com/hyperledger/fabric/devenv
vagrant up
vagrant up第一次时间非常长,有时还断,所以建议FQ,而且要全局加速,亲测速度确实要稳定一些。文档里说运行了这个命令之后就可以喝咖啡去了,要a few minutes,我表示不服。
Vagrant装好之后,大部分的工作就完成了,然后就是部署一些东西。
之后的vagrant up启动都是这个样子:
这一步要单独介绍一下vagrant有许多命令,大概方式 就是它会从vagrant 的box的镜像中去下载最新版本的镜像大概有1G多吧,然后进行安装我们可以通过迅雷手动下载,最新版本。然后通过
vagrant box add hyperledger/fabric-baseimage virtualbox.box
的方式直接添加这个镜像文件。下载地址(https://atlas.hashicorp.com/hyperledger/boxes/fabric-baseimage/versions/0.2.1/providers/virtualbox.box)
可以浏览一下镜像库
当前的最新版本是0.2.1
本地的版本可以通过
vagrant box update的方式进行更新。
然后安装好镜像以后,一般会报一个错误。就是连接不到 google.com上去去更新代码,因为会在当前默认的工程目录下去生成文件。出错情况是这样的:
==> default: package golang.org/x/tools/go/gcimporter15: unrecognized import path "golang.org/x/tools/go/gcimporter15" (https fetch: Get https://golang.org/x/tools/go/gcimporter15?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
golang.org/x/tools/go/这些地址都是连接不上的,因为被墙了。但其实这些代码 都在github有的,我们要手动创建目录然后通过github去下载它。比如这个tools目录。
mkdir golang.org/x这个目录在src目录下
创建一个和github.com平级的golang.rog 目录,然后呢进入x目录
localhost:golang.org pro$ cd x/
localhost:x pro$ ls
localhost:x pro$ git clone https://github.com/golang/tools.git
在x目录下执行git clone 就可以了就生成了一个目录结构了。生成结果如下
其实如果这种方式安装好tools源码后还是不能编译通过的,我找了好久才发现。在hyperledger目录下还有一个自己的工作空间。
是在vagrant up时生成的。我们进入fabric目录看到
这里又需要生成,然后我以为只在自己的第一个工作空间添加上就好了,谁知它还会不断去安装tools源码,原来是这里还需要,只要把我们
刚才在另一个目录下git clone下载好的源码拷贝到这里就行了。
上面那个gotools目录是需要在devenv目录下下执行vagrant up时才会生成 的,只要把这个问题解决了。安装虚拟环境就没有问题了。
部署步骤:
打开ssh:
cd $GOPATH/src/github.com/hyperledger/fabric/devenv
vagrant ssh
这个时候如果没装之前的ssh,就会报错。
以上登录成功以后会显示:@hyperledger-devenv 这样 就表示虚拟环境安装成功了。如果只是出现的unbunt的登录,那表示安装过程中有错误,虽然能登录进来会有很多东西缺失导致编译失败。
回到 要目录下我们查看,会有一个hyperledger的目录这个目录是映射我们的宿主主机的,当前我们在自己的电脑上更新了源代码,这里也会自动更新的,方便我们开发。
安全验证(可选):
To set up the local development environment with security enabled, you must first build and run the Certificate Authority (CA) server:
这个是可选项,主要用作member的身份认证,具体作用体现在后面的命令加不加username上。
make membersrvc && membersrvc
运行验证peer:
开另外一个命令行窗口,运行
cd $GOPATH/src/github.com/hyperledger/fabric/devenv
vagrant ssh
然后,要注意的是,以下操作都是在上面的vagrant ssh登录以后才进行的操作。不是在当前的宿主机系统源码上进行的操作。
cd $GOPATH/src/github.com/hyperledger/fabric
make peer
peer node start --peer-chaincodedev
make peer过程会比较久我这里大概用了将近一小时左右,要安装下载一堆东西
下载完成以后会出现下面安装的的界面。
上面完成后执行:peer node start --peer-chaincodedev 这样,peer节点就起来了。
编译chaincode:
另开一个命令行窗口,运行:
cd $GOPATH/src/github.com/hyperledger/fabric/devenv
vagrant ssh
然后选择源码中的一个例子chaincode机型编译
cd$GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
go build
注册和运行chaincode:
CORE_CHAINCODE_ID_NAME=mycc CORE_PEER_ADDRESS=0.0.0.0:7051 ./chaincode_example02
mycc是chaincode的名称,可以随便定,只要在后面的过程中对应使用就行了。
ready for invocations 这样 就是这步OK了
CLI调试:
我没有用REST方式,用的CLI。
用户注册:
再 通过vagrant ssh打开一个终端再 登录。
cd $GOPATH/src/github.com/hyperledger/fabric/peer
peer network login
username要从membersrvc.yaml里边选,比如alice试了几次别的用户都不成功,然后会要求输入密码,把后面的密码输入就行了。然后注册会成功。
membersrvc.yaml文件用户列表:
peer窗口可以看到注册信息:
Chaincode的部署交易:
peer chaincode deploy -n mycc -c '{"Function":"init", "Args": ["a","100", "b", "200"]}'
如果使用了安全模式:
CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode deploy -u jim -n mycc -c '{"Function":"init", "Args": ["a","100", "b", "200"]}'
Chaincode的调用交易:
peer chaincode invoke -l golang -n mycc -c '{"Function": "invoke", "Args": ["a", "b", "10"]}'
如果使用了安全模式:
CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode invoke -u jim -l golang -n mycc -c '{"Function": "invoke", "Args": ["a", "b", "10"]}'
Chaincode的查询交易:
peer chaincode query -l golang -n mycc -c '{"Function": "query", "Args": ["b"]}'
安全模式:
CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode query -u jim -l golang -n mycc -c '{"Function": "query", "Args": ["b"]}'
peer窗口
chaincode窗口
部署,调用和查询三个交易在这几个窗口中都可以看到。
这个部署总算是完成了,但是上面黑色窗口的部门我没用,我跑了一下他自带的智能合约,
真心感觉 hyperledger太庞大了,不是一般人能玩的。高度模块化 ,而且现在处于开发阶段变化特别大。比如上面有一部门是要,编译和启动用户模块membersrvc。在现在的git分支中没有这个代码 了不知道,为什么。所以就没用,但是在0.6分支还是有这块模块的。
但是在master分支下这块儿的代码没有,也请有分析过的给指导一下。
以上整个安装过程,感觉走了好多弯路。现在回想起来,其实这个过程好像是不需要的。因为 所有的代码 都能在github上找到 ,不需要到 google去下载 了。