文章目录
1. byfn测试网络的启动
1.1 准备二进制可执行文件
- 在fabric目录中执行
make native
命令可编译出二进制可执行文件,然后将fabric/build/bin目录拷贝到fabric-samples目录中; - 但是最新的fabric版本在可能会造成后面运行
./byfn generate
报错的问题。因此可考虑直接从github上下载稳定的二进制可执行文件,运行命令wget https://github.com/hyperledger/fabric/releases/download/v2.0.1/hyperledger-fabric-linux-amd64-2.0.1.tar.gz
,解压后同样将bin目录拷贝到fabric-samples目录中。
两种方法均可得到二进制可执行文件,如下图所示:
1.2 构建docker镜像
在fabric目录中执行make docker
命令,可得到所需的相关镜像。
从Fabric2.0开始docker镜像将基于Alpine Linux,这是一种面向安全的轻量级Linux发行版,只占5MB左右的空间,且更加安全可靠。另外Alpine Linux还提供了自己的包管理工具apk,我们在构建docker镜像过程中存在“apk add”的动作,可能会有从“dl-cdn.alpinelinux.org/alpine/v3.10”下载包失败的问题,这是由于在中国大陆无法连接官方的更新源,因此可考虑在所有Dockerfile中修改为使用阿里云的更新源:
FROM alpine:${ALPINE_VER} as base
RUN echo "#aliyun" > /etc/apk/repositories
RUN echo "https://mirrors.aliyun.com/alpine/v3.10/main/" >> /etc/apk/repositories
RUN echo "https://mirrors.aliyun.com/alpine/v3.10/community/" >> /etc/apk/repositories
最终构建成功,将会得到这些镜像:
1.3 启动测试网络
在fabric-samples/first-network目录中,执行./byfn.sh up
命令启动测试网络,默认会生成crypto-config和channel-artifacts目录中的文件。最后控制台输出如下内容,表示运行成功。
2. networkUp 脚本分析
执行“./byfn.sh up”命令调用的就是networkUp,脚本逻辑步骤如下:
- 如果crypto-config目录不存在,networkUp会先执行generateCerts生成证书与密钥,以及generateChannelArtifacts生成创世区块、用户channel配置交易、 anchor peer节点更新交易;
- compose文件包括docker-compose-cli.yaml、docker-compose-etcdraft2.yaml;如果指定了CA,还将包括docker-compose-ca.yaml;如果指定了couchdb,还将包括docker-compose-couch.yaml;使用docker-compose构建和启动容器;
- 下载abstore链码的依赖包;
- 执行容器cli中的script.sh脚本,参数包括:
channel名称(CHANNEL_NAME):mychannel
命令延迟时间(DELAY):3秒
链码语言(CC_SRC_LANGUAGE):go
cli等待其他容器的超时(TIMEOUT):10秒
# Generate the needed certificates, the genesis block and start the network.
function networkUp() {
checkPrereqs
# generate artifacts if they don't exist
if [ ! -d "crypto-config" ]; then
generateCerts
generateChannelArtifacts
fi
COMPOSE_FILES="-f ${COMPOSE_FILE} -f ${COMPOSE_FILE_RAFT2}"
if [ "${CERTIFICATE_AUTHORITIES}" == "true" ]; then
COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_CA}"
export BYFN_CA1_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org1.example.com/ca && ls *_sk)
export BYFN_CA2_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org2.example.com/ca && ls *_sk)
fi
if [ "${IF_COUCHDB}" == "couchdb" ]; then
COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_COUCH}"
fi
IMAGE_TAG=$IMAGETAG docker-compose ${COMPOSE_FILES} up -d 2>&1
docker ps -a
if [ $? -ne 0 ]; then
echo "ERROR !!!! Unable to start network"
exit 1
fi
echo "Sleeping 15s to allow Raft cluster to complete booting"
sleep 15
if [ "${NO_CHAINCODE}" != "true" ]; then
echo Vendoring Go dependencies ...
pushd