在进行镜像安装前,提供了一个sample脚本的下载,可以使用该脚本进行容器的启停。这里对该脚本进行分析。

fabric/release/linux-amd64/network_setup.sh

脚本提供了四个参数项目,

UP_DOWN="$1"
CH_NAME="$2"
CLI_TIMEOUT="$3"
IF_COUCHDB="$4" : ${CLI_TIMEOUT:=""}

第一个:up down restart参数:可以进行容器的启停,这里主要关注up,也就是了解容器是如何拉起的。

第二个:字符串参数:通道名称,这里与fabric多通道有关

第三个:数值:管理工具超时时间(单位不明)

第四个:couchdb或'':  是否使用COUCHDB(CouchDB 是一个开源的面向文档的数据库管理系统)

执行up后,首先调用networkUp函数。之后转到generateArtifacts.sh脚本

function networkUp () {
#Generate all the artifacts that includes org certs, orderer genesis block,
# channel configuration transaction
source generateArtifacts.sh $CH_NAME
解析generateArtifacts.sh执行过程
注:这块涉及到了证书相关的内容
ca证书
Membership Service Providers (MSP) https://fabric-rtd.readthedocs.io/en/latest/msp.html
x. certificates and public key infrastructure https://en.wikipedia.org/wiki/Public_key_infrastructure
后续再进行研究
  function generateCerts ()
首先使用cryptogen工具生成密钥,密钥的生成模版为crypto-config.yam文件
$CRYPTOGEN generate --config=./crypto-config.yaml
等同与
cd/opt/fabric/release/linux-amd64/
bin/cryptogen generate --config=./crypto-config.yaml
crypto-config.yaml文件内容,根据这个定义结构,生成下面的密钥认证目录和文件
OrdererOrgs:
- Name: Orderer
Domain: example.com
Specs:
- Hostname: orderer
PeerOrgs:
- Name: Org1
Domain: org1.example.com
Template:
Count:
Users:
Count:
- Name: Org2
Domain: org2.example.com
Template:
Count:
Users:
Count:

可以执行该命令,生成生成的目录结构,如果反复执行,一些目录下会多次生成密钥

密钥的存储地址为:/opt/fabric/release/linux-amd64/crypto-config

使用tree crypto-config查看目录下的文件结构
crypto-config
├── ordererOrganizations
│   └── example.com
│   ├── ca
│   │   ├── 0f63cc42f0f1fcf00a89ddd3b5da0936503c46802a07dbe45ff12882e78edf32_sk
│   │   └── ca.example.com-cert.pem
│   ├── msp
│   │   ├── admincerts
│   │   │   └── Admin@example.com-cert.pem
│   │   ├── cacerts
│   │   │   └── ca.example.com-cert.pem
│   │   ├── keystore
│   │   └── signcerts
│   │   └── ca.example.com-cert.pem
│   ├── orderers
│   │   └── orderer.example.com
│   │   ├── msp
│   │   │   ├── admincerts
│   │   │   │   └── Admin@example.com-cert.pem
│   │   │   ├── cacerts
│   │   │   │   └── ca.example.com-cert.pem
│   │   │   ├── keystore
│   │   │   │   └── 8b24878c3b0d92bfbb58db333d0ff3cb15b7d4b27401e3f40a8efa6bd2d4df05_sk
│   │   │   └── signcerts
│   │   │   └── orderer.example.com-cert.pem
│   │   └── tls
│   │   ├── ca.crt
│   │   ├── server.crt
│   │   └── server.key
│   └── users
│   └── Admin@example.com
│   ├── msp
│   │   ├── admincerts
│   │   │   └── ca.example.com-cert.pem
│   │   ├── cacerts
│   │   │   └── ca.example.com-cert.pem
│   │   ├── keystore
│   │   │   └── f11e42721d96e1dd5408f33a81dd74759a9d1ca294cc1dade6b8bf7b48dc1c9a_sk
│   │   └── signcerts
│   │   └── Admin@example.com-cert.pem
│   └── tls
│   ├── ca.crt
│   ├── server.crt
│   └── server.key
└── peerOrganizations
├── org1.example.com
│   ├── ca
│   │   ├── 94cbaa1ffab32105d323007ffe831bbc14be58d31b1e8e534fc48c8dfa405ef1_sk
│   │   └── ca.org1.example.com-cert.pem
│   ├── msp
│   │   ├── admincerts
│   │   │   └── Admin@org1.example.com-cert.pem
│   │   ├── cacerts
│   │   │   └── ca.org1.example.com-cert.pem
│   │   ├── keystore
│   │   └── signcerts
│   │   └── ca.org1.example.com-cert.pem
│   ├── peers
│   │   ├── peer0.org1.example.com
│   │   │   ├── msp
│   │   │   │   ├── admincerts
│   │   │   │   │   └── Admin@org1.example.com-cert.pem
│   │   │   │   ├── cacerts
│   │   │   │   │   └── ca.org1.example.com-cert.pem
│   │   │   │   ├── keystore
│   │   │   │   │   └── e300201ec6785972a88f89d6586ed913d46d228d6cb2fe0a7043a46a61dd4402_sk
│   │   │   │   └── signcerts
│   │   │   │   └── peer0.org1.example.com-cert.pem
│   │   │   └── tls
│   │   │   ├── ca.crt
│   │   │   ├── server.crt
│   │   │   └── server.key
│   │   └── peer1.org1.example.com
│   │   ├── msp
│   │   │   ├── admincerts
│   │   │   │   └── Admin@org1.example.com-cert.pem
│   │   │   ├── cacerts
│   │   │   │   └── ca.org1.example.com-cert.pem
│   │   │   ├── keystore
│   │   │   │   └── e38cc67f6a49fd60aa44acc8fd328f00778b3df4868b2bfb8e254141d75e9a73_sk
│   │   │   └── signcerts
│   │   │   └── peer1.org1.example.com-cert.pem
│   │   └── tls
│   │   ├── ca.crt
│   │   ├── server.crt
│   │   └── server.key
│   └── users
│   ├── Admin@org1.example.com
│   │   ├── msp
│   │   │   ├── admincerts
│   │   │   │   └── ca.org1.example.com-cert.pem
│   │   │   ├── cacerts
│   │   │   │   └── ca.org1.example.com-cert.pem
│   │   │   ├── keystore
│   │   │   │   └── 10c59c2596366e4a6e1046120a10a7977c019458786ac86b3f99d64474c97529_sk
│   │   │   └── signcerts
│   │   │   └── Admin@org1.example.com-cert.pem
│   │   └── tls
│   │   ├── ca.crt
│   │   ├── server.crt
│   │   └── server.key
│   └── User1@org1.example.com
│   ├── msp
│   │   ├── admincerts
│   │   │   └── ca.org1.example.com-cert.pem
│   │   ├── cacerts
│   │   │   └── ca.org1.example.com-cert.pem
│   │   ├── keystore
│   │   │   └── 78730dac6a0358428e3556275567883bc1c7e818875a9925f4e7c1517053f438_sk
│   │   └── signcerts
│   │   └── User1@org1.example.com-cert.pem
│   └── tls
│   ├── ca.crt
│   ├── server.crt
│   └── server.key
└── org2.example.com
├── ca
│   ├── 683f20c00dd655b5ed6073098c62acbd1efa660d9f5f585258a3a4e61739ef9c_sk
│   └── ca.org2.example.com-cert.pem
├── msp
│   ├── admincerts
│   │   └── Admin@org2.example.com-cert.pem
│   ├── cacerts
│   │   └── ca.org2.example.com-cert.pem
│   ├── keystore
│   └── signcerts
│   └── ca.org2.example.com-cert.pem
├── peers
│   ├── peer0.org2.example.com
│   │   ├── msp
│   │   │   ├── admincerts
│   │   │   │   └── Admin@org2.example.com-cert.pem
│   │   │   ├── cacerts
│   │   │   │   └── ca.org2.example.com-cert.pem
│   │   │   ├── keystore
│   │   │   │   └── 000e0b35ff61c8e2c07f516346daf11aeabe5d0f5b6914c179ff11ad7c4f678e_sk
│   │   │   └── signcerts
│   │   │   └── peer0.org2.example.com-cert.pem
│   │   └── tls
│   │   ├── ca.crt
│   │   ├── server.crt
│   │   └── server.key
│   └── peer1.org2.example.com
│   ├── msp
│   │   ├── admincerts
│   │   │   └── Admin@org2.example.com-cert.pem
│   │   ├── cacerts
│   │   │   └── ca.org2.example.com-cert.pem
│   │   ├── keystore
│   │   │   └── 55d455f9d1bf47f0320484b322791f43e94d8e7e5e8ed8383f7daf1adeb2c2d2_sk
│   │   └── signcerts
│   │   └── peer1.org2.example.com-cert.pem
│   └── tls
│   ├── ca.crt
│   ├── server.crt
│   └── server.key
└── users
├── Admin@org2.example.com
│   ├── msp
│   │   ├── admincerts
│   │   │   └── ca.org2.example.com-cert.pem
│   │   ├── cacerts
│   │   │   └── ca.org2.example.com-cert.pem
│   │   ├── keystore
│   │   │   └── 20b446c7b6bf5006fccb1fc11168c56e48e937e2775bd46eec627fe7d37d5101_sk
│   │   └── signcerts
│   │   └── Admin@org2.example.com-cert.pem
│   └── tls
│   ├── ca.crt
│   ├── server.crt
│   └── server.key
└── User1@org2.example.com
├── msp
│   ├── admincerts
│   │   └── ca.org2.example.com-cert.pem
│   ├── cacerts
│   │   └── ca.org2.example.com-cert.pem
│   ├── keystore
│   │   └── b72634c677b36bb05718416db8dbdb5dc118ee54a3db8a2b7a6415df87c92e8b_sk
│   └── signcerts
│   └── User1@org2.example.com-cert.pem
└── tls
├── ca.crt
├── server.crt
└── server.key

function replacePrivateKey ()

复制一个docker-compose-e2e.yaml,然后将CA的密码替换进去

 cp docker-compose-e2e-template.yaml docker-compose-e2e.yaml

       generateChannelArtifacts()

      执行configtxgen生成创世块

export FABRIC_CFG_PATH=$PWD
./bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

这里需要设置FABRIC_CFG_PATH,因为configtxgen是根据configtx.yaml这个文件取的内容,默认的名称是写在代码中,可以通过参数进行修改。

会生成多个块,都放在channel-artifacts文件夹下面。默认的通道名是:CHANNEL_NAME:="mychannel"

    $CONFIGTXGEN -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
$CONFIGTXGEN -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
$CONFIGTXGEN -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

generateArtifacts.sh文件执行完毕

继续network_setup.sh的内容。

需要选择是否使用COUCHDB,CouchDB 是一个开源的面向文档的数据库管理系统

之后使用docker-compose -f   docker-compose-cli.yaml 开始启动容器了。这里很奇怪没有使用新生成的docker-compose-e2e.yaml。这个后续要研究一下。

function networkUp () {
#Generate all the artifacts that includes org certs, orderer genesis block,
# channel configuration transaction
source generateArtifacts.sh $CH_NAME if [ "${IF_COUCHDB}" == "couchdb" ]; then
CHANNEL_NAME=$CH_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH up -d 2>&1
else
CHANNEL_NAME=$CH_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE up -d 2>&1
fi
if [ $? -ne ]; then
echo "ERROR !!!! Unable to pull the images "
exit
fi
docker logs -f cli
}

至此启动过程结束。

fabric-network_setup.sh安装脚本分析的更多相关文章

  1. iredmail安装脚本分析(一)---iRedmail.sh

    iredmail是一套以postfix为核心的整合邮件系统的安装脚本,可以达到快速部署邮件服务器的目的.为了让自己不遗忘shell的语法,所以闲来无事,学习一下他的代码. 我从官网下载他的最新版,解压 ...

  2. iredmail安装脚本分析(三)---conf/global DISTRO值的来源及操作系统的判断

    作者在引入conf/global 文件时,就已经对操作系统的类型进行判断,同时也对DISTRO进行了赋值. 部分代码,如图: 显然文件里的KERNEL_NAME的值就是判断完成的操作系统,具体分析该值 ...

  3. 带你走进脚本世界,ijkplayer之【init-ios.sh】脚本分析

    前言 集成ijkplayer,需要执行脚本init-ios.sh,那么init-ios.sh脚本干嘛用的了,花了半天时间,学习了下shell脚本,感觉脚本语言学起来还是比较容易上手的,现在仅仅能看懂了 ...

  4. iredmail安装脚本分析(二)---get_all.sh 文件所在目录为PKGS

    经过上面的一系列分析后,进入到获取安装包的步骤,作者在此处单独写了一个脚本,get_all.sh,我们继续分析这个脚本 _ROOTDIR="$(pwd)" CONF_DIR=&qu ...

  5. fabric镜像安装脚本分析

    #!/bin/bash # # Copyright IBM Corp. All Rights Reserved. # # SPDX-License-Identifier: Apache-2.0 # e ...

  6. Hadoop的shell脚本分析

    你会发现hadoop-daemon.sh用于启动单独的本机节点 而hadoop-daemons.sh 会批量的ssh到别的机器启动 前记: 这些天一直学习hadoop,学习中也遇到了许多的问题,主要是 ...

  7. Hyperledger Fabric(v1.2.0)代码分析1——channel创建

    Hyperledger Fabric(v1.2.0)代码分析1--channel创建 0. e2e_cli Hyperledger Fabric提供了一个e2e的例子,该例中创建了一个基础的区块链网络 ...

  8. 使用shell脚本分析Nagios的status.dat文件

    前言 Nagios的安装和配置以及批量添加监控服务器在我前面的文章中已经讲的很详细了. 我们知道,Nagios的网页控制页面(一般为http://nagio.domain.com/nagios)里可以 ...

  9. Ubuntu下Hyperledger Fabric v0.6安装部署

    系统环境:虚拟机VMware Workstation中的Ubuntu 16.04LTS 1.环境准备 1.1安装Docker Docker安装命令: curl –fsSL https://get.do ...

随机推荐

  1. Spring Cloud(Dalston.SR5)--Eureka 常用配置

    配置参数 默认值 说明 服务注册中心配置 Bean类:org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean eu ...

  2. <亲测>阿里云centos7安装redis

    安装redis yum install redis 启动redis systemctl start redis.service 设置redis开机启动 systemctl enable redis.s ...

  3. sysroot和prefix

    --with-sysroot用来指定系统的root.该选项主要用于新系统(比如LFS)构建或交叉编译.比如你的LFS的root在/mnt/lfs,那么configure时指定--with-sysroo ...

  4. Notepad++ 列操作

    在网上找到一篇关于socket编程的文章,想把其中的代码直接拷贝下来运行测试,但是人家网站做的不够人性化,每行的开头都有行号,直接拷贝就要一行行的删除,甚是麻烦,想到linux下的vi编辑器可以完成列 ...

  5. [UE4]场景截图

    要点: 一.鼠标在编辑器关卡中点一下,然后按F9键截图,右下角会出现截图后的文件链接,点击后会自动打开截图文件所在的文件夹.截图的大小正好的关卡视图的大小. 编辑器:F9键截图,只截图关卡视图界面 运 ...

  6. [UE4]虚幻4 spline组件、spline mesh组件的用法

    最近公司项目需要,把这两个东东好好看了下.不得不说,这两个组件还是非常方便的,但是相关的介绍.教程却非常的少.它们概念模糊,用法奇特,我就总结下吧. 首先,先要明白spline component.s ...

  7. 代码整洁之道Clean Code 读后感After Reading

    1.有意义的命名 名副其实,避免误导 做有意义的区分,简单明了2.函数 短小,职责单一 别重复自己3.注释 用代码来阐述 可怕的废话4.格式 垂直格式,垂直距离,空范围 横向格式,水平对齐,缩进5.错 ...

  8. 浅析Linux DeviceTree

    文本将介绍Linux DeviceTree的相关知识,包括DeviceTree源文件.结构.语法.编写规则等. DeviceTree基础 DeviceTree(以下简称DT)用于描述设备信息以及设备于 ...

  9. 浏览器兼容java小程序配置说明

    最近在使用的一个web应用系统是内嵌了java小程序,遇到了各种浏览器兼容性问题,现梳理如下: 1.通过以下链接检测当前电脑是否已经安装有java https://java.com/zh_CN/dow ...

  10. 02-创建String对象

    创建一个String对象实在是太简单了,就是因为简单,所以有很多java程序员做了好几年的开发,也没有注意这些小细节问题 String字符串的本质就是char数据对象, 那么char[0]数组当中的一 ...