Step7-spec指令解读[二]%build
本节重点分析 spec 文件 %build
阶段的实际动作。无论是 Redis 这类 C 组件,还是 Spark/HBase 这类 Java
组件,大数据分发平台都用一套通用机制来组织依赖注入、脚本调度和版本一致性。
# 1. %build 阶段主流程
进入 %build
阶段,rpmbuild 首先会切换到 BUILD 目录下的源码根目录,然后
通过环境变量调用统一的 do-component-build 脚本:
env COMPONENT_VERSION=7.4.0 bash /opt/modules/bigtop/build/redis/rpm/SOURCES/do-component-build
1
这一步是 Bigtop 自动化链路的关键节点:
- 通过环境变量传递当前组件主版本号
- 始终走平台预置的编译脚本,保证各类大数据组件构建“口径一致”
# 2. 构建阶段可视化与流程梳理
# 流程图一览
流程要点:
- 切换到 BUILD 目录(如
redis-7.4.0
) - 调用 do-component-build
- 内部进行权限修正、环境注入(如 bigtop.bom),然后再触发 make
# 3. bigtop.bom 的作用与特点
# 为什么每个组件都 source bigtop.bom?
- bigtop.bom 文件是大数据平台 全局依赖版本的统一入口,本质上是 shell 变量声明,每一行都是
XXX_VERSION=xxx
- 对于 Java 体系、依赖丰富的组件(如 Hadoop、Hive、Spark),这些变量决定了实际构建时调用的依赖包版本
- 对于 redis 这类独立组件,bigtop.bom 主要是为了平台一致性和自动化流程,实际用到的变量有限,但还是会统一注入
- 这样一来,不论是 Java build 还是 C/C++ build,所有组件都能拿到一样的依赖环境(即便部分变量未用)
# 4. 日志还原与实际编译
下面是本地构建完整日志的片段,直观展现 %build
阶段发生的每一步:
07:45:49.607 [ERROR] [system.err] + STATUS=0
07:45:49.607 [ERROR] [system.err] + '[' 0 -ne 0 ']'
07:45:49.607 [ERROR] [system.err] + cd redis-7.4.0
07:45:49.607 [ERROR] [system.err] + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
07:45:49.615 [ERROR] [system.err] + exit 0
07:45:49.618 [QUIET] [system.out] Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.CuH2S5
07:45:49.620 [ERROR] [system.err] + umask 022
07:45:49.620 [ERROR] [system.err] + cd /opt/modules/bigtop/build/redis/rpm//BUILD
07:45:49.620 [ERROR] [system.err] + cd redis-7.4.0
07:45:49.620 [ERROR] [system.err] + env COMPONENT_VERSION=7.4.0 bash /opt/modules/bigtop/build/redis/rpm/SOURCES/do-component-build
07:45:49.624 [ERROR] [system.err] ++ dirname /opt/modules/bigtop/build/redis/rpm/SOURCES/do-component-build
07:45:49.625 [ERROR] [system.err] + . /opt/modules/bigtop/build/redis/rpm/SOURCES/bigtop.bom
07:45:49.625 [ERROR] [system.err] ++ ZOOKEEPER_VERSION=3.5.9
07:45:49.625 [ERROR] [system.err] ++ HADOOP_VERSION=3.3.4
07:45:49.625 [ERROR] [system.err] ++ HBASE_VERSION=2.4.13
07:45:49.625 [ERROR] [system.err] ++ HIVE_VERSION=3.1.3
07:45:49.625 [ERROR] [system.err] ++ TEZ_VERSION=0.10.1
07:45:49.625 [ERROR] [system.err] ++ OOZIE_VERSION=5.2.1
07:45:49.625 [ERROR] [system.err] ++ SOLR_VERSION=8.11.2
07:45:49.625 [ERROR] [system.err] ++ SPARK_VERSION=3.5.5
07:45:49.625 [ERROR] [system.err] ++ FLINK_VERSION=1.17.2
07:45:49.625 [ERROR] [system.err] ++ PHOENIX_VERSION=5.1.2
07:45:49.625 [ERROR] [system.err] ++ BIGTOP_GROOVY_VERSION=2.5.4
07:45:49.625 [ERROR] [system.err] ++ BIGTOP_UTILS_VERSION=3.2.0-SNAPSHOT
07:45:49.625 [ERROR] [system.err] ++ BIGTOP_SELECT_VERSION=3.2.0-SNAPSHOT
07:45:49.625 [ERROR] [system.err] ++ BIGTOP_JSVC_VERSION=1.2.4
07:45:49.625 [ERROR] [system.err] ++ ALLUXIO_VERSION=2.8.0
07:45:49.625 [ERROR] [system.err] ++ KAFKA_VERSION=2.8.1
07:45:49.625 [ERROR] [system.err] ++ YCSB_VERSION=0.17.0
07:45:49.625 [ERROR] [system.err] ++ ZEPPELIN_VERSION=0.10.1
07:45:49.625 [ERROR] [system.err] ++ GPDB_VERSION=5.28.5
07:45:49.625 [ERROR] [system.err] ++ AMBARI_VERSION=2.7.5
07:45:49.625 [ERROR] [system.err] ++ BIGTOP_AMBARI_MPACK_VERSION=2.7.5
07:45:49.625 [ERROR] [system.err] ++ LIVY_VERSION=0.7.1
07:45:49.625 [ERROR] [system.err] ++ RANGER_VERSION=2.4.0
07:45:49.625 [ERROR] [system.err] ++ SQOOP_VERSION=1.4.7
07:45:49.625 [ERROR] [system.err] ++ REDIS_VERSION=7.4.0
07:45:49.625 [ERROR] [system.err] ++ DOLPHINSCHEDULER_VERSION=3.2.2
07:45:49.625 [ERROR] [system.err] ++ DORIS_VERSION=2.1.7
07:45:49.625 [ERROR] [system.err] ++ NIGHTINGALE_VERSION=7.7.2
07:45:49.625 [ERROR] [system.err] ++ CATEGRAF_VERSION=0.4.1
07:45:49.625 [ERROR] [system.err] ++ VICTORIAMETRICS_VERSION=1.109.1
07:45:49.625 [ERROR] [system.err] ++ CLOUDBEAVER_VERSION=25.1.0
07:45:49.625 [ERROR] [system.err] ++ CELEBORN_VERSION=0.5.3
07:45:49.625 [ERROR] [system.err] ++ OZONE_VERSION=1.4.1
07:45:49.625 [ERROR] [system.err] ++ IMPALA_VERSION=4.4.1
07:45:49.625 [ERROR] [system.err] ++ TRINO_VERSION=474
07:45:49.625 [ERROR] [system.err] ++ HUDI_VERSION=1.0.1
07:45:49.625 [ERROR] [system.err] ++ PAIMON_VERSION=1.1.0
07:45:49.625 [ERROR] [system.err] ++ ATLAS_VERSION=2.4.0
07:45:49.625 [ERROR] [system.err] ++ SUPERSET_VERSION=4.1.2
07:45:49.625 [ERROR] [system.err] ++ JDK_VERSION=1.8
07:45:49.626 [ERROR] [system.err] ++ SCALA_VERSION=2.12.13
07:45:49.626 [ERROR] [system.err] + make
07:45:49.627 [QUIET] [system.out] cd src && make all
07:45:49.628 [QUIET] [system.out] make[1]: Entering directory '/opt/modules/bigtop/build/redis/rpm/BUILD/redis-7.4.0/src'
07:45:49.677 [ERROR] [system.err] CC Makefile.dep
07:45:50.959 [QUIET] [system.out] rm -rf redis-server redis-sentinel redis-cli redis-benchmark redis-check-rdb redis-check-aof *.o *.gcda *.gcno *.gcov redis.info lcov-html
Makefile.dep *.so
07:45:50.962 [QUIET] [system.out] rm -f threads_mngr.d adlist.d quicklist.d ae.d anet.d dict.d ebuckets.d mstr.d kvstore.d server.d sds.d zmalloc.d lzf_c.d lzf_d.d pqsort.d
zipmap.d sha1.d ziplist.d release.d networking.d util.d object.d db.d replication.d rdb.d t_string.d t_list.d t_set.d t_zset.d t_hash.d config.d aof.d pubsub.d multi.d debug
.d sort.d intset.d syncio.d cluster.d cluster_legacy.d crc16.d endianconv.d slowlog.d eval.d bio.d rio.d rand.d memtest.d syscheck.d crcspeed.d crc64.d bitops.d sentinel.d n
otify.d setproctitle.d blocked.d hyperloglog.d latency.d sparkline.d redis-check-rdb.d redis-check-aof.d geo.d lazyfree.d module.d evict.d expire.d geohash.d geohash_helper.
d childinfo.d defrag.d siphash.d rax.d t_stream.d listpack.d localtime.d lolwut.d lolwut5.d lolwut6.d acl.d tracking.d socket.d tls.d sha256.d timeout.d setcpuaffinity.d mon
otonic.d mt19937-64.d resp_parser.d call_reply.d script_lua.d script.d functions.d function_lua.d commands.d strl.d connection.d unix.d logreqres.d anet.d adlist.d dict.d re
dis-cli.d zmalloc.d release.d ae.d redisassert.d crcspeed.d crc64.d siphash.d crc16.d monotonic.d cli_common.d mt19937-64.d strl.d cli_commands.d ae.d anet.d redis-benchmark
.d adlist.d dict.d zmalloc.d redisassert.d release.d crcspeed.d crc64.d siphash.d crc16.d monotonic.d cli_common.d mt19937-64.d strl.d
07:45:50.964 [QUIET] [system.out] (cd ../deps && make distclean)
07:45:50.965 [QUIET] [system.out] make[2]: Entering directory '/opt/modules/bigtop/build/redis/rpm/BUILD/redis-7.4.0/deps'
07:45:50.970 [QUIET] [system.out] (cd hiredis && make clean) > /dev/null || true
07:45:50.979 [QUIET] [system.out] (cd linenoise && make clean) > /dev/null || true
07:45:50.986 [QUIET] [system.out] (cd lua && make clean) > /dev/null || true
07:45:50.995 [QUIET] [system.o
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
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
流程说明:
- 切换工作目录并修正权限(常见于 rpm 构建流程,防止 umask 问题)
- 调用
do-component-build
,先加载 bigtop.bom 变量 - redis 场景下,实际上只会用 COMPONENT_VERSION 和 make
- 依赖目录、子模块一并清理(make clean),后续的 install、归档都建立在此结果上
- 01
- bigtop-select 打包缺 compat 报错修复 deb07-16
- 02
- bigtop-select 打包缺 control 文件报错修复 deb07-16
- 03
- 首次编译-环境初始化 必装07-16