[O] Doris 版本适配改造(二)
# 1. 背景与目标
在 Doris 官方的 build.sh
构建流程中,默认会通过 update_submodule
自动从 github 拉取 apache-orc
、clucene
等第三方子包。看似省事,但实际有如下致命隐患:
警告
第三方子包的 HEAD 或分支内容经常变更,随时间推移,同一份构建脚本每次拉取到的内容可能都不同,最终导致编译结果不可重现!
# 2. 关键 diff 与实现
本次 patch 的主要变更点非常直接:
- update_submodule "be/src/apache-orc" "apache-orc" "https://ghgo.xyz/https://github.com/apache/doris-thirdparty/archive/refs/heads/orc.tar.gz"
- update_submodule "be/src/clucene" "clucene" "https://ghgo.xyz/https://github.com/apache/doris-thirdparty/archive/refs/heads/clucene.tar.gz"
+# update_submodule "be/src/apache-orc" "apache-orc" "https://ghgo.xyz/https://github.com/apache/doris-thirdparty/archive/refs/heads/orc.tar.gz"
+# update_submodule "be/src/clucene" "clucene" "https://ghgo.xyz/https://github.com/apache/doris-thirdparty/archive/refs/heads/clucene.tar.gz"
1
2
3
4
2
3
4
即,直接注释掉了 update_submodule 相关自动下载逻辑,彻底杜绝第三方包内容漂移带来的风险。 但带来编译一致性的大幅提升。
# 3. 为什么要禁用自动拉包?
问题现象 | 原因分析 | 风险等级 |
---|---|---|
子包内容变化,导致二次编译出包内容不同 | github 分支或 tag 可随时被重写 | 高 |
某些第三方包被删除,导致编译中断 | 官方并未保障老分支包的永久可用性 | 高 |
CI/CD 自动化跑不通/环境不稳定 | 网络或镜像加速依赖仍有不确定性 | 中 |
注意
自动拉包机制在开源环境下从来不是可重现构建的保障方案。生产环境务必手动下载、固化依赖内容!
# 4. 推荐第三方依赖管理方案
建议采用手动或平台固化的方式管理 thirdparty 依赖包,具体做法如下:
- 统一下载所有 thirdparty 包,版本内容由研发或运维团队自控;
- 放置到本地/私有对象存储/Nexus/YUM 仓库等目录,并对外暴露只读链接;
- 所有构建脚本统一指向该固化目录,不再依赖网络和外部源内容漂移;
- 如需升级第三方包,严格通过审批/变更,保障每一次构建可溯源。
# 常见 thirdparty 目录结构示例
thirdparty/
├── apache-orc-xxx.tar.gz
├── clucene-xxx.tar.gz
├── ...
1
2
3
4
2
3
4
若需本地一键初始化 thirdparty 目录,可结合自定义 shell 脚本实现,详见本站其他组件离线包方案。
# 5. 编译流程变化与使用说明
禁用自动拉包后,首次构建时如遇包缺失,需手动提前下载好对应 tar.gz 放入目标目录,否则会提示找不到依赖。
提示
这样虽然首次维护成本略有提升,但每一次的 Doris 编译结果都可以做到完全可控、可重现!强一致性
# 6. 固定依赖包资源说明
目前,Doris 编译所需的 所有 thirdparty 依赖包我们已全部提前下载并在本地固化管理,确保每次构建环境完全一致。
笔记
如需获取同款可用的 thirdparty 固定依赖包,或希望复现文中构建环境,欢迎联系作者。环境包分享 我们可根据需求协助提供内部归档包或自助初始化脚本,助你一键还原生产环境。
作者联系方式见首页
# 7. 完整 diff 见下方:
Subject: [PATCH] optimized: 不使用 doris 的 下载子包,因为子包会变
---
Index: build.sh
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build.sh b/build.sh
--- a/build.sh (revision 37f5d3ec9fb2933345c4411d9a581c84062f3de6)
+++ b/build.sh (date 1736594835875)
@@ -501,8 +501,8 @@
# Clean and build Backend
if [[ "${BUILD_BE}" -eq 1 ]]; then
- update_submodule "be/src/apache-orc" "apache-orc" "https://ghgo.xyz/https://github.com/apache/doris-thirdparty/archive/refs/heads/orc.tar.gz"
- update_submodule "be/src/clucene" "clucene" "https://ghgo.xyz/https://github.com/apache/doris-thirdparty/archive/refs/heads/clucene.tar.gz"
+# update_submodule "be/src/apache-orc" "apache-orc" "https://ghgo.xyz/https://github.com/apache/doris-thirdparty/archive/refs/heads/orc.tar.gz"
+# update_submodule "be/src/clucene" "clucene" "https://ghgo.xyz/https://github.com/apache/doris-thirdparty/archive/refs/heads/clucene.tar.gz"
if [[ -e "${DORIS_HOME}/gensrc/build/gen_cpp/version.h" ]]; then
rm -f "${DORIS_HOME}/gensrc/build/gen_cpp/version.h"
fi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- 01
- bigtop-select 打包缺 compat 报错修复 deb07-16
- 02
- bigtop-select 打包缺 control 文件报错修复 deb07-16
- 03
- 首次编译-环境初始化 必装07-16