0. 环境
Fabric v2.0.1
go version go1.13.7 darwin/amd64
GoLand 2019.3
1. 转换为 go module
也可不使用 go module 管理依赖,设置 GO111MODULE=off
到目前为止 Fabric 还没有启用 go module
管理依赖,首先将工程转换为 go module
工程。
go mod init
会根据 Gopkg.toml
、Gopkg.lock
生成依赖并添加到 go.mod
中,期间会访问 google.com 的一些包,go mod init
过程中不会使用 GOPROXY
,因此设置HTTP_PROXY
,否则 timeout 的依赖解析不会添加 go.mod
中,后续可能下载不匹配的依赖版本。
cd github.com/hyperledger/fabric
git checkout v2.0.1
HTTP_PROXY=http://127.0.0.1:8010 HTTPS_PROXY=http://127.0.0.1:8010 go mod init
个人理解 GoLand 即使启用了 Vendoring mode
还是会以 go module
为主管理 vendor
目录,可能误更新 vendor
目录。可以通过 git status
检查vendor
是否改动。
编译
make orderer
遇到如下错误:
Building build/bin/orderer
GOBIN=/Users/dian/workspaces/go_workspace/src/github.com/hyperledger/fabric/build/bin go install "" -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=2.0.1 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=1cfa5da98 -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/cmd/orderer
go: downloading golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4
go: extracting golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4
go: gopkg.in/fsnotify/fsnotify.v1@v1.4.7 used for two different module paths (gopkg.in/fsnotify.v1 and gopkg.in/fsnotify/fsnotify.v1)
make: *** [build/bin/orderer] Error 1
解决办法,构建时加上 -mod=vendor
选项,增加GO_BUILD_FLAGS
变量修改 Makefile
209行如下:
...
GO_BUILD_FLAGS ?= -mod=vendor
$(BUILD_DIR)/bin/%: GO_LDFLAGS = $(METADATA_VAR:%=-X $(PKGNAME)/common/metadata.%)
$(BUILD_DIR)/bin/%:
@echo "Building $@"
@mkdir -p $(@D)
GOBIN=$(abspath $(@D)) go install "$(GO_BUILD_FLAGS)" -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F))
@touch $@
...
2. Fabric 网络
使用 sampleconfig
搭建 Fabric
开发调试网络
Bash 脚本
Mac
或 Linux
环境可通过脚本 快速准备环境。Windows Cygwin
未经测试
脚本使用方式:
- 新建一个目录,如 /tmp/fabric
- 将下面的
fab.sh
内容拷贝到新建目录下fab.sh
文件中 - 设置执行权限
chmod u+x fab.sh
- 快速创建
./fab.sh new </path/to/fabric source code>
fab.sh
生成utils.sh
辅助脚本可用于简化操作source utils.sh
,之后使用其提供的函数- 清理
./fab.sh clean
fab.sh
#!/bin/bash
echo
echo ' ______ __ _ '
echo ' / ____/___ _/ /_ _____(_)____'
echo ' / /_ / __ `/ __ \/ ___/ / ___/'
echo ' / __/ / /_/ / /_/ / / / / /__ '
echo '/_/ \__,_/_.___/_/ /_/\___/ '
echo
# Print the usage message
function usage() {
echo "Usage: "
echo " $0 new /path/to/fabric-source"
echo " $0 clean"
}
function sedi () {
case $(uname -s) in
*[Dd]arwin* | *BSD* ) sed -i '' "$@";;
*) sed -i "$@";;
esac
}
function fabric::generateutils() {