在CentOS 7.2下安装Hyperledger fabric 1.0.0 preview版本的solo模式

一. 安装centos和docker 等组件

A. 安装centos x86-64 Minimal(IP:192.168.2.10)

内核版本需要3.10 以上。centos 7 完全支持.

查看内核信息
$ uname -a
Linux localhost.localdomain 3.10.0-514.6.1.el7.x86_64

B. 安装docker, 版本1.12.5(略过)

$ docker -v
Docker version 1.12.5,build 047e51b/1.12.5

C. 安装python-pip(可选)

  • 安装epel扩展
$ yum -y install epel-release
  • 然后安装python-pip
$ yum -y install python-pip
# 更新到最新版本
$ pip install --upgrade pip
  • 确认安装成功和确定版本
$ pip -V

d. 安装docker-compose

docker-compose是docker集群管理工具,可自定义一键启动多个docker container。
官网二进制发布:
https://github.com/docker/compose/releases
安装手册见网站 :
https://docs.docker.com/compose/install/
安装命令如下:

$ curl -L https://github.com/docker/compose/releases/download/1.11.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ docker-compose -v

或者通过 pip 安装

$ pip install -U docker-compose

二. 搭建Fabric 1.0.0 演示环境( solo共识方式,带自定义channel)

杨宝华的项目主页
https://github.com/yeasy/blockchain_guide/blob/master/hyperledger/1.0.md

A.下载所需组件

1. 安装操作系统和docker (略)

2. 安装python pip(略)

3. 安装 docker-compose 最新发布版本

pip install docker-compose

4.获取docker的 image,并更新镜像别名。

注意:这里一定要用tag来更新别名,要和docker-compose.yml 中的匹配
2017年02月16日,杨宝华mail确定:

The latest tag is auto-building by triggered from code change.

While those number tag (e.g.,0.8) is stable and manually set.

所以, 我们使用:
最新的版本的pull命令如下:

以root用户运行以下命令

ARCH=x86_64
BASE_VERSION=1.0.0-preview
PROJECT_VERSION=1.0.0-preview
IMG_VERSION=0.8.4
docker pull yeasy/hyperledger-fabric-base:$IMG_VERSION \
  && docker pull yeasy/hyperledger-fabric-peer:$IMG_VERSION \
  && docker pull yeasy/hyperledger-fabric-orderer:$IMG_VERSION \
  && docker pull yeasy/hyperledger-fabric-ca:$IMG_VERSION \
  && docker pull yeasy/blockchain-explorer:latest \
  && docker tag yeasy/hyperledger-fabric-peer:$IMG_VERSION hyperledger/fabric-peer \
  && docker tag yeasy/hyperledger-fabric-orderer:$IMG_VERSION hyperledger/fabric-orderer \
  && docker tag yeasy/hyperledger-fabric-ca:$IMG_VERSION hyperledger/fabric-ca \
  && docker tag yeasy/hyperledger-fabric-base:$IMG_VERSION hyperledger/fabric-baseimage \
  && docker tag yeasy/hyperledger-fabric-base:$IMG_VERSION hyperledger/fabric-ccenv:$ARCH-$BASE_VERSION \
  && docker tag yeasy/hyperledger-fabric-base:$IMG_VERSION hyperledger/fabric-baSEOs:$ARCH-$BASE_VERSION

5.设置网络

$ docker network create fabric_noops
$ docker network create fabric_pbft

6.启动 Fabric 1.0

a. 下载 Compose 模板文件。
$ cd ~
$ git clone https://github.com/yeasy/docker-compose-files
b. 进入hyperledger 1.0 模板目录
$ cd /root/docker-compose-files/hyperledger/1.0
c. 查看包括若干模板文件,功能如下。

peers.yml: 包含 peer 节点的服务模板。
docker-compose.yml: 启动 1 个 最小化的环境,包括 1 个 peer 节点、1 个 Orderer 节点、1 个 CA 节点。

d. 修改成3个peer的方式。

docker-compose.yml 里面增加如下代码

peer1:
    extends:
      file: peer.yml
      service: peer
    container_name: fabric-peer1
    hostname: peer1
    environment:
      - CORE_PEER_ID=peer1       - CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050     links:
      - ca       - orderer     ports:
      - 8052:7051     depends_on:
      - ca       - orderer 
  peer2:
    extends:
      file: peer.yml
      service: peer
    container_name: fabric-peer2
    hostname: peer2
    environment:
      - CORE_PEER_ID=peer2       - CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050     links:
      - ca       - orderer     ports:
      - 8053:7051     depends_on:
      - ca       - orderer 
e. 部署和启动 Fabric 1.0
$ docker-compose -f docker-compose.yml up -d

7. 查看容器信息

应该有5个启动的容器,分别是
    1. fabric-peer0
    2. fabric-peer1
    3. fabric-peer2
    4. fabric-orderer
    5. fabric-ca
$ docker  ps 
# 或者
$ docker-compose ps

8. 建立一个channel 名字是myc1

进入任何一个peer容器内均可

docker exec -it fabric-peer2 bash

CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer channel create -c myc1

# 确认myc1.block文件产生了。说明channel的创世纪块建立成功
ls *.block

9. 把相应的peer(0,1,2)节点加入myc1

在建立channel 的容器里面,进行下面操作。

CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer0:7051 peer channel join -b myc1.block

CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer1:7051 peer channel join -b myc1.block

CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer2:7051 peer channel join -b myc1.block

10. 部署和实例化chaincode

  • 有几个peer需要运行这个chaincode,那就需要在这几个peer上都peer chaincode install。
  • 但是只需要在任意一个peer上peer chaincode instantiate 一次。
  • 如果在其他peer上再做 instantiate ,就会出现错误。
  • 修改CORE_PEER_ADDRESS参数值即可指定在哪个peer上 install 和 instantiate。
$ docker exec -it fabric-peer0 bash

# 部署一个chaincode
CORE_PEER_ADDRESS=peer2:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=fabric-orderer:7050 peer chaincode install  -C myc1 -n mycc -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02   -c '{}'  -v 1.1.0    

# 实例化一个chaincode
CORE_PEER_ADDRESS=peer2:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=fabric-orderer:7050  peer chaincode instantiate -C myc1 -n mycc -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Args":["init","a","100","b","200"]}'  -v 1.1.0

注意:
* 在docker宿主机器上,使用docker ps 命令可以看到,在第一次指定一个peer(由CORE_PEER_ADDRESS指定),成功install 并且instantiate一个chaincode后,就会产生,并且up起来一个以这个peer和chaincode ,版本号为名字的容器。
* 接下来在其他peer上install这个相同的chaincode的时候,不会产生容器。(这个时候,由于已经有第一个peer进行了这个chaincode的instantiate,再在其他容器上instantiate 就会出错的,错误信息是chaincode已经存在)
* 当指定peer进行业务操作的时候,就会产生,并且up起来一个以这个指定的peer和chaincode ,版本号为名字的容器。

docker ps 
dev-peer0-mycc-1.1.0

7. 查询chaincode

部署完成后,等待几秒,或者查看log。确定部署完成,然后进行查询

CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=fabric-orderer:7050   peer chaincode query  -C myc1 -n mycc  -c '{"Args":["query","a"]}'

#返回结果是:
Query Result: 100
2017-03-15 08:05:17.429 UTC [main] main -> INFO 002 Exiting.....

#或者 

CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=fabric-orderer:7050  peer chaincode invoke  -C myc1  -n mycc -c '{"Args":["invoke","10"]}' peer chaincode invoke -n mycc -c '{"Args":["query","a"]}'

返回结果是:
[chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Invoke result: version:1 response:<status:200 message:"OK" payload:"100" > payload:"\n \... [main] main -> INFO 002 Exiting..... 
  1. 调用chaincode
    模拟转账业务
CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=fabric-orderer:7050 peer chaincode invoke -C myc1 -n mycc -c '{"Args":["invoke","10"]}'

正确的返回内容:

[chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Invoke result: version:1 response:<status:200 message:"OK" > payload:... 
[main] main -> INFO 002 Exiting.....
注意最终结果状态正常 response:<status:200 message:"OK" >

过几秒后再调用查询业务,确认转账成功

CORE_PEER_ADDRESS=peer0:7051 peer chaincode query   -C myc1  -n mycc  -c '{"Args":["query","a"]}'

返回的正确内容,b账号里面多了转账的金额。

  1. 查看日志
    在docker server上执行如下命令:
$ cd ~/docker-compose-files/hyperledger/1.0
$ docker-compose logs -f

三. 搭建Fabric 0.6 演示环境(noops 模式)

A.下载组件

  1. hyperledger Fabric使用的 docker-compose.yml
    Docker Compose 配置文件 yaml 参数简单介绍
    http://debugo.com/docker-compose/
    使用HyperLedger github上的样例

    curl -o docker-compose.yml https://raw.githubusercontent.com/hyperledger/fabric/master/examples/sdk/node/docker-compose.yml
  2. 下载membersrvc和peer 的Docker image

    $ docker pull hyperledger/fabric-membersrvc:latest
    $ docker pull hyperledger/fabric-peer:latest
    
    #查看images 信息
    
    $ docker images

B. build客户端镜像

1. 下载Fabric样例Dockerfile

$ cd ~
$ curl -o Dockerfile https://raw.githubusercontent.com/hyperledger/fabric/master/examples/sdk/node/Dockerfile

2. build image

docker build -t hyperledger/fabric-starter-kit:latest .

3. 检查images是否正确构建

docker images

C. 运行Fabric开发环境

1. 启动Cluster

docker-compose -f docker-compose.yml up -d

2. 进入Docker

部署为开发模式,直接进入peer

docker exec -it peer bash

3. 登陆

官方Image默认打开权限,需要先登陆用户,使用内置用户登陆。

  • CLI
peer network login jim
# 缺省密码 6avZQLwcUe9b
  • REST API
    也可以使用REST API方式:
POST http://127.0.0.1:7050/
registrar
{
    "enrollId": "jim","enrollSecret": "6avZQLwcUe9b" }

Note: 为了使用REST,你需要在docker-compose.yml文件的peer部分中加入端口映射:

$ vim docker-compose.yml

    #增加端口映射在peer部分
    ports:
       - "0.0.0.0:7050:7050"
    #退出 vim

    #建议删除原有的3个container
    $ docker rm -f  peer starter membersrvc 
    #然后重新生成容器
    $ docker-compose -f docker-compose.yml up -d
    # 查看进程
    $ docker-compose ps
    # 如果有错误 , 查看docker 日志
    $ docker-compose logs

4. 部署Chaincode

  • CLI
# 进入 peer容器
    $docker  exec -it peer bash

    #部署一个命名为 mycc的chaincode
    $CORE_PEER_ADDRESS=127.0.0.1:7051
    $peer chaincode deploy -n mycc -c '{"Function": "init","Args": ["roamer","she","5000"]}' -u jim

注意: 在这里 只能用 mycc 作为 chiancode的名字。在0.6.1 preview版本中如果使用 hyperledger-demo-1 这类的名字,会抛出 sending init Failed(handler not found for chaincode roamer-test) 错误!

Note: 部署返回成功仅仅意味着提交的指令已被接收,不代表指令执行完成。如果要查看是否部署成功,需要新开一个终端,在docker 服务器上(不是当前容器),运行查看日志命令,确保没有错误信息。

$ docker logs -f peer 
#或者
$ docker-compse logs -f peer
  • REST API
POST http://192.168.2.10:7050/chaincode

request 参数

{
    "jsonrpc": "2.0","method": "deploy","params": { "type": 1,"chaincodeID": { "name": "mycc" },"ctorMsg": { "function": "init","args": ["roamer","5000"] },"secureContext": "jim" },"id": 1 }

5. 查询

  • CLI
peer chaincode query -u jim  -n mycc -c '{"Function": "query","Args": ["roamer"]}'

返回结果应该是

Query Result: 100
06:41:08.619 [main] main -> INFO 004 Exiting.....
  • REST API
http://192.168.2.10:7050/chaincode

request参数

{
    "jsonrpc": "2.0","method": "query","ctorMsg": { "function": "query","args": ["roamer"] },"id": 5 }

返回结果是:

{
        "jsonrpc": "2.0","result": { "status": "OK","message": "100" },"id": 5 }

6. 转账

  • CLI
peer chaincode invoke -n mycc  -u jim -c  '{"Function": "invoke","Args": ["roamer","she","10"]}'
  • REST API
POST http://192.168.2.10:7050/chaincode
{
        "jsonrpc": "2.0","method": "invoke","ctorMsg": { "function": "invoke","5"] },"id": 3 }

7. 获取某个区块的信息

  • REST API
GET 
http://192.168.2.10:7050/chain/blocks/1
http://192.168.2.10:7050/chain/blocks/2
......

在CentOS 7.2下安装Hyperledger fabric 1.0.0 preview版本的solo模式的更多相关文章

  1. 详解Canvas实用库Fabric.js使用手册

    这篇文章主要介绍了详解Canvas实用库Fabric.js使用手册的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. 使用Fabric SDK iOS访问Twitter用户时间线

    我试图在这个问题上挣扎两天.我正在使用FabricSDK和Rest工具包,试图为Twitter使用不同的RestAPIWeb服务.我可以使用具有authTokenSecret,authToken和其他值的会话对象的TWTRLogInButton成功登录.当我尝试获取用户时间线时,我总是得到失败的响应,作为:{“errors”:[{“code”:215,“message”:“BadAuthentic

  3. ios – 通过Fabric安装的Twitter,登录工作,请求推文的持久性错误

    我没有想法.解决方法当你请求推文时,我想你的代码如下所示,对吗?原来他们的文档不完整,应该是这样的客户端对象需要您的用户信息来完成它的工作.我遇到过同样的问题.

  4. ios – Xcode 6:在Fabric Crashlytics更新后找不到’Answers.h’文件

    我在Objective-C项目的Xcode6.3.2中的故事板中工作.我尝试构建时突然间出现错误:/…来看看我的变化,它只显示我所做的更改–这与Crashlytics无关.还有其他人看到这个吗?有人建议以最有效的方式恢复并重新开始工作吗?

  5. fabric-twitter – Twitter Fabric xcode – 上传分发时出错:归档分发错误:-3

    爱德华.解决方法当我更改目标的包标识符并尝试将其作为与以前相同的应用程序分发时,我收到此错误.我通过将我的应用程序注册为Fabric中的新应用程序解决了这个问题.

  6. ios – Fabric Crashlytics中缺少dSYM文件

    参见英文答案>Crashlytics:“We’remissingadSYMtoprocesscrashes”6从昨天起,我尝试在iOS应用程式中配置TwitterCrashlytics.我有一个问题wdSYMs文件.面料仪表板显示我的消息“我们缺少dSYMs文件”,所以我通过在线管理员上传文件(从此消息重定向),并显示此消息:但是如果我回到仪表板,系统丢失dSYMS文件的消息再次显示.我要做什么?

  7. ios – “Fabric.framework / run”构建阶段实际上做了什么?

    我使用Crashlytics框架在iOSApps中进行崩溃收集.使用框架时,会在运行/Fabric/Fabric.framework/run的目标中添加“构建阶段”.

  8. iOS Safari和/或Microsoft Edge是否支持推送通知?

    从我所做的研究来看,我找不到这个问题的具体答案.桌面版Safari已支持此功能一段时间了,但iOS版本是否也支持从网站推送通知?如果没有,是否有替代解决方案?我也无法在MicrosoftEdge上找到支持此功能的任何内容.我觉得我在某个时间点读过这个,但我现在很难找到任何东西.解决方法MicrosoftEdge目前不支持通知,但目前正在考虑使用用户语音的550票.您可以在status.modern.ie.上找到当前状态

  9. ios – 突然出现很多Fabric Out of Memory会话:Fabric OOM报告是否会出现误报?

    解决方法是的,在某些情况下,由于当前的OOM启发式而错误地检测到OOM.后台获取可能会错误地报告OOM.

  10. 理解UIButton的imageEdgeInsets和titleEdgeInsets

    本篇博客希望用最简单粗暴的方式–实验,来了解一下imageEdgeInsets和titleEdgeInsets到底是怎么玩的。当然这只是一种建议,也许有些人觉得从默认状态计算更加方便,我也赞同,毕竟imageEdgeInsets和titleEdgeInsets只是偏移量,和初始位置在哪并没有什么关系。总结之前也被imageEdgeInsets和titleEdgeInsets困扰过,就用了UIImageView和UILabel的组合来代替,为了不影响开发进度,也只能这样做,毕竟靠这个吃饭,不过在技术层面,这

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部