准备
gawk不是预安装的,要确保安装;
运行gawk的时候可能还需要yacc;
获取依赖&build
go get github.com/ipfs/go-ipfs
# 这里是ipfs main函数的位置
# 从这里go build就可以build整个工程
cd $GOROOT/src/github.com/ipfs/go-ipfs/cmd/ipfs
go build 2> out.txt #<--------\ 回 重 直
#| 到 新 到
gawk -f scrpit.gawk out.txt > get.sh #| 这 运 成
#| 里 行 功
sh get.sh #--------/
这里是上面用到的gawk程序;
因为go build的过程中会缺少很多依赖,所以一次go build肯定无法通过,会提示缺少的包;所以这里我写了一个gawk程序,用于收集缺少的依赖,生成一个脚本用于获取依赖;由于依赖还有依赖,运行一次脚本之后仍然无法build成功,所以反复执行这个过程直到所有的依赖都被下载就可以build成功了;
把下面这段程序拷贝到$GOROOT/src/github.com/ipfs/go-ipfs/cmd/ipfs目录下,命名为script.gawk
# scrpit.gawk
BEGIN{
print "# Generated by script.gawk; used for collecting dependencies."
print "# go build 2> temp.txt"
print "# gawk -f script.gawk out.txt > get.sh"
print "# sh get.sh"
print "#"
print "# Created by AprilCal on 2019/5/7."
print ""
}
/"/{
print "echo go get",$5
print "go get",$5
}
在获取依赖的过程中会有警告
go get: warning: modules disabled by GO111MODULE=auto in GOPATH/src;
ignoring ../../go.mod;
不必理会;如果打开go自带的依赖管理,其他工程目录的特定版本就会被下载到pkg路径下,不便开发;
注意
-
ipfs尤其是libp2p库,还在开发中,master分支上没有稳定版本,有时候master分支上的代码可能不能build成功;需要自己手动调整有问题的git仓库,回退版本;
-
如果build成功了但是运行失败,很可能是因为没有使用项目里的makefile安装过的原因;
-
佛了 XP