在 CentOS7 上进行 TiDB/PD/TIKV 编译分享
这里对 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-1164296440⁄000014.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 (
)
如果 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 版本
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/57f478987714a26db3c9f3633】。文章转载请联系作者。
评论