Fabric进阶(一)—— 修改组织和通道的名称
组织(Org)和通道(Channel)的名称是fabric网络比较重要的两个配置参数,在fabric提供的示例中都已经设置好了这两个参数,一般组织名为"Org1"和"Org2",通道名为"mychannel"。而在实际应用开发中通常需要自定义组织和通道的名称,这里以最接近实际应用的balance-transfer为例说明如何自定义设置组织和通道名称。
前言
Fabric网络在启动前会通过二进制工具cryptogen和configtxgen生成成员的证书目录、排序创世区块以及通道配置交易,组织和通道名称会在此时被写入配置信息中去。
所以如果想自定义设置这两个参数,需要重新生成这些配置信息,以及修改其他有关的配置文件以及应用程序代码。
balance-transfer是fabric-samples中的一个示例,基于fabric Node SDK实现了一个较为完整的应用程序,这里选择的是v1.0.0版本。
一、获取工具cryptogen和configtxgen
下载cryptogen和configtxgen这两个工具的方法在first-network示例中已经介绍,除了这种从网络直接下载的方法,还可以在fabric项目中手动编译获得。
cd ~/go/src/github/hyperledger/fabric // 进入fabric目录
make cryptogen && make configtxgen // 编译生成工具
工具生成于fabric/build/bin目录下,移动至.../fabric-samples/balance-transfer/artifacts/channel目录下供后续使用。
二、修改cryptogen.yaml和configtx.yaml配置文件
这两个文件存放在bartifacts/channel目录下的,作用是配合上述工具生成网络初始化的配置信息。
改动很简单,将文件中的"Org1"和"Org2"分别替换成想要设置的组织名称即可。
三、生成证书目录,创世区块和通道配置交易
在artifacts/channel目录下执行以下命令生成配置信息。
rm -rf crypto-config genesis.block mychannel.tx //删除原有配置
./cryptogen generate --config=./cryptogen.yaml
./configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./genesis.block
./configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./airtrip-union.tx -channelID newchannel
注:如果需要修改通道名称,只需要在此步的--channelID参数后指定channel名称(默认是mychannel),然后修改balance-transfer目录下的config.json文件,替换channelName参数即可完成通道名称的修改。
完成后会在channel目录下生成新组织名的crypto-config目录,genesis.block以及newchannel.tx
四、修改网络配置文件network-config.json
该文件路径为app/network-config.json,文件中主要设置了网络各节点的ip和port信息,以及所属的组织。
同样,需要把这个文件中所有与组织名称有关的参数进行替换,注意不要遗漏了其中相关证书路径的修改。
五、修改CA服务器配置文件
这个文件的改动过程比较复杂,因为它是在CA节点启动时在内部自动生成的,想要修改只能够先将内容复制到外部进行改动,再映射到内部达到覆盖的效果。
该文件位于CA节点的文件系统中,需要在启动CA节点后进入容器内部:
docker exec -it ca_peerOrg1 // 假设此时还未修改组织名称
cat /etc/hyperledger/fabric-ca-server/fabric-ca-server-config.yaml
打开该文件找到affiliations部分如下:
affiliations:
org1:
- department1
- department2
org2:
- department1
发现这里把组织名称固定了,如果不修改,则会在用户注册时报错。首先需要在宿主机的artifacts目录下新建一个fabric-ca-server-config.yaml文件,然后将节点内部通过cat打印的整个文件内容复制上去,并且将affiliations部分的组织名修改成想要设置的名称。
这样,新的ca配置文件就在容器外部生成了,在下一步骤会将其映射到容器内部,这样可以覆盖自动生成的配置文件,从而达到修改的目的。
六、修改容器配置文件docker-compose.yaml
1.首先将docker-compose.yaml中所有需要修改的组织名称进行批量替换。
2.将CA节点配置的environment部分的CA KEYFILE和TLS KEYFILE值最后的私钥文件名(以_sk结尾)改成crypto-config/peerOrganizations/orgname.example.com/ca目录下的私钥文件名称,其中orgname是设置的新组织名称。
这一步是因为我们重新生成了msp目录crypto-config,所以私钥路径也发生了改变,不重新设置的话CA节点会因为找不到对应文件而启动失败。
3.设置CA服务器配置文件。将上一步重新生成的CA配置文件映射到容器内部,需要在volumes部分添加一行:
- ./fabric-ca-server-config.yaml:/etc/hyperledger/fabric-ca-server/fabric-ca-server-config.yaml
七、修改应用程序代码
1.修改app/helper.js
helper.js最开始的一段全局代码中有如下语句:
for (let key in ORGS) {
if (key.indexOf('org') === 0) {
...
}
}
ORGS对象是从network-config.json中读取的所有组织信息,键分别为"orderer", "org1"和"org2"(未修改前),这一段循环的意思是对orderer除外的其他组织进行操作,但是很显然这里的if语句默认针对的是org1和org2,而我们修改了组织名称之后直接就失效了。
所以应该将if语句改为
if (key != 'orderer') {...}
2.修改启动及测试脚本
最后需要把启动脚本runApp.sh和testApp.sh中和组织名、通道名有关的变量进行修改,改完后分别启动这两个脚本就可以完成新网络的启动及测试,这时候就可以发现组织和通道的名称已经改成了我们自定义设置的内容啦!
脚本一键配置
没想到修改两个小小的参数竟然需要如此多繁琐的步骤,牵扯到这么多的配置文件,属实有点抽象。关于这个问题我写了一个能够一键执行完成以上操作的脚本,地址为https://github.com/zhayujie/fabric-tools。执行如下命令就可以设置整个项目的组织和通道名称:
./set_config.sh <orgName> <channelName>
主要的操作是去自动生成证书等初始配置,以及对需要修改的配置文件进行批量替换。目前这个脚本只适用于单机单组织,稍作修改就可以应用于多机和多组织场景下。
原文链接:https://zhayujie.com/modify-orgname.html
Fabric进阶(一)—— 修改组织和通道的名称的更多相关文章
- Fabric进阶(三)—— 使用SDK动态增加组织
在fabric网络运行过程中动态追加新的组织是相当复杂的,网上的资料也十分匮乏,大多是基于first-network这样的简单示例,而且是使用启动cli容器的方法来增加组织,几乎没有针对实际应用的解决 ...
- Win10系统修改主机名、用户名称和密码、以及C盘中的用户文件夹名
写在前面 近期重新安装了Ubuntu16.04系统,同时也修改了Windows10系统的用户名.密码,还有C盘用户文件夹名称.对于Linux和windows系统来说,修改名称基本都是三部分,主机名.用 ...
- Android系统移植与调试之------->如何修改Android设备存储盘符名称与Android设备的型号
一.修改Android设备存储盘符名称 (注:TBDG1073为我的项目名称) 1.修改device/other/TBDG1073/system.prop 文件 2.修改ro.media.patiti ...
- 修改android的wifi客户端名称的两种方法
修改android的wifi客户端名称的两种方法 手机连接到无线路由时,在dhcp的客户端列表里面是这样的名称"android-89425253e5de3a2",这就是安卓 ...
- 批量修改zencart型号:品牌名称+型号格式
批量修改zencart型号:品牌名称+型号格式 将下面代码保存为zc_change_model.php,上传到网站根目录运行即可,操作前先备份数据库 <?php /*** 批量修改zencart ...
- Fabric进阶(二)—— 在已有组织中增加节点
fabric网络在创建时就已经确定了初始的节点数量,而在实际应用场景中可能会需要在某个组织中动态增加节点.这里以balance-transfer v1.0为例(2 Org,4 Peer),介绍如何在o ...
- 【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 下
我们接着上一节来讲: 在熟悉动态增加组织或修改配置的步骤后,我们就可以使用java的api来完成动态增加组织或修改配置了: 废话不多说,直接上干货: 1,预制条件 org3的证书以及组织3的MSP详情 ...
- Hyperledger Fabric服务器配置及修改Docker容器卷宗存储根目录/位置
Hyperledger Fabric节点服务器对存储空间的消耗还是比较大的,在我实际生产体验的过程中,每一条请求数据大概仅2K左右,但实际占用空间远不止这点,每个节点都会对Block及链进行保存维护, ...
- Liferay 6.2 改造系列之十四:修改组织的表单内容
在/portal-master/portal-impl/src/portal.properties文件中,有如下配置: # # Input a list of sections that will b ...
随机推荐
- Excel中的clean函数
纯属note. 之前经常用excel处理数据的时候,对长文本或网站上拉取的值都会用clean函数清除一些我们肉眼看不到的非打印字符. Excel官方介绍:clean 删除文本中的所有非打印字符. 此次 ...
- 谷歌浏览器报错Unchecked runtime.lastError: The message port closed before a response was received.。
浏览器版本 : 报错原因:扩展程序问题 解决建议:打开chrome://extensions/,逐一关闭排查
- JQuery学习(一)
本文是学习廖老师的Javascript全栈教程后的一些笔记. 使用jQuery: 方法一:下载jQuery库,并在html页面中引入,方式如下: 1 <html> 2 <head&g ...
- 你所不知道的Python | 字符串连接的秘密
字符串连接,就是将2个或以上的字符串合并成一个,看上去连接字符串是一个非常基础的小问题,但是在Python中,我们可以用多种方式实现字符串的连接,稍有不慎就有可能因为选择不当而给程序带来性能损失. 方 ...
- Linux 搭建nginx的PID
pid logs/nginx.pid 安装的时候就是没有,其实在启动 nginx 时自动生成的 里面存放的是 当前 nginx 住进程的 ID 号:所以在配置文件中指定pidpid /usr/loca ...
- JDK 安装及配置环境变量(基于 Linux)
1.先确定虚拟机系统是 32 位还是 64 位 #Linux 指令下输入 getconf LONG_BIT 2.建目录 JDK mkdir JDK 3.通过 rz 导入压缩包 jdk-8u144-li ...
- 请不要浪费你的生命,一文多发推广就用它(OpenWrite)
你我的共同困惑 你是否跟我一样?刚开始尝试写作,自己没有名气,有以下几个困惑: 想要推广自己,想在多个平台发文? 多平台发文之后,想要看各个平台的流量如何? 有了流量,想要引流用户到自己的网站? 网站 ...
- ubuntu16 安装curl
sudo apt-get install openssl sudo apt-get install libssl-dev wget -P /usr/local/software https://cu ...
- 跟哥一起学python(4)- 数据类型之Number
本节我们开始学习python的数据类型. 什么是数据类型呢?前面我们提过,所谓的编程,就是控制一系列的数据去完成我们预设的逻辑或者功能.所以,编程语言首先要定义一系列对“数据”的处理规则.这些处理规则 ...
- 如何 Laravel 中验证 zip 压缩包里的文件?
在 Laravel 程序中上传文件时,请求验证可以很好验证上传的文件.你可以要求上传文件必须为 图片 , 也可以限制文件字节 大小 , 也可以根据 mime types 或者 文件扩展名 过滤文件. ...