安装fabric运行环境的时候Vagrant up遇到的问题,解决路径

解决方法来自: https://my.oschina.net/wtsoftware/blog/789164

搭建方法主要参考http://hyperledger-fabric.readthedocs.io/en/latest/dev-setup/devenv/的英文文档说明,和另一篇windows下的文章(http://8btc.com/article-3815-1.html)在mac pro下进行了尝试过程是出现了许多问题,我进行了一些调整和 细化的解释。目前在mac下安装是没有问题的  过程如下:

准备工作:

 
  
 
   
  1. Git clienthttps://git-scm.com/downloads
  2. Go - 1.6 or laterhttps://golang.org/)
  3. Vagrant - 1.8.6 or laterhttps://www.vagrantup.com/)
  4. VirtualBox - 5.0 or laterhttps://www.virtualbox.org/)

 

这些都必须要用到,git主要用于同步源码,go主要是搭建go语言的编译环境,因为源码是go语言编写的。点击文档说明的链接下载,安装方法和环境变量的设置可以百度,一大堆的参考资料,基本都比较靠谱。后两个就更简单,下载下来安装就行了。另外,由于后面要用到ssh命令,我下载了一个Cygwin64 Terminal,安装选择包的时候搜索openssh,然后选择这个包,安装之后,也需要配置环境变量,具体自己百度。

 

 

搭建步骤:

 

第一步:

 

首先确保你之前安装go语言的编译环境搭建好了。

然后在git命令行中输入 :

 
   
  1. git config --get core.autocrlfgit
  2. config --global core.autocrlf false

 

 

 

第二步:

 

把github中的fabric源码拉下来

 
   
  1. cd $GOPATH/src
  2. mkdir -p github.com/hyperledger
  3. cd github.com/hyperledger
  4. git clone https://github.com/hyperledger/fabric.git

$GOPATH这个目录在windows下可以随便定,建议后面的按他说的来。源文档的git clone命令可能是针对有Linux id的来的,可以不用他的命令。

 

第三步:

用Vagrant来配置虚拟机

 
   
  1. cd $GOPATH/src/github.com/hyperledger/fabric/devenv
  2. 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目录

 
   
  1. localhost:golang.org pro$ cd x/
  2. localhost:x pro$ ls
  3. 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

 
   
  1. cd $GOPATH/src/github.com/hyperledger/fabric/devenv
  2. vagrant ssh

 

这个时候如果没装之前的ssh,就会报错。 

以上登录成功以后会显示:@hyperledger-devenv  这样 就表示虚拟环境安装成功了。如果只是出现的unbunt的登录,那表示安装过程中有错误,虽然能登录进来会有很多东西缺失导致编译失败。

 

回到 要目录下我们查看,会有一个hyperledger的目录这个目录是映射我们的宿主主机的,当前我们在自己的电脑上更新了源代码,这里也会自动更新的,方便我们开发。

安全验证(可选):

To set up the local development environment with security enabled, you must first build and run theCertificate Authority (CA) server:

这个是可选项,主要用作member的身份认证,具体作用体现在后面的命令加不加username上。

 

 

 
   
  1. make membersrvc && membersrvc

 

 

运行验证peer

开另外一个命令行窗口,运行

 
   
  1. cd $GOPATH/src/github.com/hyperledger/fabric/devenv
  2. vagrant ssh

 

然后,要注意的是,以下操作都是在上面的vagrant ssh登录以后才进行的操作。不是在当前的宿主机系统源码上进行的操作。

 
   
  1. cd $GOPATH/src/github.com/hyperledger/fabric
  2. make peer
  3. peer node start --peer-chaincodedev

make peer过程会比较久我这里大概用了将近一小时左右,要安装下载一堆东西

下载完成以后会出现下面安装的的界面。

 

上面完成后执行:peer node start --peer-chaincodedev 这样,peer节点就起来了。

 

 

编译chaincode

 

另开一个命令行窗口,运行:

 
   
  1. cd $GOPATH/src/github.com/hyperledger/fabric/devenv
  2. vagrant ssh

 

然后选择源码中的一个例子chaincode机型编译


 

 
   
  1. cd$GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
  2. go build

注册和运行chaincode

 

 
   
  1. 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打开一个终端再 登录。

 
   
  1. cd $GOPATH/src/github.com/hyperledger/fabric/peer
  2. peer network login

 

username要从membersrvc.yaml里边选,比如alice试了几次别的用户都不成功,然后会要求输入密码,把后面的密码输入就行了。然后注册会成功。

membersrvc.yaml文件用户列表:

 

peer窗口可以看到注册信息:

 

Chaincode的部署交易:

 

 
   
  1. peer chaincode deploy -n mycc -c '{"Function":"init", "Args": ["a","100", "b", "200"]}'

如果使用了安全模式:

 
   
  1. CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode deploy -u jim -n mycc -c '{"Function":"init", "Args": ["a","100", "b", "200"]}'

 

Chaincode的调用交易:

 

 
   
  1. peer chaincode invoke -l golang -n mycc -c '{"Function": "invoke", "Args": ["a", "b", "10"]}'

如果使用了安全模式:

 
   
  1. 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的查询交易:

 

 
   
  1. peer chaincode query -l golang -n mycc -c '{"Function": "query", "Args": ["b"]}'

安全模式:

 
   
  1. 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去下载 了。

 

 

来源: https://my.oschina.net/wtsoftware/blog/789164

你可能感兴趣的:(区块链)