1
2
2
0
专栏/.../

在CentOS7上进行TiDB/PD/TIKV编译分享

 yifan  发表于  2022-01-25

这里对TiDB的编译过程中的几个小点进行分享。虽然理论上讲,从github上下载的源码解压后就能实现编译,但实际操作过程中,由于各种各样的原因,还是有可能出错,本文对实操过程中的几个问题及解决方案进行分享。

本文用的环境是CentOS 7.4

1. 环境准备

(1)golang编译环境

golang的编译环境,很多文章上都建议直接用yum安装,如下:

yum install golang -y

这样是可以的,但是要注意所安装golang的版本,跟所配置的yum源有关,一般情况下,不是最新版本,作者采用该方法安装的go版本是1.15.14,该版本不能正常编译当前用”git clone https://github.com/pingcap/tidb.git”下载的TiDB版本,可以用于自行在github上下载解压的早期版本,如5.0。编译用用”git clone https://github.com/pingcap/tidb.git”下载的TiDB版本,需要golang版本1.16以上,可以从golang官网上下载,本文用的1.17如下:

wget https://golang.google.cn/dl/go1.17.linux-amd64.tar.gz

然后直接解压放到待安装目录下:

tar -zxf go1.17.linux-amd64.tar.gz -C /usr/local

接着配置golang环境变量(在.bashrc或者.bash_profile中)如下:

export GOROOT=/usr/local/go

export GOBIN=$GOROOT/bin

export GOARCH=amd64

export GOOS=linux

export GOPATH=/opt/tidb

其中,GOPATH中下面准备TiDB源码下载存放与编译的位置

(2)Rust编译环境

Rust编译环境直接用网上其它文章所述即可,从中找到相应平台的nightly版本:

wget https://mirrors.ustc.edu.cn/rust-static/dist/rust-nightly-x86_64-unknown-linux-gnu.tar.gz && tar zxf rust-nightly-x86_64-unknown-linux-gnu.tar.gz

cd rust-nightly-x86_64-unknown-linux-gnu

./install.sh

然后配置Rust环境变量(在.bashrc或者.bash_profile中)如下:

export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static

export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup

然后应用环境变量

. ~/.bashrc

(3)硬盘空间

如果直接从github上clone TiDB、PD和TiKV进行编译,首先需要准备较大的磁盘空间,在编译过程中从github与google需要在线下载不少东西,最终总共需要占用约10GB以上的空间

2. 代码下载

先在上面设置的GOPATH下面,创建子目录:

Mkdir -p src/github.com/pingcap/

在此子目录下:

有两种方式

一是git clone:

git clone https://github.com/pingcap/tidb.git

git clone https://github.com/pingcap/pd.git

git clone https://github.com/pingcap/tikv.git

二是从github上选择,即自行下载适合的版本

3 .编译

(1)Tidb

简单来讲:

cd tidb

gmake

不过,有可能会遇到一些问题:

一是在main.go hang住很长时间不动,如下:

image

这很可能是github或者google连不通,如果可以试图设置GOPROXY来解决

export GOPROXY=https://goproxy.cn,direct

二是有时会出现:

command-line-arguments

/usr/local/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1

/usr/bin/ld: /tmp/go-link-1164296440/000014.o: unrecognized relocation (0x2a) in section `.text’

/usr/bin/ld: final link failed: Bad value

collect2: error: ld returned 1 exit status

image

这是因为ld的版本过低,需要升级一下,可以通过

yum install binutils

有时可能是

/usr/local/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1

…下的其它错,可以试下:

yum install glibc-static.x86_64 -y

如果同学无法连接google,则需要在go.mub后面增加replace

replace (

    cloud.google.com/go => github.com/google/go-cloud v0.4.1-0.20181112030950-0b43d4400e53

    go.uber.org/atomic => github.com/uber-go/atomic v1.3.3-0.20181018215023-8dc6146f7569

    go.uber.org/multierr => github.com/uber-go/multierr v1.1.1-0.20180122172545-ddea229ff1df

    go.uber.org/zap => github.com/uber-go/zap v1.9.2-0.20180814183419-67bc79d13d15

    golang.org/x/crypto => github.com/golang/crypto v0.0.0-20181106171534-e4dc69e5b2fd

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

    golang.org/x/net => github.com/golang/net v0.0.0-20181108082009-03003ca0c849

    golang.org/x/oauth2 => github.com/golang/oauth2 v0.0.0-20181106182150-f42d05182288

    golang.org/x/sync => github.com/golang/sync v0.0.0-20181108010431-42b317875d0f

    golang.org/x/sys => github.com/golang/sys v0.0.0-20181107165924-66b7b1311ac8

    golang.org/x/text => github.com/golang/text v0.3.1-0.20181030141323-6f44c5a2ea40

    golang.org/x/time => github.com/golang/time v0.0.0-20181108054448-85acf8d2951c

    golang.org/x/tools => github.com/golang/tools v0.0.0-20181111003725-6d71ab8aade0

    google.golang.org/api => github.com/google/google-api-go-client v0.0.0-20181108001712-cfbc873f6b93

    google.golang.org/appengine => github.com/golang/appengine v1.3.1-0.20181031002003-4a4468ece617

    google.golang.org/genproto => github.com/google/go-genproto v0.0.0-20181109154231-b5d43981345b

    google.golang.org/grpc => github.com/grpc/grpc-go v1.2.1-0.20181109233107-eb55fa50e6c9

    honnef.co/go/tools => github.com/dominikh/go-tools v0.0.0-20180920025451-e3ad64cb4ed3

)

如果v后面的版本显示不对,可以试着改成master

(2)Pd

cd pd

gmake

(3)Tikv

cd tikv

carge build

编译tikv的时间很长,另外,还有一个要特别注意的点:

目前编译git clone出来的新版本(2022年1月),需要GCC比较高的版本,CentOS7自带的4.8.5版本,在编译grcp(0.9.1)时会出现错误

所以需要自行升级gcc版本

1
2
2
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论