Step5-Debian下构造-rules核心代码
# 1. 文件位置与角色
在 Debian 打包目录中,rules
文件位于:
bigtop-packages/src/deb/redis/rules
1
2
3
2
3
它的作用类似于 Makefile,由 debhelper
工具链驱动,控制了整个打包生命周期:
- 构建阶段 →
override_dh_auto_build
- 安装阶段 →
override_dh_auto_install
- 裁剪阶段 →
override_dh_strip
- 清理阶段 →
override_dh_auto_clean
- 测试阶段 →
override_dh_auto_test
对比理解
- RPM 体系:核心是
.spec
文件。 - DEB 体系:核心是
rules
文件。
两者都是“打包驱动脚本”,只是语法不同。
# 2. 核心内容示例
下面给出 Redis 的 rules
文件精简版:
#!/usr/bin/make -f
export DH_VERBOSE=1
export DH_OPTIONS
%:
dh $@
# === 源码构建 ===
override_dh_auto_build:
env \
REDIS_VERSION=$(component_base_version) \
NEXUS_URL=$(nexus_url) \
NEXUS_USERNAME=$(nexus_username) \
NEXUS_PASSWORD=$(nexus_password) \
bash debian/do-component-build
# === 安装产物 ===
override_dh_auto_install:
env REDIS_VERSION=$(component_base_version) \
bash debian/install_$(pkg_original_name).sh \
--bin-dir=$(bin_dir) \
--etc-dir=$(etc_dir) \
--var-dir=$(var_dir) \
--doc-dir=$(doc_dir)/$(pkg_original_name)-$(component_base_version) \
--lib-dir=$(lib_dir)
# === 关闭调试符号包 ===
override_dh_strip:
dh_strip --no-automatic-dbgsym
# === 保留空钩子,防止出错 ===
override_dh_shlibdeps:
override_dh_strip_nondeterminism:
# === 清理与测试禁用 ===
override_dh_auto_clean:
@echo "clean disabled"
override_dh_auto_test:
@echo "skip auto test"
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
28
29
30
31
32
33
34
35
36
37
38
39
40
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
28
29
30
31
32
33
34
35
36
37
38
39
40
# 3. 逐段解读
# 3.1 override_dh_auto_build
- 调用
do-component-build
脚本 - 真正触发 Redis 源码编译
- 环境变量如
REDIS_VERSION
、NEXUS_URL
可灵活适配企业仓库
类似于 RPM 体系里的
%build
阶段。
# 3.2 override_dh_auto_install
- 调用
install_redis.sh
- 将编译产物复制到 debian/tmp 对应目录下
- 包括
/usr/bin
、/etc/redis
、/usr/lib/redis
等
类似于 RPM
%install
阶段,最终决定 deb 包内部的文件布局。
# 3.3 其他钩子
- strip:关闭
.dbgsym
,避免额外生成调试包 - shlibdeps/strip_nondeterminism:保持空实现,避免引入复杂依赖
- clean/test:禁用,减少编译耗时
注意
如果在生产环境开启 auto_clean
,每次构建都会清理缓存目录,
对大项目(如 Hadoop)来说会非常耗时。
在 Redis 这种场景下,建议 禁用,只在必要时手动执行清理。
# 4. 执行顺序与生命周期
Debian 打包时的典型调用链如下:
dh clean
→ 调用override_dh_auto_clean
dh build
→ 调用override_dh_auto_build
dh install
→ 调用override_dh_auto_install
dh strip
→ 调用override_dh_strip
dh binary
→ 打包.deb
对照 RPM 的 %prep → %build → %install → %files
,基本可以一一映射。
# 5. Redis 打包链回顾
至此,Redis 的 Step5 系列文件 全部构建完成:
compat
→ 兼容级别control
→ 包元数据copyright
→ 版权说明dirs
→ 目录结构install
→ 文件映射pre/post inst|rm
→ 生命周期脚本rules
→ 构建/安装驱动
- 01
- [/metrics/aggregated] — 聚合数据范围 检查点09-19
- 02
- [/metrics] — 反向分析接口参数 请求抓包09-17
- 03
- [/metrics] — 普通指标写入方法 POST09-17