详细操作步骤
1.下载安装
1.下载:
cd ~/ && git clone https://github.com/FISCO-BCOS/generator.git
2.安装:
cd ~/generator && bash ./scripts/install.sh
3.检查是否安装成功,若成功,输出 usage: generator xxx
./generator -h
4.获取最新节点二进制至meta文件中(一定注意加 --cdn)
./generator --download_fisco ./meta --cdn
5.检查二进制版本。若成功,输出 FISCO-BCOS Version : x.x.x-x
./meta/fisco-bcos -v
整体结构
2.联盟链初始化
1.机构初始化(以教程中下载的generator作为证书颁发机构)
1.初始化机构A和B
cp -r ~/generator ~/generator-A
cp -r ~/generator ~/generator-B
2.初始化链证书
在证书颁发机构上进行操作,一条联盟链拥有唯一的链证书ca.crt
#证书颁发机构下
cd ~/generator
#用 generate_chain_certificate命令生成链证书
./generator --generate_chain_certificate ./dir_chain_ca
#查看链证书及私钥:
ls ./dir_chain_ca
# 输出:从左至右分别为链证书、链私钥
ca.crt ca.key
3.机构A、B构建群组1
1.初始化机构A/B(生成+获取证书)
# 在证书颁发机构下 使用--generate_agency_certificate
cd ~/generator
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyA
# 查看机构证书及私钥
ls dir_agency_ca/agencyA/
# 输出:机构证书、机构私钥、链证书
agency.crt agency.key ca.crt
# 发送链证书、机构证书、机构私钥至机构A的meta目录(这里用拷贝
cp ./dir_agency_ca/agencyA/* ~/generator-A/meta/
机构B同A获取证书操作一样。
2.机构修改配置文件
node_deployment.ini为节点配置文件,企业级部署工具会根据该文件下的配置生成相关节点证书,及生成节点配置文件夹等。
机构A
cd ~/generator-A
cat > ./conf/node_deployment.ini << EOF
[group]
group_id=1
[node0]
; host ip for the communication among peers.
; Please use your ssh login ip.
p2p_ip=127.0.0.1
; listen ip for the communication between sdk clients.
; This ip is the same as p2p_ip for physical host.
; But for virtual host e.g. vps servers, it is usually different from p2p_ip.
; You can check accessible addresses of your network card.
; Please see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
; for more instructions.
rpc_ip=127.0.0.1
p2p_listen_port=30300
channel_listen_port=20200
jsonrpc_listen_port=8545
[node1]
p2p_ip=127.0.0.1
rpc_ip=127.0.0.1
p2p_listen_port=30301
channel_listen_port=20201
jsonrpc_listen_port=8546
EOF
机构B
cd ~/generator-B
cat > ./conf/node_deployment.ini << EOF
[group]
group_id=1
[node0]
; host ip for the communication among peers.
; Please use your ssh login ip.
p2p_ip=127.0.0.1
; listen ip for the communication between sdk clients.
; This ip is the same as p2p_ip for physical host.
; But for virtual host e.g. vps servers, it is usually different from p2p_ip.
; You can check accessible addresses of your network card.
; Please see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
; for more instructions.
rpc_ip=127.0.0.1
p2p_listen_port=30302
channel_listen_port=20202
jsonrpc_listen_port=8547
[node1]
p2p_ip=127.0.0.1
rpc_ip=127.0.0.1
p2p_listen_port=30303
channel_listen_port=20203
jsonrpc_listen_port=8548
EOF
3.机构A生成并发送节点信息
机构A生成节点证书及P2P连接信息文件,此步需要用到上述配置的node_deployment.ini,及机构meta文件夹下的机构证书与私钥,机构A生成节点证书及P2P连接信息文件
cd ~/generator-A
./generator --generate_all_certificates ./agencyA_node_info
# 查看
ls ./agencyA_node_info
# 输出
# 需要交互给机构A的节点证书,节点P2P连接地址文件(根据node_deployment.ini生成的本机构节点信息)
cert_127.0.0.1_30300.crt cert_127.0.0.1_30301.crt peers.txt
4.机构B生成并发送节点信息
cd ~/generator-B
# 机构B生成节点证书及P2P连接信息文件
./generator --generate_all_certificates ./agencyB_node_info
生成创世区块的机构需要节点证书,示例中由A机构生成创世区块,因此B机构除了发送节点P2P连接地址文件外,还需发送节点证书至机构A
# 发送证书+节点P2P连接地址文件
cp ./agencyB_node_info/cert*.crt ~/generator-A/meta/
cp ./agencyB_node_info/peers.txt ~/generator-A/meta/peersB.txt
5.机构A生成群组1创世区块
cd ~/generator-A
# 机构A修改conf文件夹下的group_genesis.ini
cat > ./conf/group_genesis.ini << EOF
;命令解释
[group]
;群组id
group_id=1
[nodes]
;机构A节点p2p地址
node0=127.0.0.1:30300
;机构A节点p2p地址
node1=127.0.0.1:30301
;机构B节点p2p地址
node2=127.0.0.1:30302
;机构B节点p2p地址
node3=127.0.0.1:30303
EOF
此步会根据机构A的meta文件夹下配置的节点证书,生成group_genesis.ini配置的群组创世区块,教程中需要机构A的meta下有名为cert_127.0.0.1_30300.crt,cert_127.0.0.1_30301.crt,cert_127.0.0.1_30302.crt,cert_127.0.0.1_30303.crt的节点证书,此步需要用到机构B的节点证书。
./generator --create_group_genesis ./group
# 分发群组1创世区块至机构B
cp ./group/group.1.genesis ~/generator-B/meta
6.机构A生成所属节点
注意,此步指定的节点P2P连接信息peers.txt为群组内其他节点的链接信息,多个机构组网的情况下需要将其合并。
cd ~/generator-A
./generator --build_install_package ./meta/peersB.txt ./nodeA
# 查看生成节点配置文件夹
ls ./nodeA
# 输出
# 生成的文件夹nodeA信息如下所示,
├── monitor # monitor脚本
├── node_127.0.0.1_30300 # 127.0.0.1服务器 端口号30300的节点配置文件夹
├── node_127.0.0.1_30301
├── scripts # 节点的相关工具脚本
├── start_all.sh # 节点批量启动脚本
└── stop_all.sh # 节点批量停止脚本
启动机构A的节点
bash ./nodeA/start_all.sh
查看节点进程
ps -ef | grep fisco
# 输出
# 可以看到如下进程
fisco 15347 1 0 17:22 pts/2 00:00:00 ~/generator-A/nodeA/node_127.0.0.1_30300/fisco-bcos -c config.ini
fisco 15402 1 0 17:22 pts/2 00:00:00 ~/generator-A/nodeA/node_127.0.0.1_30301/fisco-bcos -c config.ini
7.机构B生成所属节点
生成机构B所属节点,此命令会根据用户配置的node_deployment.ini文件生成相应的节点配置文件夹
cd ~/generator-B
./generator --build_install_package ./meta/peersA.txt ./nodeB
# 启动机构B节点
bash ./nodeB/start_all.sh
8.查看群组1节点运行状态
查看进程
ps -ef | grep fisco
# 输出
# 可以看到如下所示的进程
fisco 15347 1 0 17:22 pts/2 00:00:00 ~/generator-A/nodeA/node_127.0.0.1_30300/fisco-bcos -c config.ini
fisco 15402 1 0 17:22 pts/2 00:00:00 ~/generator-A/nodeA/node_127.0.0.1_30301/fisco-bcos -c config.ini
fisco 15457 1 0 17:22 pts/2 00:00:00 ~/generator-B/nodeB/node_127.0.0.1_30302/fisco-bcos -c config.ini
fisco 15498 1 0 17:22 pts/2 00:00:00 ~/generator-B/nodeB/node_127.0.0.1_30303/fisco-bcos -c config.ini
查看节点log
tail -f ./node*/node*/log/log* | grep +++
# 输出
# log中打印的+++即为节点正常共识
info|2019-02-25 17:25:56.028692| [g:1][p:264][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,myIdx=0,hash=833bd983...
info|2019-02-25 17:25:59.058625| [g:1][p:264][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,myIdx=0,hash=343b1141...
info|2019-02-25 17:25:57.038284| [g:1][p:264][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,myIdx=1,hash=ea85c27b...
注: tail -f node2/log/log* | grep P2P 查看节点2与其他节点的连接情况。
tail -f nodeA/node/log/log* |grep connected