Step4-buildroot处理
在完成组件编译后,如何将产物标准化迁移到打包目录,成为 RPM/DEB 集成链路的关键一环。只有严格按照 buildroot
的要求归集文件,才能保证后续打包工具(如 dpkg-deb
、debhelper
)能够正确识别、打包出标准的 Linux 发行件。
为什么要处理 buildroot?
- 隔离编译与打包:编译目录通常包含临时文件、测试文件等杂项,直接用于打包极易引入冗余或脏数据。
- 标准化路径结构:不同组件、不同平台对文件路径有严格要求。例如
bin
、lib
、etc
、man
、doc
必须落在固定目录,否则会导致服务启动或包安装异常。 - 后续运维友好:标准的目录结构方便自动化部署、升级、运维等后续工作。
# 归集流程概览
以下为 Redis 在 bigtop-packages/src/common/redis
下典型的归集操作步骤:
步骤 | 说明 |
---|---|
1. 创建脚本 | 编写 install_redis.sh ,定义迁移与整理逻辑 |
2. 目录初始化 | 按 Debian/Ubuntu 规范创建 usr/bin 、usr/lib 、etc/redis 、usr/share/doc 、usr/share/man 、lib/systemd/system 、var/{log,lib}/redis 等目录 |
3. 产物拷贝 | 将编译产物、配置文件、文档等拷贝进 buildroot;同时做 strip、权限与 shebang 规范化 |
4. 链接优化 | 创建软链接、剔除冗余、保证路径兼容(如 /usr/bin/redis-cli 指向统一落盘点) |
5. 元信息补全 | 写入 README.Debian 、示例配置、postinst/prerm (若走 debhelper 则放 debian/ 目录下) |
# install_redis.sh 脚本内容
redhat和debian融合写法
# 目录结构效果示意
迁移完成后,整个 buildroot 下 Redis 的组织结构类似如下:
特别注意
这个是Ubuntu环境,编译的目录和redhat有区别。这个编译目录在output/组件名称/组件名称-bigtop版本-组件版本
(base) root@ubuntu22:/opt/modules/bigtop/output/redis/redis-3-2-0-7.4.0# tree -d
.
|-- debian
| `-- source
|-- deps
| |-- fpconv
| |-- hdr_histogram
| |-- hiredis
| | |-- adapters
| | |-- examples
| | `-- fuzzing
| |-- jemalloc
| | |-- bin
| | |-- build-aux
| | |-- doc
| | |-- doc_internal
| | |-- include
| | | |-- jemalloc
| | | | `-- internal
| | | `-- msvc_compat
| | | `-- C99
| | |-- m4
| | |-- msvc
| | | |-- projects
| | | | |-- vc2015
| | | | | |-- jemalloc
| | | | | `-- test_threads
| | | | `-- vc2017
| | | | |-- jemalloc
| | | | `-- test_threads
| | | `-- test_threads
| | |-- scripts
| | | |-- freebsd
| | | |-- linux
| | | `-- windows
| | |-- src
| | `-- test
| | |-- analyze
| | |-- include
| | | `-- test
| | |-- integration
| | | `-- cpp
| | |-- src
| | |-- stress
| | `-- unit
| |-- linenoise
| `-- lua
| |-- doc
| |-- etc
| |-- src
| `-- test
|-- src
| |-- commands
| `-- modules
|-- tests
| |-- assets
| |-- cluster
| | |-- tests
| | | |-- helpers
| | | `-- includes
| | `-- tmp
| |-- helpers
| |-- integration
| |-- modules
| |-- sentinel
| | |-- tests
| | | |-- helpers
| | | `-- includes
| | `-- tmp
| |-- support
| |-- tmp
| `-- unit
| |-- cluster
| |-- moduleapi
| `-- type
`-- utils
|-- create-cluster
|-- graphs
| `-- commits-over-time
|-- hyperloglog
|-- lru
|-- releasetools
|-- req-res-validator
`-- srandmember
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
后续补充说明
本节暂不详细解读 install_redis.sh 脚本的具体实现逻辑。 原因很简单: 当前阶段直接讲解脚本内容会让人“一头雾水”,容易陷入细节,而忽略整体流程。后续章节将专门展开讲解,结合实际打包过程、RPM 结构,以及与 SPEC 脚本的集成场景来逐步拆解。 请关注后续补充章节:
- 01
- [/metrics/aggregated] — 聚合数据范围 检查点09-19
- 02
- [/metrics] — 反向分析接口参数 请求抓包09-17
- 03
- [/metrics] — 普通指标写入方法 POST09-17