TT Bigdata TT Bigdata
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件安装

    • 常规&高可用
  • 版本专题

    • 更新说明
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

    • 各组件代码
    • 通用代码模板
  • 国产化&其他系统

    • Rocky系列
    • Ubuntu系列
  • 生产调优

    • 组件调优指南
    • 1v1指导调优
  • 支持&共建

    • 蓝图愿景
    • 技术支持
    • 合作共建
登陆
GitHub (opens new window)

JaneTTR

数据酿造智慧,每一滴都是沉淀!
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件安装

    • 常规&高可用
  • 版本专题

    • 更新说明
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

    • 各组件代码
    • 通用代码模板
  • 国产化&其他系统

    • Rocky系列
    • Ubuntu系列
  • 生产调优

    • 组件调优指南
    • 1v1指导调优
  • 支持&共建

    • 蓝图愿景
    • 技术支持
    • 合作共建
登陆
GitHub (opens new window)
  • 方法论

  • 组件编译技巧

  • 打包技巧-RPM

  • 实战-日志&源码解读全链路周期

    • Step0-打包完整链路
    • Step1-bigtop.bom配置
    • Step2-源码包触发下载
    • Step3-Tarball制备全流程
    • 适用于REDHAT

      • Step4-srpm源码包产出
      • Step5-rpm任务执行
      • Step6-spec指令解读[一]
        • 1. %prep 阶段可视化
        • 2. 构建日志还原
        • 3. 解包结构与文件还原
        • 4. 解压后的目录
      • Step7-spec指令解读[二]
      • Step8-spec指令解读[三]
      • Step9-spec指令解读[四]
      • Step10-spec指令解读[五]
      • Step11-spec执行钩子解读[一]
      • Step12-spec执行钩子解读[二]
  • 其他技巧

  • GOD-Bigtop
  • 实战-日志&源码解读全链路周期
  • 适用于REDHAT
JaneTTR
2025-07-05
目录

Step6-spec指令解读[一]%prep

spec 文件中的 %prep 阶段,决定了源码包如何被解包、初始化与预处理。 这一节专注还原 rpm 安装日志中 %prep 对应的源码解压动作,配合日志和图片,彻底搞清楚包管理器到底做了什么。

# 1. %prep 阶段可视化

下面这张图可以直观看到 %prep 阶段实际对应的是源码的解压与 BUILD 目录的初始化。

spec文件%prep指令流程

实际上,这一步就是把 SOURCES 目录下的 .tar.gz 包解压出来。

# 2. 构建日志还原

结合实际构建日志,可以看到 rpm-build 在 %prep 阶段做了哪些解压和准备工作:

解压与%prep日志截图

关键日志:

07:45:49.446 [QUIET] [system.out] Installing /opt/modules/bigtop/output/redis/redis_3_2_0-7.4.0-1.el8.src.rpm
07:45:49.446 [QUIET] [system.out] Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.B8k8DN
07:45:49.447 [ERROR] [system.err] + umask 022
07:45:49.447 [ERROR] [system.err] + cd /opt/modules/bigtop/build/redis/rpm//BUILD
07:45:49.447 [ERROR] [system.err] + cd /opt/modules/bigtop/build/redis/rpm/BUILD
07:45:49.447 [ERROR] [system.err] + rm -rf redis-7.4.0
07:45:49.449 [ERROR] [system.err] + /usr/bin/gzip -dc /opt/modules/bigtop/build/redis/rpm/SOURCES/7.4.0.tar.gz
07:45:49.450 [ERROR] [system.err] + /usr/bin/tar -xvvof -
1
2
3
4
5
6
7
8

这里已经非常明确:

  • 先清空旧的 BUILD 目录
  • 再把 SOURCES 目录下的源码 tar 包解压
  • 解包后,redis-7.4.0 目录内容完全展开

# 3. 解包结构与文件还原

实际执行过程中,解压出来的内容如下(部分日志截取):

/usr/bin:/sbin:/bin:/opt/modules/gradle-5.6.4/bin:/opt/modules/apache-ant-1.10.12/bin:/opt/modules/apache-ivy-2.5.0/bin:/opt/modules/jdk1.8.0_202/bin, HISTCONTROL=ignoredups
, CONDA_DEFAULT_ENV=base, CONDA_EXE=/opt/enhance_env/miniconda3/bin/conda, HISTSIZE=1000, JAVA_HOME=/opt/modules/jdk1.8.0_202, IMPALA_HOME=/opt/modules/bigtop/build/impala/r
pm/BUILD/impala-4.4.1, BASH_FUNC_which%%=() {  ( alias;
 eval ${which_declare} ) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot $@
}, CONDA_PYTHON_EXE=/opt/enhance_env/miniconda3/bin/python, TERM=xterm, LANG=C.UTF-8, GRADLE_HOME=/opt/modules/gradle-5.6.4, CONDA_PREFIX=/opt/enhance_env/miniconda3, ANT_HO
ME=/opt/modules/apache-ant-1.10.12, MAVEN_HOME=/opt/modules/apache-maven-3.8.4, MAIL=/var/spool/mail/root, NVM_INC=/root/.nvm/versions/node/v12.13.0/include/node, _CE_M=, wh
ich_declare=declare -f, LOGNAME=root, NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node, PWD=/opt/modules/bigtop, CONDA_SHLVL=1, NVM_CD_FLAGS=, NVM_DIR=/root/.nvm, LE
SSOPEN=||/usr/bin/lesspipe.sh %s, R_HOME=/usr/local/R-4.4.2, OLDPWD=/opt/modules/gradle-5.6.4, USER=root, _CE_CONDA=, HOSTNAME=rocky8, DEBUGINFOD_URLS=https://debuginfod.cen
tos.org/ , CONDA_PROMPT_MODIFIER=(base) , IVY_HOME=/opt/modules/apache-ivy-2.5.0, QA_RPATHS=2, NVM_BIN=/root/.nvm/versions/node/v12.13.0/bin, HOME=/root, SHLVL=1}
07:45:49.418 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTING
07:45:49.418 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Waiting until process started: command 'rpmbuild'.
07:45:49.422 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTED
07:45:49.422 [INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'command 'rpmbuild''
07:45:49.422 [DEBUG] [org.gradle.process.internal.ExecHandleRunner] waiting until streams are handled...
07:45:49.446 [QUIET] [system.out] Installing /opt/modules/bigtop/output/redis/redis_3_2_0-7.4.0-1.el8.src.rpm
07:45:49.446 [QUIET] [system.out] Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.B8k8DN
07:45:49.447 [ERROR] [system.err] + umask 022
07:45:49.447 [ERROR] [system.err] + cd /opt/modules/bigtop/build/redis/rpm//BUILD
07:45:49.447 [ERROR] [system.err] + cd /opt/modules/bigtop/build/redis/rpm/BUILD
07:45:49.447 [ERROR] [system.err] + rm -rf redis-7.4.0
07:45:49.449 [ERROR] [system.err] + /usr/bin/gzip -dc /opt/modules/bigtop/build/redis/rpm/SOURCES/7.4.0.tar.gz
07:45:49.450 [ERROR] [system.err] + /usr/bin/tar -xvvof -
07:45:49.451 [QUIET] [system.out] drwxrwxr-x root/root         0 2024-07-29 05:31 redis-7.4.0/
07:45:49.451 [QUIET] [system.out] drwxrwxr-x root/root         0 2024-07-29 05:31 redis-7.4.0/.codespell/
07:45:49.451 [QUIET] [system.out] -rw-rw-r-- root/root       139 2024-07-29 05:31 redis-7.4.0/.codespell/.codespellrc
07:45:49.451 [QUIET] [system.out] -rw-rw-r-- root/root        17 2024-07-29 05:31 redis-7.4.0/.codespell/requirements.txt
07:45:49.451 [QUIET] [system.out] -rw-rw-r-- root/root       111 2024-07-29 05:31 redis-7.4.0/.codespell/wordlist.txt
07:45:49.452 [QUIET] [system.out] -rw-rw-r-- root/root       405 2024-07-29 05:31 redis-7.4.0/.gitattributes
07:45:49.452 [QUIET] [system.out] drwxrwxr-x root/root         0 2024-07-29 05:31 redis-7.4.0/.github/
07:45:49.452 [QUIET] [system.out] drwxrwxr-x root/root         0 2024-07-29 05:31 redis-7.4.0/.github/ISSUE_TEMPLATE/
07:45:49.452 [QUIET] [system.out] -rw-rw-r-- root/root       409 2024-07-29 05:31 redis-7.4.0/.github/ISSUE_TEMPLATE/bug_report.md
07:45:49.452 [QUIET] [system.out] -rw-rw-r-- root/root       580 2024-07-29 05:31 redis-7.4.0/.github/ISSUE_TEMPLATE/crash_report.md
07:45:49.452 [QUIET] [system.out] -rw-rw-r-- root/root       623 2024-07-29 05:31 redis-7.4.0/.github/ISSUE_TEMPLATE/feature_request.md
07:45:49.452 [QUIET] [system.out] -rw-rw-r-- root/root       110 2024-07-29 05:31 redis-7.4.0/.github/ISSUE_TEMPLATE/other_stuff.md
07:45:49.452 [QUIET] [system.out] -rw-rw-r-- root/root       941 2024-07-29 05:31 redis-7.4.0/.github/ISSUE_TEMPLATE/question.md
07:45:49.452 [QUIET] [system.out] -rw-rw-r-- root/root       526 2024-07-29 05:31 redis-7.4.0/.github/dependabot.yml
07:45:49.452 [QUIET] [system.out] drwxrwxr-x root/root         0 2024-07-29 05:31 redis-7.4.0/.github/workflows/
07:45:49.453 [QUIET] [system.out] -rw-rw-r-- root/root      3029 2024-07-29 05:31 redis-7.4.0/.github/workflows/ci.yml
07:45:49.453 [QUIET] [system.out] -rw-rw-r-- root/root       706 2024-07-29 05:31 redis-7.4.0/.github/workflows/codeql-analysis.yml
07:45:49.453 [QUIET] [system.out] -rw-rw-r-- root/root      1322 2024-07-29 05:31 redis-7.4.0/.github/workflows/coverity.yml
07:45:49.453 [QUIET] [system.out] -rw-rw-r-- root/root     56666 2024-07-29 05:31 redis-7.4.0/.github/workflows/daily.yml
07:45:49.453 [QUIET] [system.out] -rw-rw-r-- root/root      2737 2024-07-29 05:31 redis-7.4.0/.github/workflows/external.yml
07:45:
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

这些都是源码包的完整目录,%prep 只是把压缩包内容标准化还原到 BUILD 目录下。

# 4. 解压后的目录

image-20250705171948786

如上图,%prep 阶段完成后,源码被完整解压到 rpm 的 BUILD 目录下,目录结构与源码包一致:

  • 顶层目录为:redis-7.4.0/
  • 其中包含 README.md、Makefile、deps/、src/、tests/ 等全部源码文件和子目录

实际路径如下:

/opt/modules/bigtop/build/redis/rpm/BUILD/redis-7.4.0/
1

后续所有的构建、补丁、安装等操作都在这个目录内展开。

#Bigtop#Gradle#SRPM#打包流程#大数据运维
Step5-rpm任务执行
Step7-spec指令解读[二]

← Step5-rpm任务执行 Step7-spec指令解读[二]→

最近更新
01
bigtop-select 打包缺 compat 报错修复 deb
07-16
02
bigtop-select 打包缺 control 文件报错修复 deb
07-16
03
首次编译-环境初始化 必装
07-16
更多文章>
Theme by Vdoing | Copyright © 2017-2025 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式