1.下載代碼以及依賴環境
1) 由於github.com國內訪問較慢,克隆gitee的鏡像
cd /media/lynn/disk_d/codes/database/cockroach
mkdir -p src/github.com/cockroachdb/
mv CockroachDB cockroach
git clone https://gitee.com/mirrors/CockroachDB.git
2)下載golang-1.15
下載地址
mv go1.15.linux-amd64.tar.gz /usr/lib
tar -zxvf go1.15.linux-amd64.tar.gz
2. 下載子模塊
1) 修改子模塊地址: .gitmodules
[submodule "vendor"]
path = vendor
url = https://gitee.com/jianyun/vendored.git
[submodule "c-deps/jemalloc"]
path = c-deps/jemalloc
url = https://gitee.com/jianyun/jemalloc.git
[submodule "c-deps/protobuf"]
path = c-deps/protobuf
url = https://gitee.com/jianyun/protobuf.git
[submodule "pkg/ui/yarn-vendor"]
path = pkg/ui/yarn-vendor
url = https://gitee.com/jianyun/yarn-vendored.git
[submodule "c-deps/krb5"]
path = c-deps/krb5
url = https://gitee.com/jianyun/krb5.git
[submodule "c-deps/libedit"]
path = c-deps/libedit
url = https://gitee.com/lynninspur/libedit.git
[submodule "c-deps/geos"]
path = c-deps/geos
url = https://gitee.com/lynninspur/geos.git
[submodule "c-deps/proj"]
path = c-deps/proj
url = https://gitee.com/jianyun/PROJ.git
執行指令
cd /media/lynn/disk_d/codes/database/cockroach/src/github.com/cockroachdb/cockroach
git submodule init
git submodule update
git submodule sync
2) 修改c-deps/protobuf的子模塊地址(c-deps/protobuf/.gitmodules)
[submodule "third_party/benchmark"]
path = third_party/benchmark
url = https://gitee.com/lynninspur/benchmark.git
[submodule "third_party/googletest"]
path = third_party/googletest
url = https://gitee.com/lynninspur/googletest.git
ignore = dirty
3. 設置環境變量,下載依賴包
export GOPATH=/media/lynn/disk_d/codes/database/cockroach
cd /media/lynn/disk_d/codes/database/cockroach/src/github.com/cockroachdb/cockroach
export GOPROXY=https://goproxy.io
export GO111MODULE=on
export GO_HOME=/usr/lib/go-1.15/
export PATH=/usr/lib/go-1.15/bin:$PATH
#下載Go依賴packages
go mod tidy
go mod vendor
4. 編譯
cd /media/lynn/disk_d/codes/database/cockroach/src/github.com/cockroachdb/cockroach
make -j4 build
5. 錯誤
1) 編譯錯誤
CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
閱讀Makefile (139行)
pkg/ui/distccl/bindata.go: $(UI_CCL_DLLS) $(UI_CCL_MANIFESTS) $(UI_JS_CCL) $(shell find pkg/ui/ccl -type f)
pkg/ui/distoss/bindata.go: $(UI_OSS_DLLS) $(UI_OSS_MANIFESTS) $(UI_JS_OSS)
pkg/ui/dist%/bindata.go: pkg/ui/webpack.app.js $(shell find pkg/ui/src pkg/ui/styl -type f) | bin/.bootstrap
find pkg/ui/dist$* -mindepth 1 -not -name dist$*.go -delete
set -e; shopt -s extglob; for dll in $(notdir $(filter %.dll.js,$^)); do \
ln -s ../dist/$$dll pkg/ui/dist$*/$${dll/@(.ccl|.oss)}; \
done
$(NODE_RUN) -C pkg/ui $(WEBPACK) --config webpack.app.js --env.dist=$*
go-bindata -pkg dist$* -o $@ -prefix pkg/ui/dist$* pkg/ui/dist$*/...
echo 'func init() { ui.Asset = Asset; ui.AssetDir = AssetDir; ui.AssetInfo = AssetInfo }' >> $@
gofmt -s -w $@
goimports -w $@
出錯指令
node ./node_modules/.bin/webpack --config webpack.app.js --env.dist=ccl
手工執行
cd pkg/ui
node --max-old-space-size=4096 ./node_modules/.bin/webpack --config webpack.app.js --env.dist=ccl
重新編譯
cd /media/lynn/disk_d/codes/database/cockroach/src/github.com/cockroachdb/cockroach
make -j4 build
2) GoLand Debug時報錯
GOROOT=/usr/lib/go-1.15 #gosetup
GOPATH=/media/lynn/disk_d/codes/database/cockroach:/home/lynn/go #gosetup
/usr/lib/go-1.15/bin/go build -o /tmp/___cockroach -gcflags "all=-N -l" github.com/cockroachdb/cockroach/pkg/cmd/cockroach #gosetup
/opt/GoLand-2019.2.3/plugins/go/lib/dlv/linux/dlv --listen=localhost:45269 --headless=true --api-version=2 exec /tmp/___cockroach -- start-single-node --insecure --store=/tmp/crdb --listen-addr=localhost #gosetup
API server listening at: 127.0.0.1:45269
Version of Delve is too old for this version of Go (maximum supported version 1.13, suppress this error with --check-go-version=false)
解決辦法
# 下載最新版本dlv
export GOPATH=/media/lynn/disk_d/codes/database/cockroach
go get -u github.com/go-delve/delve/cmd/dlv
# 查找dlv所在位置
lynn@lynn-ubuntu:/opt/GoLand-2019.2.3/plugins/go/lib/dlv/linux$ echo `go env | grep GOPATH | cut -d "\"" -f 2`/bin/dlv
/media/lynn/disk_d/codes/database/cockroach/bin/dlv
#查看版本
lynn@lynn-ubuntu:/opt/GoLand-2019.2.3/plugins/go/lib/dlv/linux$ /media/lynn/disk_d/codes/database/cockroach/bin/dlv version
Delve Debugger
Version: 1.5.1
Build: $Id: bca418ea7ae2a4dcda985e623625da727d4525b5 $
lynn@lynn-ubuntu:/opt/GoLand-2019.2.3/plugins/go/lib/dlv/linux$ /opt/GoLand-2019.2.3/plugins/go/lib/dlv/linux/dlv version
Delve Debugger
Version: 1.3.0
Build: a82e6d69875ed11a0bb3b80d15efba4b4722106e
設置GoLand
在 GoLand 中 Help -> Edit Custom Properties(之前沒編輯過會提示新建)
新增一項 dlv.path={你複製的路徑},比如我的:
dlv.path=/media/lynn/disk_d/codes/database/cockroach/bin/dlv
重新啓動GoLand,即可解決該問題