cockroach(v20.2)源碼編譯

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,即可解決該問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章