热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HyperledgerFabric安装

区块链在这里就不多费笔墨了,相信大家问度娘比看我的文章好多了快速进入正题:环境准备五台CentOS7.2[rootfabricorderere2e_cli]#ca

区块链在这里就不多费笔墨了,相信大家问度娘比看我的文章好多了
快速进入正题:


环境准备

五台 CentOS7.2

[root@fabric=orderer e2e_cli]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

其中三台用来部署peer ,一台用来部署orderer,另一台用来部署证书

记得要关闭selinux

[root@fabric03 ~]# cat /etc/selinux/config # This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

安装 docker git golang docker-compose

yum install docker git golangyum install epel-releaseyum install pip && pip install --upgrade pip && pip install docker-composesystemctl start docker

http://hyperledger-fabric.readthedocs.io/en/latest/prereqs.html


下载源代码,镜像

获取fabric源代码

mkdir -p $GOPATH/src/github.com/hyperledger
cd $GOPATH/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git

生成configtxgen工具

[root@fabric=orderer fabric]# make configtxgen
find: ‘/src/github.com/hyperledger/fabric/core/chaincode/shim’: 没有那个文件或目录
build/bin/configtxgen
CGO_CFLAGS=" " GOBIN=/root/go/src/github.com/hyperledger/fabric/build/bin go install -tags "nopkcs11" -ldflags "-X github.com/hyperledger/fabric/common/configtx/tool/configtxgen/metadata.Version=1.0.7-snapshot-da14b6b" github.com/hyperledger/fabric/common/configtx/tool/configtxgen
Binary available as build/bin/configtxgen

[root@fabric=orderer fabric]# ls -l build/bin/
总用量 14816
-rwxr-xr-x 1 root root 15168777 317 09:37 configtxgen

生成配置文件

[root@fabric=orderer fabric]# cd examples/e2e_cli/
[root@fabric=orderer e2e_cli]# pwd
/root/go/src/github.com/hyperledger/fabric/examples/e2e_cli
[root@fabric=orderer e2e_cli]# ls -l
总用量 84
drwxr-xr-x 2 root root 58 3月 17 09:36 base
drwxr-xr-x 2 root root 106 3月 17 09:54 channel-artifacts
-rw-r--r-- 1 root root 5013 317 09:36 configtx.yaml
drwxr-xr-x 4 root root 57 3月 17 09:54 crypto-config
-rw-r--r-- 1 root root 3858 317 09:36 crypto-config.yaml
-rw-r--r-- 1 root root 2677 317 09:36 docker-compose-cli.yaml
-rw-r--r-- 1 root root 2005 317 09:36 docker-compose-couch.yaml
-rw-r--r-- 1 root root 2517 317 09:36 docker-compose-e2e-template.yaml
-rw-r--r-- 1 root root 2725 317 09:54 docker-compose-e2e.yaml
-rw-r--r-- 1 root root 2119 317 09:36 download-dockerimages.sh
-rw-r--r-- 1 root root 41711 317 09:36 end-to-end.rst
drwxr-xr-x 3 root root 22 3月 17 09:36 examples
-rwxr-xr-x 1 root root 3588 317 09:36 generateArtifacts.sh
-rwxr-xr-x 1 root root 2617 317 09:36 network_setup.sh
drwxr-xr-x 2 root root 22 3月 17 09:36 scripts

在终端 执行./generateArtifacts.sh

[root@fabric=orderer e2e_cli]# ./generateArtifacts.sh
mychannelBuilding cryptogen
find: ‘/src/github.com/hyperledger/fabric/core/chaincode/shim’: 没有那个文件或目录
make: 进入目录“/root/go/src/github.com/hyperledger/fabric”
Building release/linux-amd64/bin/configtxgen for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/configtxgen -tags "nopkcs11" -ldflags "-X github.com/hyperledger/fabric/common/configtx/tool/configtxgen/metadata.Version=1.0.7-snapshot-da14b6b" github.com/hyperledger/fabric/common/configtx/tool/configtxgen
Building release/linux-amd64/bin/cryptogen for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/cryptogen -tags "nopkcs11" -ldflags "-X github.com/hyperledger/fabric/common/tools/cryptogen/metadata.Version=1.0.7-snapshot-da14b6b" github.com/hyperledger/fabric/common/tools/cryptogen
Building release/linux-amd64/bin/configtxlator for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/configtxlator -tags "nopkcs11" -ldflags "-X github.com/hyperledger/fabric/common/tools/configtxlator/metadata.Version=1.0.7-snapshot-da14b6b" github.com/hyperledger/fabric/common/tools/configtxlator
Building release/linux-amd64/bin/peer for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/peer -tags "nopkcs11" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=1.0.7-snapshot-da14b6b -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.3.2 -X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric -X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger" github.com/hyperledger/fabric/peer
Building release/linux-amd64/bin/orderer for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/orderer -tags "nopkcs11" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=1.0.7-snapshot-da14b6b -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.3.2 -X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric -X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger" github.com/hyperledger/fabric/orderer
mkdir -p release/linux-amd64/bin
make: 离开目录“/root/go/src/github.com/hyperledger/fabric”##########################################################
###
## Generate certificates using cryptogen tool #########
##########################################################
org1.example.com
org2.example.comUsing configtxgen -> /root/go/src/github.com/hyperledger/fabric/examples/e2e_cli/../../release/linux-amd64/bin/configtxgen
###
#######################################################
######### Generating Orderer Genesis block ##############
###
#######################################################
2018-03-17 09:54:12.129 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-03-17 09:54:12.149 CST [common/configtx/tool] doOutputBlock -> INFO 002 Generating genesis block
2018-03-17 09:54:12.150 CST [common/configtx/tool] doOutputBlock -> INFO 003 Writing genesis block#################################################################
###
Generating channel configuration transaction 'channel.tx' ###
###
##############################################################
2018-03-17 09:54:12.157 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-03-17 09:54:12.160 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
2018-03-17 09:54:12.160 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 003 Writing new channel tx#################################################################
###
#### Generating anchor peer update for Org1MSP ##########
#################################################################
2018-03-17 09:54:12.167 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-03-17 09:54:12.169 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2018-03-17 09:54:12.169 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update###
##############################################################
####### Generating anchor peer update for Org2MSP ##########
#################################################################
2018-03-17 09:54:12.177 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-03-17 09:54:12.180 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2018-03-17 09:54:12.181 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update

获取镜像

docker pull hyperledger/fabric-orderer:x86_64-1.0.0-alpha
docker pull hyperledger/fabric-peer:x86_64-1.0.0-alpha
docker pull hyperledger/fabric-zookeeper:x86_64-1.0.0-alpha
docker pull hyperledger/fabric-couchdb:x86_64-1.0.0-alpha
docker pull hyperledger/fabric-kafka:x86_64-1.0.0-alpha
docker pull hyperledger/fabric-ca:x86_64-1.0.0-alpha
docker pull hyperledger/fabric-ccenv:x86_64-1.0.0-alpha
docker pull hyperledger/fabric-javaenv:x86_64-1.0.0-alpha
docker pull hyperledger/fabric-tools:x86_64-1.1.0-alphadocker tag hyperledger/fabric-tools:x86_64-1.1.0-alpha hyperledger/fabric-tools:latest
docker tag hyperledger/fabric-orderer:x86_64-1.0.0-alpha hyperledger/fabric-orderer:latest
docker tag hyperledger/fabric-peer:x86_64-1.0.0-alpha hyperledger/fabric-peer:latest
docker tag hyperledger/fabric-zookeeper:x86_64-1.0.0-alpha hyperledger/fabric-zookeeper:latest
docker tag hyperledger/fabric-couchdb:x86_64-1.0.0-alpha hyperledger/fabric-couchdb:latest
docker tag hyperledger/fabric-kafka:x86_64-1.0.0-alpha hyperledger/fabric-kafka:latest
docker tag hyperledger/fabric-ca:x86_64-1.0.0-alpha hyperledger/fabric-ca:latest
docker tag hyperledger/fabric-ccenv:x86_64-1.0.0-alpha hyperledger/fabric-ccenv:latest
docker tag hyperledger/fabric-javaenv:x86_64-1.0.0-alpha hyperledger/fabric-javaenv:latest

使用docker 创建Fabric 网络 以及创建/加入通道(账本)

[root@fabric=orderer e2e_cli]# ls -l
总用量 84
drwxr-xr-x 2 root root 58 3月 17 09:36 base
drwxr-xr-x 2 root root 106 3月 17 09:54 channel-artifacts
-rw-r--r-- 1 root root 5013 317 09:36 configtx.yaml
drwxr-xr-x 4 root root 57 3月 17 09:54 crypto-config
-rw-r--r-- 1 root root 3858 317 09:36 crypto-config.yaml
-rw-r--r-- 1 root root 2677 317 09:36 docker-compose-cli.yaml
-rw-r--r-- 1 root root 2005 317 09:36 docker-compose-couch.yaml
-rw-r--r-- 1 root root 2517 317 09:36 docker-compose-e2e-template.yaml
-rw-r--r-- 1 root root 2725 317 09:54 docker-compose-e2e.yaml
-rw-r--r-- 1 root root 2119 317 09:36 download-dockerimages.sh
-rw-r--r-- 1 root root 41711 317 09:36 end-to-end.rst
drwxr-xr-x 3 root root 22 3月 17 09:36 examples
-rwxr-xr-x 1 root root 3588 317 09:36 generateArtifacts.sh
-rwxr-xr-x 1 root root 2617 317 09:36 network_setup.sh
drwxr-xr-x 2 root root 22 3月 17 09:36 scripts

测试bash network_setup.sh up 该部署还存在问题,只提供参考

[root@fabricorderer e2e_cli]# pwd
/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli
[root@fabricorderer e2e_cli]# bash network_setup.sh up

[root@fabricorderer e2e_cli]# bash network_setup.sh up
setting to default channel 'mychannel'
mychannelUsing cryptogen -> /opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/../../release/linux-amd64/bin/cryptogen##########################################################
###
## Generate certificates using cryptogen tool #########
##########################################################
org1.example.com
org2.example.comsed:-e 表达式 #1,字符 85:未终止的“s”命令
sed:-e 表达式 #1,字符 85:未终止的“s”命令
Using configtxgen -> /opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/../../release/linux-amd64/bin/configtxgen
###
#######################################################
######### Generating Orderer Genesis block ##############
###
#######################################################
2018-03-17 21:22:41.918 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-03-17 21:22:41.940 CST [common/configtx/tool] doOutputBlock -> INFO 002 Generating genesis block
2018-03-17 21:22:41.941 CST [common/configtx/tool] doOutputBlock -> INFO 003 Writing genesis block#################################################################
###
Generating channel configuration transaction 'channel.tx' ###
###
##############################################################
2018-03-17 21:22:41.953 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-03-17 21:22:41.956 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
2018-03-17 21:22:41.956 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 003 Writing new channel tx#################################################################
###
#### Generating anchor peer update for Org1MSP ##########
#################################################################
2018-03-17 21:22:41.969 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-03-17 21:22:41.971 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2018-03-17 21:22:41.972 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update###
##############################################################
####### Generating anchor peer update for Org2MSP ##########
#################################################################
2018-03-17 21:22:41.983 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-03-17 21:22:41.986 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2018-03-17 21:22:41.986 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update/usr/lib/python2.7/site-packages/requests/__init__.py:80: RequestsDependencyWarning: urllib3 (1.22) or chardet (2.2.1) doesn't match a supported version!
Creating orderer.example.com ... done
Creating cli ... done
Creating peer1.org1.example.com ...
Creating peer1.org2.example.com ...
Creating orderer.example.com ...
Creating peer0.org2.example.com ...
Creating cli ... ____ _____ _ ____ _____ _____ ____ _____
/ ___| |_ _| / \ | _ \ |_ _| | ____| |___ \ | ____|
\___ \ | | / _ \ | |_) | | | _____ | _| __) | | _| ___) | | | / ___ \ | _ <| | |_____| | |___ / __/ | |___
|____/ |_| /_/ \_\ |_| \_\ |_| |_____| |_____| |_____|Channel name : mychannel
Creating channel...
CORE_PEER_TLS_ROOTCERT_FILE&#61;/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
CORE_PEER_TLS_KEY_FILE&#61;/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
CORE_PEER_LOCALMSPID&#61;Org1MSP
CORE_VM_ENDPOINT&#61;unix:///host/var/run/docker.sock
CORE_PEER_TLS_CERT_FILE&#61;/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
CORE_PEER_TLS_ENABLED&#61;true
CORE_PEER_MSPCONFIGPATH&#61;/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin&#64;org1.example.com/msp
CORE_PEER_ID&#61;cli
CORE_LOGGING_LEVEL&#61;DEBUG
CORE_PEER_ADDRESS&#61;peer0.org1.example.com:7051
2018-03-17 13:22:44.873 UTC [msp] getMspConfig -> INFO 001 intermediate certs folder not found at [/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin&#64;org1.example.com/msp/intermediatecerts]. Skipping.: [stat /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin&#64;org1.example.com/msp/intermediatecerts: no such file or directory]
2018-03-17 13:22:44.873 UTC [msp] getMspConfig -> INFO 002 crls folder not found at [/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin&#64;org1.example.com/msp/intermediatecerts]. Skipping.: [stat /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin&#64;org1.example.com/msp/crls: no such file or directory]
2018-03-17 13:22:44.873 UTC [msp] getMspConfig -> INFO 003 MSP configuration file not found at [/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin&#64;org1.example.com/msp/config.yaml]: [stat /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin&#64;org1.example.com/msp/config.yaml: no such file or directory]
2018-03-17 13:22:44.924 UTC [msp] GetLocalMSP -> DEBU 004 Returning existing local MSP
2018-03-17 13:22:44.924 UTC [msp] GetDefaultSigningIdentity -> DEBU 005 Obtaining default signing identity
2018-03-17 13:22:44.926 UTC [grpc] Printf -> DEBU 006 Failed to dial orderer.example.com:7050: connection error: desc &#61; "transport: authentication handshake failed: x509: certificate signed by unknown authority"; please retry.
Error: Error connecting due to rpc error: code &#61; Internal desc &#61; connection error: desc &#61; "transport: authentication handshake failed: x509: certificate signed by unknown authority"
Usage:peer channel create [flags]Global Flags:-b, --blockpath string Path to file containing genesis block--cafile string Path to file containing PEM-encoded trusted certificate(s) for the ordering endpoint-c, --chain string In case of a newChain command, the chain ID to create.-f, --file string Configuration transaction file generated by a tool such as configtxgen for submitting to orderer--logging-level string Default logging level and overrides, see core.yaml for full syntax-o, --orderer string Ordering service endpoint--test.coverprofile string Done (default "coverage.cov")-t, --timeout int Channel creation timeout (default 5)--tls Use TLS when communicating with the orderer endpoint-v, --version Display current version of fabric peer server!!!!!!!!!!!!!!! Channel creation failed !!!!!!!!!!!!!!!!
&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61; ERROR !!! FAILED to execute End-2-End Scenario &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;^C
[root&#64;fabricorderer e2e_cli]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e8211fcb9ced hyperledger/fabric-tools "/bin/bash -c &#39;./s..." 4 minutes ago Up 4 minutes cli
b13e244fc833 hyperledger/fabric-orderer "orderer" 4 minutes ago Up 4 minutes 0.0.0.0:7050->7050/tcp orderer.example.com
d4875001e448 hyperledger/fabric-peer "peer node start" 4 minutes ago Up 4 minutes 0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp peer0.org1.example.com
9517f14308f6 hyperledger/fabric-peer "peer node start" 4 minutes ago Up 4 minutes 0.0.0.0:10051->7051/tcp, 0.0.0.0:10053->7053/tcp peer1.org2.example.com
97ea015136bc hyperledger/fabric-peer "peer node start" 4 minutes ago Up 4 minutes 0.0.0.0:8051->7051/tcp, 0.0.0.0:8053->7053/tcp peer1.org1.example.com
116b0d99d316 hyperledger/fabric-peer "peer node start" 4 minutes ago Up 4 minutes 0.0.0.0:9051->7051/tcp, 0.0.0.0:9053->7053/tcp peer0.org2.example.com

推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
author-avatar
ccmm6688
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有