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任务执行
        • 1. 源码分段解读与注释
        • 2. 日志追踪与实际参数
        • 3. 还原 rpmbuild 实际执行命令
        • 4. 原始日志
      • Step6-spec指令解读[一]
      • Step7-spec指令解读[二]
      • Step8-spec指令解读[三]
      • Step9-spec指令解读[四]
      • Step10-spec指令解读[五]
      • Step11-spec执行钩子解读[一]
      • Step12-spec执行钩子解读[二]
  • 其他技巧

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

Step5-rpm任务执行

# 1. 源码分段解读与注释

Task trpm = task "$target-rpm"(dependsOn: ["${target}-srpm"],
        description: "Building RPM for $target artifacts",
        group: PACKAGES_GROUP) doLast {

    // 如果目标rpm文件已存在,直接退出,避免重复构建
    if (new File(config.bigtop.components[target].targetrpm)?.exists()) {
        println "\tNothing to do. Exiting..."
        return
    }

    // 1. 变量初始化,主控本次 rpm 包构建的核心参数
    def final BIGTOP_BASE_VERSION = "${config.bigtop.base_version}"
    def final PKG_NAME_SUFFIX = config.bigtop.components[target].rpm_pkg_suffix
    def RPM_PKG_NAME_SUFFIX = PKG_NAME_SUFFIX
    def GRADLE_PKG_NAME_SUFFIX = PKG_NAME_SUFFIX
    // 如果没显式指定后缀,防止出现 null 拼接
    if (!project.hasProperty("pkgSuffix") || !PKG_NAME_SUFFIX) {
        RPM_PKG_NAME_SUFFIX = "%{nil}"
        GRADLE_PKG_NAME_SUFFIX = ""
    }
    // 构建版本戳,从环境变量或配置自动切换
    def final BIGTOP_BUILD_STAMP = System.getenv('BIGTOP_BUILD_STAMP') ?:
            config.bigtop.components[target].version.release
    // 常用路径变量
    def final PKG_BUILD_DIR = config.bigtop.components[target].builddir
    def final NAME = config.bigtop.components[target].name
    def final PKG_NAME = config.bigtop.components[target].pkg
    def final PKG_OUTPUT_DIR = config.bigtop.components[target].outputdir
    def final PKG_VERSION = config.bigtop.components[target].version.pkg
    def final BASE_VERSION = config.bigtop.components[target].version.base
    def final HADOOP_VERSION = config.bigtop.components["hadoop"].version.pkg

    // 2. 拼接发行版后缀(如 .el8),用于兼容不同系统的 rpm 包
    def RELEASE_DIST = "rpmbuild --eval '%{?dist}' 2>/dev/null".execute().text.trim().replaceAll("'", '')
    // 拼接输入的 srpm 路径
    def SRCRPM = "$PKG_OUTPUT_DIR/${PKG_NAME}${GRADLE_PKG_NAME_SUFFIX}-${PKG_VERSION}-$BIGTOP_BUILD_STAMP${RELEASE_DIST}.src.rpm"

    // 3. Maven集成相关参数
    def final DO_MAVEN_DEPLOY = project.findProperty('doMavenDeploy') == 'true'
    def final MAVEN_DEPLOY_SOURCE = project.findProperty('mavenDeploySource') == 'true'
    def final MAVEN_REPO_ID = project.hasProperty('mavenRepoId') ? project.property('mavenRepoId') : 'default'
    def final MAVEN_REPO_URI = project.hasProperty('mavenRepoUri') ? project.property('mavenRepoUri') : null

    // 4. 父级目录,支持不同环境下产物隔离
    def final PARENT_DIR = project.hasProperty("parentDir") ? project.property('parentDir') : "%{nil}"
    def FULL_PARENT_DIR = "${PARENT_DIR}"
    if (PARENT_DIR != "%{nil}") {
        FULL_PARENT_DIR = "${PARENT_DIR}/${BIGTOP_BASE_VERSION}"
    }

    // 5. 组装 rpmbuild 命令参数
    def command = [
            '--define', "_topdir $PKG_BUILD_DIR/rpm/",
            '--define', "${NAME}_base_version $BASE_VERSION",
            '--define', "hadoop_version ${HADOOP_VERSION}",
            '--define', "${NAME}_version ${PKG_VERSION}",
            '--define', "${NAME}_release ${BIGTOP_BUILD_STAMP}%{?dist}",
            '--rebuild', SRCRPM,
            '--define', "do_maven_deploy ${DO_MAVEN_DEPLOY}",
            '--define', "maven_deploy_source ${MAVEN_DEPLOY_SOURCE}",
            "--define", "parent_dir ${FULL_PARENT_DIR}",
            "--define", "bigtop_base_version ${BIGTOP_BASE_VERSION}",
            "--define", "pkg_name_suffix ${RPM_PKG_NAME_SUFFIX}",
    ]
    // maven私服集成可选项
    if (MAVEN_REPO_URI != null) {
        command.addAll('--define', "maven_repo_uri ${MAVEN_REPO_URI}")
        command.addAll('--define', "maven_repo_id ${MAVEN_REPO_ID}")
    }

    // 6. 执行rpm构建
    exec {
        workingDir BASE_DIR
        executable 'rpmbuild'
        environment QA_RPATHS: 0x0002
        args command
    }

    // 7. 拷贝产物到输出目录(归档所有新生成的rpm文件)
    copy {
        from fileTree("$PKG_BUILD_DIR/rpm/RPMS") {
            include '**/*'
        }
        into PKG_OUTPUT_DIR
    }
    // 8. 打标记文件,供下游自动检测rpm产物
    touchTargetFile(config.bigtop.components[target].targetrpm)
}
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
86
87
88

# 2. 日志追踪与实际参数

任务执行日志(典型场景):

任务触发日志

实际命令和参数全部在日志有回显,可以用表格做映射:

参数名 日志实际值 含义
_topdir /opt/modules/bigtop/build/redis/rpm/ rpm构建根目录
redis_base_version 7.4.0 组件基础版本
hadoop_version 3.3.4 hadoop依赖版本
redis_version 7.4.0 组件主版本
redis_release 1%{?dist} release后缀
do_maven_deploy false maven部署
maven_deploy_source false 部署源码
parent_dir /usr/bigtop/3.2.0 父级归档目录
bigtop_base_version 3.2.0 bigtop主版本
pkg_name_suffix _3_2_0 包名后缀

# 3. 还原 rpmbuild 实际执行命令

rpmbuild \
  --define "_topdir /opt/modules/bigtop/build/redis/rpm/" \
  --define "redis_base_version 7.4.0" \
  --define "hadoop_version 3.3.4" \
  --define "redis_version 7.4.0" \
  --define "redis_release 1%{?dist}" \
  --rebuild /opt/modules/bigtop/output/redis/redis_3_2_0-7.4.0-1.el8.src.rpm \
  --define "do_maven_deploy false" \
  --define "maven_deploy_source false" \
  --define "parent_dir /usr/bigtop/3.2.0" \
  --define "bigtop_base_version 3.2.0" \
  --define "pkg_name_suffix _3_2_0"
1
2
3
4
5
6
7
8
9
10
11
12

# 4. 原始日志

 Starting process 'command 'rpmbuild''. Working directory: /opt/modules/bigtop Command: rpmbuild --define
_topdir /opt/modules/bigtop/build/redis/rpm/ --define redis_base_version 7.4.0 --define hadoop_version 3.3.4 --define redis_version 7.4.0 --define redis_release 1%{?dist} --
rebuild /opt/modules/bigtop/output/redis/redis_3_2_0-7.4.0-1.el8.src.rpm --define do_maven_deploy false --define maven_deploy_source false --define parent_dir /usr/bigtop/3.
2.0 --define bigtop_base_version 3.2.0 --define pkg_name_suffix _3_2_0
07:45:49.418 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Environment for process 'command 'rpmbuild'': {PATH=/root/.nvm/versions/node/v12.13.0/bin:/opt/enhance_e
nv/miniconda3/bin:/opt/enhance_env/miniconda3/condabin:/usr/local/R-4.4.2/bin:/opt/modules/apache-maven-3.8.4/bin:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:
/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 -

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
#Bigtop#Gradle#SRPM#打包流程#大数据运维
Step4-srpm源码包产出
Step6-spec指令解读[一]

← Step4-srpm源码包产出 Step6-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
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式