[O] Impala 版本适配改造(三)
# 背景与目的
随着大数据平台 CI/CD 自动化水平提升,Impala 及其依赖经常运行于各类容器环境(如 Docker)。 准确检测当前运行环境是否为 Docker,对于后续路径、权限、依赖初始化等行为判定极为关键。如果判断失误,容易导致构建脚本出现意外行为或权限问题。
提示
容器化部署已成为主流,脚本级 Docker 环境自适应能力直接影响整体平台的可移植性与工程健壮性。
# 主要改造点与工程思路
# 1. Docker 检测方法更健壮
旧写法: 只依赖于
grep docker /proc/1/cgroup
,在某些主机、精简容器或自定义 cgroup 场景下可能检测不到,误判概率高。新写法: 采用多方法并联检测:
- 检查
/proc/1/cgroup
是否包含 docker 关键词 - 检查根目录下是否有
/.dockerenv
文件(很多容器平台会自动注入) - 额外检测
/proc/self/cgroup
,防止部分环境下主 cgroup 路径不可读
- 检查
极大提升容器内环境检测的准确率,无惧平台或 Docker 版本变动多重判定。
# 2. 可维护性与可扩展性提升
- 新增所有判定方法均可单独扩展,后续如需兼容 Podman、LXC 或其他容器运行时,只需补充判定分支,无需大幅重构主逻辑。
- 检测逻辑内聚且易读,便于团队其他同事理解和维护。
笔记
脚本安全和健壮性的提升,让 CI/CD、开发测试、生产运维三端都能用同一套构建体系,减少环境分裂和调试歧义。
完整 diff 如下:
Subject: [PATCH] fixed: docker checked
---
Index: bin/bootstrap_system.sh
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/bin/bootstrap_system.sh b/bin/bootstrap_system.sh
--- a/bin/bootstrap_system.sh (revision fd57ec623193968cba765305448ea07cd7e97e20)
+++ b/bin/bootstrap_system.sh (date 1749625395791)
@@ -128,9 +128,12 @@
exit 1
fi
fi
-if grep docker /proc/1/cgroup; then
- IN_DOCKER=true
- echo "Identified we are running inside of Docker."
+# 多方法检测Docker环境
+if grep -q docker /proc/1/cgroup || [ -f /.dockerenv ] || \
+ { [[ -f /proc/self/cgroup ]] && grep -q docker /proc/self/cgroup; }
+then
+ IN_DOCKER=true
+ echo "Identified we are running inside of Docker."
fi
# Helper function to execute following command only on Ubuntu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
- 01
- bigtop-select 打包缺 compat 报错修复 deb07-16
- 02
- bigtop-select 打包缺 control 文件报错修复 deb07-16
- 03
- 首次编译-环境初始化 必装07-16