区块链环境配置教程

avatar
作者
筋斗云
阅读量:8

区块链环境配置教程

一、安装CentOS

本例中采用虚拟化软件VMware Workstation安装CentOS 7.3(最小安装minimal)。实际应用中,单个服务器一般都设定为单一功能,比如Web服务器,数据库服务器,LDAP服务器等,或者多台服务器分布式部署云计算组件如Hadoop等,单个服务器只需要操作系统的基本功能,因此CentOS最小化安装符合需求,如果需要额外的功能,可以在使用过程中增加。云服务提供商(例如阿里云)提供的云服务器操作系统一般是CentOS minimal。

本例CentOS安装环境如下:

主机(Host Machine):CPU 8核,内存16G,操作系统Windows 10专业版64位

虚拟化软件:VMware Workstation 14 pro

https://www.centos.org/ 下载安装包,本例是CentOS-7-x86_64-DVD-1804.iso

1.1 安装前VMware设置

1、在VMware菜单“编辑-首选项”可以设置虚拟机默认放置的目录,应选择有足够空间的硬盘分区。本例中是 D:\MyVM(根据自己喜好设置虚拟机存放的位置)

2、创建虚拟机采用“自定义(高级)”配置,虚拟机名称(自己设置)。

3、选择安装来源时,载入CentOS的ISO后,VMware会自动识别出操作系统类型和版本。也可以选择“稍后安装操作系统”不采用简易安装,而采用手动安装。

4、为虚机分配处理器1个,内核数量2个,2G/4G(根据自己电脑内存大小)内存。本例中的这个虚机作为实验环境,将安装多种应用,因此配置较高。实验用虚机一般1核2G内存即可,可租用的轻量级云服务器一般是1核1G内存。实际应用虚机则根据需要分配资源,计算单元则对CPU要求较高,内容服务器则对内存要求较高。

5、使用NAT网络(默认选项),虚机没有与主机同级的IP地址。

桥接,NAT,仅主机模式,三者的简要区别如下:

(1)桥接:虚机与主机在网络中地位一样,虚机拥有与主机同级的独立IP地址。

(2)NAT:虚机共享主机的IP地址访问Internet,同一个主机中的各个虚机在同一网段中,可互相访问。外部无法直接访问虚机,但可通过主机的转接访问虚机。

(3)仅主机模式:同一主机中的各个虚机可互相访问,虚机无法访问Internet,外部也无法访问虚机。

6、I/O类型:默认LSI Logic,磁盘类型:默认SCSI,选择磁盘:创建新虚拟磁盘。

7、分配20G虚拟磁盘空间,存为单独文件(非默认选项)。

8、指定虚机磁盘文件,保持默认。

9、开始安装时,可能会提示要更改BIOS设置以支持64位操作系统之类的,按照提示修改主机BIOS设置,再回来安装。

注意:一般新的电脑无需设置自动支持64位虚拟化,有些电脑需要在BIOS里设置以支持64位虚拟化,有些更旧的电脑完全不支持64位虚拟化,则无法在VMware里安装64位的操作系统。
在这里插入图片描述
设置完成如上图,点击“完成”开始安装。

1.2 安装过程

注意:安装过程中,鼠标点击虚机界面即可进入虚机操作,组合键ctrl + alt 可使鼠标返回主机。在VMware Workstation窗口的左下角会有提示。

1、安装过程与在真实裸机上安装一样,初始界面按键“i”选择“Install CentOS”,然后回车进入安装过程。

2、选择语言:保持默认 English - Englisth (United States)

3、如下图所示,设置安装选项:

Date & Time 选到 Asian / Shanghai

Language Support 可以把中文,简体中文(中国)选上

Software Selection 保持Minimal Install不变

Installation Destination 需要点开,默认是自动配置磁盘,不需要修改,直接点“Done”按钮返回即可,黄色的感叹号才会消失,此界面右下角“Begin Installation”按钮才会亮起。

Network & Hostname 点进去,如果有显示有线网络ens33之类的,打开ON

KDUMP可以设置为Disabled,保持默认也可以。

设置完成后,点击右下角“Begin Installation”按钮开始安装。
在这里插入图片描述
4、安装的过程中给root用户设置密码(4geT%not),非必需。如果密码太弱,需点击两次确定才能完成操作。
新建一个用户admin(密码d00r%Key),勾选“Make this user administrator”,今后的常用登录用户。如果密码太弱,需点击两次确定才能完成操作。
在这里插入图片描述
安装完成,点击“Reboot”重新启动。
5、系统是最小化安装,没有GUI,默认以admin登录,安装完成。
在这里插入图片描述
非必需:虚机屏幕有时候不匹配VMware的窗口,需要拉动窗口的滚动条才能看见全部的虚机屏幕内容。从VMware菜单“电源 - 关闭客户机”,然后再开启此虚机,可解决这个问题。

1.3 忘记密码

下面是CentOS 7的root密码修改
开机按esc
选择CentOS Linux (3.10.0-693…) 按 e 键
在这里插入图片描述
光标移动到 linux 16 开头的行,找到 ro 改为 rw init=sysroot/bin/sh
在这里插入图片描述

按 Ctrl+x 执行
进入后输 chroot /sysroot
在这里插入图片描述
输入 passwd
根据提示输入2次新密码
在这里插入图片描述

完成后输入 touch /.autorelabel 更新系统信息
在这里插入图片描述
exit
reboot 重启
在这里插入图片描述
重启过程慢,耐心等等
重启后用新密码登录

二、基本系统设置

2.1 安装后设置

2.1.1 关于用户

目前系统里有2个用户,root是超级管理员,一般不用此账号登录;admin是常用用户,系统管理员。

系统提示符为 # 表明用户为root,提示符为$ 表明用户为其他用户。

每个用户都有自己的主目录,以 ~表示,root用户是 /root,其他用户是 /home/用户名。例如admin输入命令 cd ~ 则会进入其主目录 /home/admin

admin需要执行root权限的命令时,可以用 sudo 临时获得权限,也可以用 su 切换身份为root。

使用sudo时,需要输入admin用户自己的密码,使用 su时,需要输入root用户的密码,使用“sudo su”则可以使用admin自己的密码切换到root用户身份,在root用户没有设置密码时,这个方法很好用。

1、使用sudo不需要输入密码

$ sudo visudo -f /etc/sudoers 

如下修改内容,在 %wheel ALL=(ALL) ALL 前加注释符#,去掉 %wheel ALL=(ALL) NOPASSWD:ALL 前的注释符。保存退出就行了。

这是针对wheel这个组的设置,这个组的成员都不需要输入密码就可以使用sudo,admin是wheel组的成员。
在这里插入图片描述
传统修改方法是在 root ALL=(ALL) ALL 下面增加一行 admin ALL=(ALL) NOPASSWD:ALL 但在这里会被 %wheel ALL=(ALL) ALL 覆盖掉。原因是在安装过程中,创建 admin用户时使其成为管理员,便成为了 wheel组的成员。系统只允许wheel组的用户来执行“su”命令登录为root用户,而让其他组的用户即使执行“su”、输入了正确的root密码,也无法登录为root用户。

用visudo编辑sudoers文件是正确的做法。有些做法是增加文件sudoers的写权限,用vi修改,再去掉其写权限。可能会出现文件权限错乱,如下恢复sudoers文件的正确属性:

$ sudo chmod 0440 /etc/sudoers 
2.2.2 连接网络,更新系统

查找配置网络文件

$ ls /etc/sysconfig/network-scripts/ 

看到有形如 ifcfg-ens33 或 ifcfg-eth0 这样的文件,修改

$ sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33 

把 ONBOOT=no 改成 yes 即可,保存退出。

重启网络服务,应用设置,就可以联网了。安装时选择的是NAT方式,因此是使用主机的IP地址连接到Internet。

$ sudo systemctl restart network.service 

更新系统

$ sudo yum update 

首先会查询要更新哪些内容,询问是否OK,确认后开始更新。
安装必备系统组件perl,gcc,kernel-devel,wget,yum-utils,net-tools

$ sudo yum -y install perl gcc kernel-devel wget $ sudo yum -y install yum-utils  $ sudo yum -y install net-tools  yum install -y install unzip zip 

更新完毕后,可以重新启动一下系统

$ sudo systemctl reboot 

2.2 网络设置

安装net-tools包,以便后续使用ifconfig命令

$ sudo yum -y install net-tools 

三、区块链的环境搭建

搭建Hyperledger fabric环境

搭建过程

3.1 Go安装。(官网地址:https://golang.google.cn/dl/

  1. 下载安装包
    箭头所指地址+自己系统所对应的版本。使用wget命令。
    在这里插入图片描述

以我自己安装的为例,图中椭圆框中即为我所安装版本。
所以下载命令为:

wget https://golang.google.cn/dl/go1.18.5.linux-amd64.tar.gz 
  1. 解压安装包到指定路径

将下载的压缩包通过下面命令进行解压,一定注意大小写(否则可能导致安装失败)

tar -xzvf go1.18.5.linux-amd64.tar.gz -C /usr/local/ 
  1. 设置环境变量

使用vi /etc/profile 编辑profile文件。

添加以下内容到profile 文件中(gopath应提前创建好,或者配置完成后别忘了创建)

#go setting  export GOROOT=/usr/local/go  export GOPATH=/usr/local/gopath  export PATH=$PATH:$GOROOT/bin 

保存并退出。

source /etc/profile #使文件立即生效。 

在gopath路径下使用mkdir创建三个文件,即mkdir src bin pkg。

其中bin存放编译后的可执行文件;pkg存放编译后的包文件;src存放项目源文件。

查看是否安装成功

go version 

编辑hello.go文件测试.

vi /usr/local/gopath/src/hello.go 

在hello.go中编写如下代码:

package main   import "fmt"  func main() {  `    `fmt.Println("Hello world!")  } 

保存并退出。

go run hello.go 

显示Hello world!正确执行。截止到此,安装GO语言环境完成。

3.2 docker安装

第一种方式:curl -fsSL https://get.docker.com/ | sh 比较快捷,但是可能会因为无法访问国外的镜像而出错。如果不能安装,就是用第二种方式。

第二种方式(推荐):

如果以前安装过docker,请先卸载或删除所有依赖关系。如果没装过跳过此过程。

yum list installed | grep docker;查看所有安装的docker程序

yum -y remove+要删除程序的完整名称(如果安装的比较多,这个过程可能有点麻烦)

rm -rf /var/lib/docker:删除镜像容器。

输入Docker version出现如下图所示字样,表明已卸载干净。
在这里插入图片描述
然后开始安装docker

yum install -y yum-utils device-mapper-persistent-data lvm2  yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #安装阿里镜像源  yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin #(默认安装的是最新版的) 

查看版本信息
在这里插入图片描述

systemctl start docker #启动docker systemctl enable docker #将docker设置为开机自启,以便后续操作不会出错。 

安装docker-compose
因为上面安装docker的命令中docker-compose-plugin是以插件的形式安装docker compose,现在是独立安装docker compose。
独立安装后的docker compose 命令为 : docker-compose xxx
插件安装后的docker compose命令为: docker compose xxx
如果是Linux系统建议单独安装一下。

1.下载docker-compose

命令:

curl -SL https://github.com/docker/compose/releases/download/v2.11.2/docker-compose-linux-x86\_64 -o /usr/local/bin/docker-compose 

也可以下载别的版本,只需将命令行中v2.11.2换成自己想装的版本即可。

2. 给docker-compose文件添加可执行权限

命令:

chmod +x /usr/local/bin/docker-compose 

3. 添加软连接

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose 

4.查看版本

Docker-compose version 

3.3 nodejs安装

去这个网站https://nodejs.org/dist/找到自己想安装的版本。

复制整个网址,使用以下命令下载,例如我下载的:

Wget https://nodejs.org/dist/v16.14.1/node-v16.14.1-linux-x64.tar.gz 

2.解压

tar -xzvf node-v16.14.1-linux-x64.tar.gz -C /usr/local/  cd /usr/local  mv node-v10.19.0-linux-x64/ nodejs 

3.vi /etc/profile 增加环境变量

export NODE\_HOME=/usr/local/nodejs  export PATH=$NODE\_HOME/bin:$PATH 

保存并退出

source /etc/profile 使文件立即生效。 

4. 查看版本

node -v  npm -v 

5.设置淘宝镜像源

npm config set registry https://registry.npm.taobao.org 

6.which node、 whereis node 查看有无 node、npm等命令
在这里插入图片描述
7. 安装全局 pm2

npm install -g pm2

8. 查看 有无 pm2命令 , pm2 版本
在这里插入图片描述
下载源代码
因为要用到git,所以需要先安装git。

yum install git 

下载相关镜像文件。

在想要安装fabric的目录下运行以下命令来下载fabric (时间可能会有点久)

git clone https://github.com/hyperledger/fabric.git 

(git clone克隆时出现fatal: unable to access ‘https://github.com/**‘: TCP connection resset by peer)

解决方法:

##发生这种情况是git设置了代理,取消代理即可

[root@hya ~]# git config --global --unset http.proxy  [root@hya ~]# git config --global --unset https.proxy 

下载完成后会得到一个fabric文件夹,进入fabric/scripts目录可以看到一个bootstrap.sh脚本(注意刚开始是没有fabric-samples这个文件夹的,是执行脚本后生成的)
在这里插入图片描述
直接执行bootstrap.sh脚本,就会自动进行fabric相关镜像的下载 (时间有点久,如果出现长时间停顿,可能需要重启虚拟机后重新执行脚本)

当相关镜像全部下载完成后,会自动罗列出下载的内容
构建网络

Fabric 1.x.x版本的应该是进入fabric/scripts/fabric-samples/first-network/

Fabric2.x.x版本的进入fabric/scripts/fabric-samples/test-network/

执行以下命令,开启测试网络:

./network.sh down  ./network.sh up 

创建信道

./network.sh createChannel 

下载go依赖

export GO111MODULE=on  go env -w GOPROXY=https://goproxy.cn,direct 

查看是否切换成功:

go env 

进入链码所在路径:

cd /usr/local/go/fabric/scripts/fabric-samples/asset-transfer-basic/chaincode-go 

下载依赖:

go mod vendor 

四、在通道上启动链码chaincode(智能合约)

切换回 /fabric-samples/test-network 目录:

./network.sh deployCC -ccn basic -ccp …/asset-transfer-basic/chaincode-go -ccl go

如果出现下图所示情况:
在这里插入图片描述
解决方案

下载并安装EPEL

wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm  rpm -ivh epel-release-latest-7.noarch.rpm 

# 检查是否已添加至源列表

yum repolist 

安装jq

yum install jq 

五、与网络交互

首先确保自己位于test-network目录下。

进入CLI容器,进行invoke交互,需要几行命令设置CLI的路径:

export PATH=${PWD}/../bin:$PATH export FABRIC\_CFG\_PATH=$PWD/../config/ 

先设置为org1的环境变量进行交互:

export CORE\_PEER\_TLS\_ENABLED=true  export CORE\_PEER\_LOCALMSPID="Org1MSP"  export CORE\_PEER\_TLS\_ROOTCERT\_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt  export CORE\_PEER\_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp  export CORE\_PEER\_ADDRESS=localhost:7051 

用下面的命令初始化账本:

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"InitLedger","Args":[]}' 

使用下面的命令查找账本:

peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}' 

通过命令改变一笔资产的所有者:

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"TransferAsset","Args":["asset6","Christopher"]}' 

六、关闭测试网络

./network.sh down 

到此区块链的基础环境配置已全部结束,感谢您的浏览!!!!!!!!!!!!

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!