由于本人存在特殊情况需要在内网环境中去编译源码,期间遇到很多小坑,现在分享一下自己离线编译源码的步骤。之前的部署是通过obd部署的1-1-1架构。
由于Oceanbase编译的脚本需要联网下载相关依赖,那么如果有内网环境进行编译的需要的话可能会比较困难,现尝试一下在离线环境进行编译。资源环境如下
角色 | IP |
---|---|
中控机 | xxx.xxx.xxx.51 |
OBServer | xxx.xxx.xxx.52\xxx.xxx.xxx.53\xxx.xxx.xxx.54 |
OBProxy | xxx.xxx.xxx.51 |
ob版本:oceanbase master分支
Linux版本:Red Hat Enterprise Linux Server release 7.6 (Maipo)
内核:3.10.0-957.el7.x86_64
1、github上下载oceanbase源码zip包,拷贝至内网环境机器中控机,并解压至/tmp/oceanbase-master
2、通过可连接外网的操作系统下载所需要的包
yumdownloader git wget rpm* cpio make glibc-devel glibc-headers binutils m4 --resolve --destdir=/tmp/obym
3、将这些包通过优盘拷贝到内网环境机器中控机/tmp/obym,并在/tmp/obym中执行rpm安装指令
rpm -ivh --force --nodeps *.rpm
4、之后需要把 /tmp/oceanbase-master/src/sql/parser/ 中的 gen_parser.sh 和 gen_type_name.sh 的执行权限打开
cd src/sql/parser/
sudo chmod 744 gen_parser.sh
sudo chmod 744 gen_type_name.sh
5、将/tmp/oceanbase-master/deps/init/xxxxxxxx.deps(查看匹配自己操作系统环境的.deps文件)中涉及的依赖包准备好。
[target-default]
os=7
arch=x86_64
repo=http://mirrors.aliyun.com/oceanbase/development-kit/el/7/x86_64/
[target-community]
os=7
arch=x86_64
repo=http://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/
[deps]
devdeps-gtest-1.8.0-132022101316.el7.x86_64.rpm
devdeps-isa-l-static-2.22.0-22022092915.el7.x86_64.rpm
devdeps-libcurl-static-7.29.0-32022093010.el7.x86_64.rpm
devdeps-libunwind-static-1.6.2-222022100410.el7.x86_64.rpm
devdeps-mariadb-connector-c-3.1.12-12022100422.el7.x86_64.rpm
devdeps-libaio-0.3.112-12022092915.el7.x86_64.rpm
devdeps-relaxed-rapidjson-1.0.0-52023011719.el7.x86_64.rpm
devdeps-openssl-static-1.0.1e-12022100422.el7.x86_64.rpm
devdeps-libxml2-2.10.3-32022111420.el7.x86_64.rpm
devdeps-mxml-2.12.0-12022090616.el7.x86_64.rpm
devdeps-apr-1.6.5-32022090616.el7.x86_64.rpm
devdeps-xz-5.2.2-42022090615.el7.x86_64.rpm
devdeps-lua-5.4.3-92022090614.el7.x86_64.rpm
devdeps-oss-c-sdk-3.9.2-182022100412.el7.x86_64.rpm
devdeps-zlib-static-1.2.7-132022100815.el7.x86_64.rpm
devdeps-ncurses-static-6.2-72022100815.el7.x86_64.rpm
devdeps-boost-1.74.0-22022110914.el7.x86_64.rpm
devdeps-s2geometry-0.9.0-42022111116.el7.x86_64.rpm
devdeps-icu-69.1-72022112416.el7.x86_64.rpm
[tools]
obdevtools-binutils-2.30-12022100413.el7.x86_64.rpm
obdevtools-bison-2.4.1-12022100413.el7.x86_64.rpm
obdevtools-ccache-3.7.12-12022100417.el7.x86_64.rpm
obdevtools-cmake-3.22.1-22022100417.el7.x86_64.rpm
obdevtools-flex-2.5.35-12022100417.el7.x86_64.rpm
obdevtools-gcc9-9.3.0-52022092914.el7.x86_64.rpm
obdevtools-llvm-11.0.1-312022092921.el7.x86_64.rpm
[tools-deps]
devdeps-oblogmsg-1.0-52022113019.el7.x86_64.rpm
devdeps-rocksdb-6.22.1.1-52022100420.el7.x86_64.rpm
[test-utils]
ob-deploy-1.6.0-41.el7.x86_64.rpm target=community
obclient-2.0.2-3.el7.x86_64.rpm target=community
libobclient-2.0.2-2.el7.x86_64.rpm target=community
这些包的准备方法是先尝试编译,登录到可连接外网的机器上,执行如下命令。
bash build.sh debug --init --make
此次编译可能会失败也可能成功,这并不要紧,但是会发现deps/中多了deps/3rd/pkg,此时pkg文件夹中已经有了上述的依赖包,将这些依赖包拷贝到内网环境。
clean本次失败的编译
bash build.sh clean
在内网的机器上手动创建deps/3rd/pkg文件夹,将这些包拷贝到deps/3rd/pkg文件夹。
6、修改deps/init/dep_create.sh脚本,将rm -rf xxxxxx注释掉。因为这句会清空deps/3rd/pkg,就白拷贝了。同时修改function get_os_release() 方法使得编译通过,case中添加下段代码,因为默认不支持红帽,不添加代码会编译报错,但是可以让脚本认为rhel与centos有依赖关系即可通过校验。
rhel)
version_ge "7.6" && compat_centos7 && return
7、进入/tmp/oceanbase-master,执行编译。
debug mode
bash build.sh debug --init --make
release mode
bash build.sh release --init --make
8、通过obd停止集群
obd cluster stop xxxx
9、在中控机中编译出来的observer( build_debug(或者build_release)/src/observer )文件覆盖1-1-1集群中的每一个observer文件,该observer的路径如下(覆盖前请先做一个原observer文件的备份)。
/home/admin/.obd/repository/oceanbase-ce/4.1.0.0/xxxxxxxxx/bin/observer
10,回到中控机,重启集群。
obd cluster start xxxx
11、再次通过obclient登录,可见版本变化。
12、之后在修改源码后的编译就不需要build init 了,可通过下面命令进行编译.-j后边的参数可根据自己的cpu核数适当调整以加快编译速度。
bash build.sh debug --make -j 64