Fabric框架的学习-1-基础知识储备与安装(配套视频学习资源)

一、Shell脚本基础

1.1 概念

一系列的shell命令的集合,还可以加入一些逻辑操作 (if else for)将这些命令放入一个脚本文件中

1.2 基本格式

命名格式:xxx.sh (一般后缀为sh,也可不写)

书写格式:

# test.sh  #是shell脚本的注释
#!/bin/bash  # 指定解析shell脚本使用的命令解释器  /bin/sh也可以这是不写这一行的默认解释器
# 一系列的shell命令
ls 
pwd
echo "hello world"

1.3 shell脚本的执行

# shell脚本的编写完之后,必须添加执行权限
chmod u+x xxx.sh
# 执行脚本
./xxx.sh
sh xxx./sh

shell脚本从上至下依次执行,中途有错误则中断

1.4 shell脚本中的变量

  • 变量的定义

    1. 普通变量(本地变量)

      # 定义变量,定义变量必须要赋值, =前后不允许有空格,有空格是比较(类似于==)
      temp=999
      # 普通变量只能在当前进程中使用
      
    2. 环境变量(一般大写)

      # 可以理解为全局变量,在当前操作系统中可全局访问
      # 分类
      	- 系统自带
      		例如: -PWD  -PATH
      	- 用户自定义
      		- 将普通变量提升为系统变量  前面加个set或export
      		GOPATH=/home/zoro/go/src ->普通环境变量
      		set GOPATH=/home/zoro/go/src ->系统环境变量
      		export GOPATH=/home/zore/go/src ->系统环境变量
      
  • 位置变量

    执行脚本的时候,可以给脚本传递参数,脚本内部使用这些参数就需要使用这些位置变量

    # 执行脚本
    ./test.sh aa bb cc dd ...
    
    • $0: 执行的文件名
    • $1: 第一个参数,aa
    • $2: 第二个参数,bb

    注意多余的参数也传进去了,只是没有使用

  • 特殊变量

    • $#: 获取传递的参数的个数

    • $@: 给脚本传递的所有参数

    • $?: 脚本执行完成之后的状态,成功==0 or 失败!=0

    • $$: 脚本进制执行之后对应的进程ID

      echo "Hello World"
      echo "第一个参数: $0"
      echo "第二个参数: $1"
      echo "第三个参数: $2"
      echo "第四个参数: $3"
      echo "第五个参数: $4"
      echo "传递的所有参数的个数: $#"
      echo "传递的所有参数: $@"
      echo "脚本执行完的状态: $?"
      echo "脚本执行的进程编号: $$"
      

    直接输入echo $?查看的是上一个进程的状态

  • 普通变量取值

    # 变量定义
    value=123  #默认以字符串处理
    echo $value #打印变量前面要加$
    echo ${value} #这样也可以,但是相对麻烦
    

  • 取命令执行结果的两种方式

    把命令执行的结果用变量保存:

    var=$(shell命令)
    var=`shell命令`
    

  • 引号的使用

    # 双引号
    echo "xxxx $var"  #会将其中变量的值打印输出
    # 单引号
    echo 'xxxx $var'  #会原样输出,不会取变量值
    

1.5 条件判断和循环

  • shell脚本的if条件判断

    # if语句
    if [ 条件判断 ];then
    	逻辑处理 -> shell命令
    	xxxx
    fi
    # =====================或
    if [ 条件判断 ]
    then
    	逻辑处理 -> shell命令
    	xxxx
    fi
    # if ... elif ... fi
    if [ 条件判断 ];then
    	逻辑处理 -> shell命令
    	xxxx
    elif [ 条件判断 ];then
    	shell命令
    	xxx
    elif [ 条件判断 ];then
        shell命令
        xxx
    else
    	shell命令
    fi
    

    注意:if和中括号中间有空格,中括号中的条件判断与中括号两边都有空格

    #!/bin/bash
    #对传递到脚本内部的文件名做判断
    if [ -d $1 ];then
            echo "$1 是一个目录"
    elif [ -s $1 ];then
            echo "$1 是一个文件,且文件不为空"
    else
            echo "$1 不是一个文件也不是一个目录"
    fi
    

    常用判断条件:

    • 关于文件属性

    • 关于字符串的判定

    • 常见数值判定

    • 逻辑运算操作符

  • shell脚本for循环

    # shell中有for、where
    # 语法: for 变量 in 集合; do; done
    #!/bin/bash
    # 对当前目录下的文件进行遍历
    list=$(ls)
    for var in $list;do
            echo "当前文件: $var"
    done
    ~     
    

1.6 shell脚本中的函数

# 没有函数的修饰,也没有参数也没有返回值
# 格式
funcName(){
    
    
	# 得到第一个参数
	arg1=$1
	# 得到第二个参数
	arg2=$2
	# 得到第三个参数
	arg3=$3
	函数体 ->一系列的shell命令  逻辑循环和判断
}
# 没有参数列表,但是可以传参
# 函数调用
funcName aa bb cc dd
# 函数调用之后的状态
0:成功
非0:失败

#!/bin/bash
# 判断传递进来的文件名是不是目录,如果不是就创建
# 定义函数
funcIsDir(){
    
    
        if [ -d $1 ];then
                echo "$1是一个目录"
        else
                # 创建这个目录
                mkdir $1
                if [ 0 -ne $? ];then
                        echo "目录创建失败"
                        exit
                fi
                echo "目录创建成功"
                ls -a
        fi
}

# 函数的调用
funcIsDir $1

二、Fabric基本概念

hyperledger 超级账本的生态图:

Fabric

  • 准备工作

  • 作用

    docker => 类似于虚拟机,为了区块链中的多节点模拟

    docker-compose => docker的管理工具

    go => 开发区块链

    nodejs => 写客户端

    python => 部分部件需要使用

  • 所有安装配置可见下方,或者见https://blog.csdn.net/qq_40632760/article/details/94594177

2.1 安装docker

环境是Ubuntu18,具体安装文档可见文章https://blog.csdn.net/qq_40632760/article/details/94594177

安装docker的permission denied问题:

没有执行权限

解决方案:

2.2 安装docker-compose

方法一:

方法二:

# 下载1.25.0 docker compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 添加可执行权限ls
sudo chmod +x /usr/local/bin/docker-compose

# 测试安装
sudo docker-compose --version

2.3 go环境的安装

GOROOT就是go的安装路径

GOPATH是作为编译后二进制的存放目的地和import包时的搜索路径 (其实也是你的工作目录, 你可以在src下创建你自己的go源文件, 然后开始工作)。

  1. GOPATH之下主要包含三个目录: bin、pkg、src
  2. bin目录主要存放可执行文件; pkg目录存放编译好的库文件, 主要是*.a文件; src目录下主要存放go的源文件

2.4 nodejs的安装

环境变量配置方法二:

wget https://nodejs.org/dist/v8.11.4/node-v8.11.4-linux-x64.tar.xz
sudo tar xvf node-v8.11.4-linux-x64.tar.xz -C /opt
cd /opt
sudo mv node-v8.11.4-linux-x64/ node-v8.11.4  # 更名
vim ~/.bashrc  				# .bashrc文件的配置仅当前用户生效
sudo vim /etc/profile		#/etc/profile文件的配置对所有用户生效
# 在文件下面加两行
export NODEJS_HOME=/opt/node-v8.11.4
export PATH=$PATH:$NODEJS_HOME/bin
# 重新加载
source ~/.bashrc	
. /etc/profile 
# 验证
node -v

.bashrc文件的配置仅当前用户生效

/etc/profile文件的配置对所有用户生效

2.5 部署hyperledger Fabric

# 1. 创建放置的目录,进入该目录,下载脚本
cd ~
mkdir hyperledger-fabric  	
cd hyperledger-fabric
# 下载并执行脚本
# 后接参数第一个 1.2.0=> Fabric的版本 第二个1.2.0=>Fabric的认证机构Fabric的版本  第三个是第三方库的版本   前两个参数一般保持一致
# 老版本 (视频中的老版本)
curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s 1.2.0 1.2.0 0.4.10
# 新版本
curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s -- 2.0.0 1.4.4 0.4.18 

注意:这一步很极可能会提示拒绝访问

拒绝访问的解决方法

解决方法:https://blog.csdn.net/laoxuan2011/article/details/

step-1

在 https://site.ip138.com/raw.Githubusercontent.com/

输入raw.githubusercontent.com查询IP地址

step-2

修改hosts Ubuntu,CentOS及macOS直接在终端输入

sudo vi /etc/hosts

添加以下内容保存即可 (IP地址查询后相应修改,可以ping不同IP的延时 选择最佳IP地址)

151.101.108.133 raw.githubusercontent.com
151.101.76.133 raw.githubusercontent.com
151.101.228.133 raw.githubusercontent.com

再次输入该命令应该就OK了

下载过慢的解决方法

给docker添加镜像

添加阿里云镜像:

# 有就修改,没有就创建
vi /etc/docker/daemon.json
# 文件内编辑配置  注意:这里yourID需要自行注册替换
{
    
    
          "registry-mirrors": ["https://{yourId}.mirror.aliyuncs.com"]
}
# 写完保存,重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
# 注意阿里的镜像需要你先注册阿里云账户,详细地址https://www.aliyun.com/product/acr?spm=5176.10695662.1362911.1.3ae2262cdaoPFB
# 检查是否配置好
docker info
# 在底部看到你的加速地址则说明ok

下载内容

这个命令下载的内容分为三个部分:

前两个下载可能较慢,需要耐心等待

下载的依赖镜像一览:

相关解释:

  • peer:区块的存储
  • orderer:Fabric中是没有矿工的,这里的order就是负责数据打包的
  • ccenv: GO语言的一个运行环境
  • fabric-tools: 会用到的许多工具
  • fabric-ca: 生成证书。联盟链、私有链加入必须要身份认证,通过了的才能加入。 =>生成账号
  • fabric-couchdb: 数据库
  • fabric-kafka: 排序,需要使用zookeeper
  • fabric-zookeeper: 与kafka相辅相成

最终完成了之后会有此输出显示:

===> List out hyperledger docker images
hyperledger/fabric-ca        1.2                 66cc132bd09c        2 years ago         252MB
hyperledger/fabric-ca        1.2.0               66cc132bd09c        2 years ago         252MB
hyperledger/fabric-ca        latest              66cc132bd09c        2 years ago         252MB
hyperledger/fabric-tools     1.2                 379602873003        2 years ago         1.51GB
hyperledger/fabric-tools     1.2.0               379602873003        2 years ago         1.51GB
hyperledger/fabric-tools     latest              379602873003        2 years ago         1.51GB
hyperledger/fabric-ccenv     1.2                 6acf31e2d9a4        2 years ago         1.43GB
hyperledger/fabric-ccenv     1.2.0               6acf31e2d9a4        2 years ago         1.43GB
hyperledger/fabric-ccenv     latest              6acf31e2d9a4        2 years ago         1.43GB
hyperledger/fabric-orderer   1.2                 4baf7789a8ec        2 years ago         152MB
hyperledger/fabric-orderer   1.2.0               4baf7789a8ec        2 years ago         152MB
hyperledger/fabric-orderer   latest              4baf7789a8ec        2 years ago         152MB
hyperledger/fabric-peer      1.2                 82c262e65984        2 years ago         159MB
hyperledger/fabric-peer      1.2.0               82c262e65984        2 years ago         159MB
hyperledger/fabric-peer      latest              82c262e65984        2 years ago         159MB

注意:这些镜像没有放在fabric-simples目录下,都放在/var/lib/docker/image目录中

如果需要删除环境,记得在这里删除镜像

2.6 配置环境变量

hyperledger-fabric/fabric-samples/bin

其中放置了一些可执行的二进制文件

把这些命令都复制到/usr/local/bin

cd hyperledger-fabric/fabric-samples/bin
sudo cp * /usr/local/bin
# 如果/usr/local/bin已经在PATH中了就已经完成了,没有的话加入到PATH中
# 查看PATH
echo $PATH

Tips

1. 重新登录

重新登录了以后可能会导致没有权限,这时再把自己添加到docker用户组中即可=> newgrp - docker

2. 安装Fabric出现错误

如果这个bug一直无法解决,最好的办法就是重新装系统,重新安装环境,多来几次就可以了(微笑.jpg)。

(ps: 说多了都是泪)

猜你喜欢

转载自blog.csdn.net/weixin_43988498/article/details/108942281