Step6-Log-编译细节
我们的编译命令是:
gradle redis-rpm -PparentDir=/usr/bigtop -Dbuildwithdeps=true -PpkgSuffix
1
本节通过实际日志片段,详细还原和分析 Redis 在大数据集成环境下的编译链路与参数流转过程。
# 日志片段与流程梳理
提示
日志是理解复杂自动化编译流程最直接的“真相还原器”。本节建议对照自己的实际 build 输出一起看,效果更佳。
# 1. 解压源码、准备编译环境
+ cd /opt/modules/bigtop/build/redis/rpm//BUILD
+ cd /opt/modules/bigtop/build/redis/rpm/BUILD
+ rm -rf redis-7.4.0
+ /usr/bin/gzip -dc /opt/modules/bigtop/build/redis/rpm/SOURCES/7.4.0.tar.gz
+ /usr/bin/tar -xvvof -
1
2
3
4
5
2
3
4
5
- 进入
BUILD
目录,所有构建产物和中间文件都会落在这里。 - 先清理旧的
redis-7.4.0
源码目录,保证每次都是全新环境,防止遗留文件影响结果。 - 解压 tar.gz 源码包,展开所有原始文件。
笔记
很多初学者以为解压只是“解包”,但这一步其实是标准化构建入口,为所有后续动作打好目录和权限基础。
# 2. 权限处理
+ cd redis-7.4.0
+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
1
2
2
- 统一源码目录权限,适配各种用户和 CI 场景,避免后续因为权限问题导致构建中断。
- 这一点在多用户/自动化流水线环境下尤其重要。
提示
大数据 CI/CD 场景中经常因为权限导致莫名报错,强烈建议在 build 步骤加入这类强制修正。
# 3. 进入 build 阶段,脚本触发
+ env COMPONENT_VERSION=7.4.0 bash /opt/modules/bigtop/build/redis/rpm/SOURCES/do-component-build
1
- 这里通过环境变量方式传递 Redis 的版本号。
- 触发核心脚本
do-component-build
,实际控制整个源码的编译、依赖注入等后续环节。
笔记
Bigtop 的核心理念之一就是一切以参数驱动,版本传递、依赖切换都靠环境变量串起来,便于后续集成和运维自动化。
- 上图即为
%build
阶段的典型触发界面,说明变量和脚本已经在真实构建流程中联动起来。
# 4. 依赖变量注入机制
++ dirname /opt/modules/bigtop/build/redis/rpm/SOURCES/do-component-build
+ . /opt/modules/bigtop/build/redis/rpm/SOURCES/bigtop.bom
++ ZOOKEEPER_VERSION=3.5.9
++ HADOOP_VERSION=3.3.4
++ HBASE_VERSION=2.4.13
++ HIVE_VERSION=3.1.3
++ TEZ_VERSION=0.10.1
++ OOZIE_VERSION=5.2.1
++ SOLR_VERSION=8.11.2
++ SPARK_VERSION=3.5.5
++ FLINK_VERSION=1.17.2
++ PHOENIX_VERSION=5.1.2
++ BIGTOP_GROOVY_VERSION=2.5.4
++ BIGTOP_UTILS_VERSION=3.2.0-SNAPSHOT
++ BIGTOP_SELECT_VERSION=3.2.0-SNAPSHOT
++ BIGTOP_JSVC_VERSION=1.2.4
++ ALLUXIO_VERSION=2.8.0
++ KAFKA_VERSION=2.8.1
++ YCSB_VERSION=0.17.0
++ ZEPPELIN_VERSION=0.10.1
++ GPDB_VERSION=5.28.5
++ AMBARI_VERSION=2.7.5
++ BIGTOP_AMBARI_MPACK_VERSION=2.7.5
++ LIVY_VERSION=0.7.1
++ RANGER_VERSION=2.4.0
++ SQOOP_VERSION=1.4.7
++ REDIS_VERSION=7.4.0
++ DOLPHINSCHEDULER_VERSION=3.2.2
++ DORIS_VERSION=2.1.7
++ NIGHTINGALE_VERSION=7.7.2
++ CATEGRAF_VERSION=0.4.1
++ VICTORIAMETRICS_VERSION=1.109.1
++ CLOUDBEAVER_VERSION=25.1.0
++ CELEBORN_VERSION=0.5.3
++ OZONE_VERSION=1.4.1
++ IMPALA_VERSION=4.4.1
++ TRINO_VERSION=474
++ HUDI_VERSION=1.0.1
++ PAIMON_VERSION=1.1.0
++ ATLAS_VERSION=2.4.0
++ SUPERSET_VERSION=4.1.2
++ JDK_VERSION=1.8
++ SCALA_VERSION=2.12.13
+ make
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
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
bigtop.bom
文件通过source
方式被全部注入当前 Shell 环境。- 日志里
++ XXX_VERSION=...
的部分就是每个大数据组件的实际版本号,后续无论 Redis 是否依赖其他组件,变量都已经自动传递到了脚本上下文中。 - 这种方式支持大数据生态下的多组件版本联动和动态适配,不需要任何硬编码。
提示
要做版本统一升级、适配,直接维护 bigtop.bom 即可,不需要挨个脚本里搜版本号,省心且不易错。
# 5. 正式开始 make 源码编译
+ make
cd src && make all
make[1]: Entering directory '/opt/modules/bigtop/build/redis/rpm/BUILD/redis-7.4.0/src'
CC Makefile.dep EXECUTING [13s]
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
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 cluste
r.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 notify.d setproctitle.d blocked.d h
yperloglog.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 r
ax.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 monotonic.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 redis-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 redis
assert.d release.d crcspeed.d crc64.d siphash.d crc16.d monotonic.d cli_common.d mt19937-64.d strl.d
(cd ../deps && make distclean)
make[2]: Entering directory '/opt/modules/bigtop/build/redis/rpm/BUILD/redis-7.4.0/deps'
(cd hiredis && make clean) > /dev/null || true
(cd linenoise && make clean) > /dev/null || true
(cd lua && make clean) > /dev/null || true
(cd jemalloc && [ -f Makefile ] && make distclean) > /dev/null || true
(cd hdr_histogram && make clean) > /dev/null || true
(cd fpconv && make clean) > /dev/null || true
(rm -f .make-*)
make[2]: Leaving directory '/opt/modules/bigtop/build/redis/rpm/BUILD/redis-7.4.0/deps'
(cd modules && make clean)
make[2]: Entering directory '/opt/modules/bigtop/build/redis/rpm/BUILD/redis-7.4.0/src/modules'
rm -rf *.xo *.so
make[2]: Leaving directory '/opt/modules/bigtop/build/redis/rpm/BUILD/redis-7.4.0/src/modules'
(cd ../tests/modules && make clean)
CC call_reply.o
CC script_lua.o
CC script.o
CC functions.o
CC function_lua.oXECUTING [1m 24s]
CC commands.o
CC strl.o
CC connection.o
CC unix.o
CC logreqres.o
LINK redis-serverXECUTING [1m 24s]
INSTALL redis-sentinelING [1m 47s]
CC redis-cli.o
CC redisassert.oEXECUTING [1m 48s]
CC cli_common.o
CC cli_commands.oXECUTING [1m 48s]
LINK redis-cli% EXECUTING [1m 48s]
CC redis-benchmark.oUTING [1m 52s]
LINK redis-benchmarkUTING [1m 53s]
INSTALL redis-check-rdbNG [1m 55s]
INSTALL redis-check-aof
Hint: It's a good idea to run 'make test' ;)
make[1]: Leaving directory '/opt/modules/bigtop/build/redis/rpm/BUILD/redis-7.4.0/src'
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.tEwuJM
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
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
- 进入 Redis
src
目录,执行make all
。 - 这里会看到所有 Redis 主程序和工具链(如 redis-server、redis-cli、redis-sentinel 等)的构建输出。
- 每个编译和链接动作在日志中均有迹可循。
注意
如果发现 make 阶段异常或产物不全,第一时间检查上一节的 buildroot 目录和变量注入是否正常。
- 01
- bigtop-select 打包缺 compat 报错修复 deb07-16
- 02
- bigtop-select 打包缺 control 文件报错修复 deb07-16
- 03
- 首次编译-环境初始化 必装07-16