StarRocks BE源码编译、CLion高亮跳转方法

阅读SR BE源码时,很多类的引用位置爆红找不到,或无法跳转过去,而自己的Linux机器往往缺乏各种C++依赖库,配置安装比较麻烦,因此总体的思路是通过CLion远程连接SR社区已经安装完各种依赖库的Docker容器,进行编译和源码查看

一、社区Docker容器部署

首先需要在一台CentOS物理机上安装SR社区的Centos Docker容器(Ubuntu容器无法调用CentOS物理机的/usr/sbin/init脚本),安装新版Docker服务的方法参考:

centos7安装Docker详细步骤(无坑版教程)-腾讯云开发者社区-腾讯云在安装 Docker 之前,先说一下配置,我这里是Centos7 Linux 内核:官方建议 3.10 以上,3.8以上貌似也可。https://cloud.tencent.com/developer/article/1701451https://cloud.tencent.com/developer/article/1701451https://cloud.tencent.com/developer/article/1701451SR官方社区容器列表如下:

Compile StarRocks with Docker | StarRocksThis topic describes how to compile StarRocks using Docker.https://docs.starrocks.io/docs/developers/build-starrocks/Build_in_docker/https://docs.starrocks.io/docs/developers/build-starrocks/Build_in_docker/https://docs.starrocks.io/docs/developers/build-starrocks/Build_in_docker/安装好Docker服务后,执行命令:

bash 复制代码
docker pull starrocks/dev-env-centos7:latest

接着启动docker容器,安装SSH所需依赖:

bash 复制代码
docker run -itd -v /root/.m2:/root/.m2 -v /home/data/starrocks:/root/starrocks -v /home/data/.jdks/azul-11.0.25:/root/java -p 8022:22 -p 8030:8030 -p 8040
:8040 -p 9030:9030 -p 5005:5005 --name branch-3.3 -d --privileged=true  starrocks/dev-env-centos7:latest /usr/sbin/init

其中-v参数用于映射物理机上的源码与JDK存储目录到容器相应目录,-p参数用于映射暴露出未来会用来debug的容器端口,--privileged=true和/usr/sbin/init参数很关键,用于获得物理机的root用户与systemd权限,否则后面无法通过root进行SSH连接Docker容器。

启动Docker容器进程后,记得安装open-ssh-server,修改/etc/ssh/sshd_config,开启root用户登录

bash 复制代码
 docker exec -it branch-3.3 /bin/bash
 yum install -y openssh-server
 vim /etc/ssh/sshd_config

在sshd_config文件中,修改如下高亮内容:

接着修改容器root用户密码,启动SSH服务:

bash 复制代码
passwd root
systemctl restart ssh

最后对镜像容器进程进行docker commit,提交改动和开启ssh后的新镜像,便于下次重启容器:

bash 复制代码
# 查看已配置好的镜像进程号
docker ps
# 提交成新的镜像,方便以后重启容器而不重复安装ssh
docker commit de7db66d6a75 starrocks-dev-3.3

二、在容器中编译源码

C++依赖完善、具备SSH功能的CentOS Docker容器启动后,就需要在容器中编译SR源码了,先编译BE再编译FE:

bash 复制代码
# 进入容器中的SR源码根目录,映射了物理机的目录
cd /root/starrocks
# 开启存算分离模式的编译
BUILD_TYPE=Debug ./build.sh --be --enable-shared-data  --without-java-ext  -j12
./build.sh --fe  --enable-shared-data --without-java-ext 

其中BE C++编译会记忆上次进度百分比,如果不是自己改动源码的问题导致编译BE到一半报Error停止了,可以多执行几次BE的编译命令,会接着上次进度百分比继续编译。

编译完成后,部署包产出会在SR源码根目录的output子目录下。

三、使用CLion远程连接容器

编译好SR源码后,需将容器上完整编译后的gensrc/build等目录,下载回自己本机的对应源码目录gensrc下

接着在本机CLion上打开SR BE源码,在Settings的Toolchains菜单中配置远程SSH连接,目标是上述Docker容器进程:

然后在CMake菜单中选择刚才的Remote Debug环境进行连接,其中Build directory是容器中使用./build.sh编译后的结果目录,该目录会从容器自动同步回本机,默认就叫build_Debug

接着是配置环境变量,在CMake菜单中的Environment选项里,填写如下环境变量:

注意红框中的选项不要勾选 ,SR社区容器中已经编译好的thirdparty依赖库在容器的**/var/local/thirdparty**目录下。

最后在下面的Deployment菜单中,配置本机BE源码到容器BE源码的部署路径映射:

点击OK生效之后,CLion就会自动同步本机和远程容器上的源码编译结果,同步完成后,本机上BE源码的高亮跳转就可以生效了。

四、利用IDEA远程开发功能查看FE源码

FE源码可以在本机IDEA上编译和查看,但是先前CentOS物理机已经编译过一次FE,所以也可以利用IDEA的Remote Development功能,远程连接物理机上的FE项目进行查看:

这样可以节省本机上的磁盘空间,因为时间长了maven本地仓库容量会变得很大。

五、在容器中启动FE和BE测试

如果后面修改了源码,想进行Debug测试,可以用如下命令启动SR进程:

bash 复制代码
fe/bin/start_fe.sh --daemon
be/bin/start_cn.sh --daemon
相关推荐
爱笑的源码基地14 分钟前
云HIS系统源码,通过云原生部署和标准化接口,支持医保政策云同步及医共体建设
源码·云his·程序·代码·智慧医疗·医院管理信息系统·中小医院
前端小L1 小时前
专题三:完善响应式 —— readonly 与 isReactive
源码·vue3
前端小L1 天前
专题一:搭建测试驱动环境 (TypeScript + Vitest)
前端·javascript·typescript·源码·vue3
前端小L1 天前
专题二:核心机制 —— reactive 与 effect
javascript·源码·vue3
幽络源小助理2 天前
知宇发卡系统二开API代销系统开源版 – 支持代理审核与多商家对接
php·源码
luoluoal3 天前
基于python的语音和背景音乐分离算法及系统(源码+文档)
python·mysql·django·毕业设计·源码
luoluoal3 天前
基于python的英汉电子词典软件(源码+文档)
python·mysql·django·毕业设计·源码
luoluoal3 天前
基于python的旅游景点方面级别情感分析语料库与模型(源码+文档)
python·mysql·django·毕业设计·源码
leida_wt3 天前
新版llama.cpp在win7系统的移植与编译
编译·llama.cpp·win7
源码宝3 天前
SaaS诊所管理信息系统源码,云门诊系统源码,分布式前后端分离+Java+Vue2.0+SpringBoot+MySQL
java·源码·电子病历·电子处方·药品管理·门诊系统·诊所系统