写点什么

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

  • 2022 年 7 月 11 日
  • 本文字数:2429 字

    阅读完需:约 8 分钟

原文来源:https://tidb.net/blog/7e4c77a0


这里对 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 住很长时间不动,如下:



这很可能是 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-1164296440000014.o: unrecognized relocation (0x2a) in section `.text’


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


collect2: error: ld returned 1 exit status



这是因为 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 版本


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
在CentOS7上进行TiDB/PD/TIKV编译分享_实践案例_TiDB 社区干货传送门_InfoQ写作社区