00 导言
在上一讲中,我们手把手带着大家一步一步《在Ubuntu 18.04上搭建HyperLedger Fabric 1.2.0 环境》,其中有两个步骤是:下载bootstrap.sh引导脚本和执行该引导脚本。很多朋友执行这两个步骤时可能会有疑问:为什么要下载这个脚本?执行这个脚本的作用是什么?
别急,接下来我们会深入分析一下这个文件的源码,探个究竟。不过在分析之前,我们先来回顾一下上一讲是怎么下载和执行这个脚本的。
02 如何下载和执行bootstrap.sh脚本
我们先来看看官方是怎么说的。官方提供的命令如下:
$ curl -sSL http://bit.ly/2ysbOFE | bash -s 1.2.0 1.2.0 0.4.10
我们来解释一下这条命令:curl -sSL http://bit.ly/2ysbOFE,这条命令是通过请求短链接http://bit.ly/2ysbOFE,该短链接会重定向到真正的目标地址,目标地址会响应我们要的内容,响应的内容就是bootstrap.sh文件里的内容。很不幸的是,上面的短链接已经失效,不过我们已经找到了一个有效的长链接:https://raw.githubusercontent.com/hyperledger/fabric/release-1.2/scripts/bootstrap.sh,用它替换掉短链接就可以了。于是我们得到了下面的命令:
$ curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/release-1.2/scripts/bootstrap.sh | bash -s 1.2.0 1.2.0 0.4.10
这里要解释一下-sSL的作用,小s指的是沉默模式,表示不输出请求过程的任何信息,只输出最终响应的内容,大S指的是如果有错显示出来,L指的是短链接要进行重定向。
接下来是一根竖线 |,学过linux的朋友应该都知道,这根竖线表示管道,意思是上一个命令输出的内容,交给下一个命令去执行,这里表示交给bash去执行。
bash 后面是-s ,-s后面的所有内容将做为参数传给bootstrap.sh。1.2.0 1.2.0 0.4.10这3个对应的是 Fabric, Fabric-ca 和 thirdparty(couchdb, kafka and zookeeper) 这三个模块的版本。如果我们想要安装更早的版本,我们可以修改它们,脚本程序会知道下载对应的版本。
上面实际上是两条命令通过管道( | )连接在一起执行,实际上我们也可以将它们分开:
$ curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/release-1.2/scripts/bootstrap.sh -o bootstrap.sh
$ chmod 755 bootstrap.sh
$ sudo ./bootstrap.sh 1.2.0 1.2.0 0.4.10
03 bootstrap.sh到底帮我们做了什么?
bootstrap.sh实际上帮我们作了如下几件事情:
1. 从github上克隆 hyperledger/fabric-samples并进入该目录,然后检出适当的版本
2. 在fabric-samples目录下安装特定平台的 Hyperledger Fabric 二进制可执行文件 和配置文件
3.下载 指定版本的Hyperledger Fabric 的docker镜像
整个脚本帮我们做了上面这三件事情,bootstrap.sh中对应的代码如下:
218 if [ "$SAMPLES" == "true" ]; then
219 echo
220 echo "Installing hyperledger/fabric-samples repo"
221 echo
222 samplesInstall
223 fi
224 if [ "$BINARIES" == "true" ]; then
225 echo
226 echo "Installing Hyperledger Fabric binaries"
227 echo
228 binariesInstall
229 fi
230 if [ "$DOCKER" == "true" ]; then
231 echo
232 echo "Installing Hyperledger Fabric docker images"
233 echo
234 dockerInstall
235 fi
其中samplesInstall对应的是克隆fabric-samples,binariesInstall对应的是安装二进制文件,dockerInstall对应的是下载docker镜像。
接下来我们分析一下它们对应的代码部分。
04 第一件事:克隆fabric-samples并检出适当的版本
对应bootstrap.sh中的samplesInstall函数,代码如下:
56 samplesInstall</