如何在没有代理的情况下编译 tidb server

这里主要介绍 tidb server 的编译, ti kv 和 ti pd 的编译不在本文范围内;

go 语言 1.11 版本之后支持 go.mod,  依赖包在 go.mod 里生成, 如果 go.mod 中某个依赖包在 golang.org 上, 下载和编译依赖包会出错,因为 go 语言的官网 golang.org 在大陆无法访问, 我们可以用 replace 语法来替换依赖包的路径, 手工修改 go.mod 文件, 用 github 上的镜像代替;

例如:

require (

    ......

    golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e

    ......

replace (

    golang.org/x/net => github.com/golang/net v0.0.0-20190108225652-1e06a53dbb7e

)

红色部分是依赖包的版本号, 需要和 require 里面的包版本号一致;

 

假设我们的 tidb server 的代码在 $GOPATH/xxx/github.com/pingcap/tidb/ 目录;

用 notepad++ 打开 $GOPATH/xxx/github.com/pingcap/tidb/  下的 go.mod, 在后面直接添加:

replace (

    go.uber.org/atomic v1.3.2 => github.com/uber-go/atomic v1.3.2

    go.uber.org/zap v1.9.1 => github.com/uber-go/zap  v1.9.1

    golang.org/x/net => github.com/golang/net v0.0.0-20190108225652-1e06a53dbb7e

    golang.org/x/sys => github.com/golang/sys v0.0.0-20190109145017-48ac38b7c8cb

    golang.org/x/text => github.com/golang/text v0.3.0

    golang.org/x/time => github.com/golang/time v0.0.0-20190308202827-9d24e82272b4

    golang.org/x/tools => github.com/golang/tools v0.0.0-20190130214255-bb1329dc71a0

    golang.org/x/lint => github.com/golang/lint v0.0.0-20181026193005-c67002cb31c3

    golang.org/x/sync => github.com/golang/sync v0.0.0-20181221193216-37e7f081c4d4

    golang.org/x/oauth2 => github.com/golang/oauth2 v0.0.0-20180821212333-d2e6202438be

    golang.org/x/crypto => github.com/golang/crypto v0.0.0-20180904163835-0709b304e793

    google.golang.org/genproto => github.com/google/go-genproto v0.0.0-20190108161440-ae2f86662275

    google.golang.org/grpc => github.com/grpc/grpc-go v1.17.0

    google.golang.org/appengine => github.com/golang/appengine v1.1.0

    cloud.google.com/go => github.com/googleapis/google-cloud-go v0.26.0

)

添加之后执行 make, 成功;

启动一个 tidb-server:

用 mysql 客户端连接一下:

 

OK

我环境里的 go 语言版本是 1.12;  系统是 centos;

 

posted on 2019-05-19 18:46  聆听风琴的巴赫  阅读(468)  评论(0编辑  收藏  举报

导航