TT Bigdata TT Bigdata
首页
  • 部署专题

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

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

    • 更新说明
  • Ambari-Env

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

    • 专区—Ambari
    • 专区—Bigtop
  • 报错解决

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

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

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

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 模板代码

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

    • Centos系列
    • Kylin系列
    • OpenEuler系列
    • Rocky系列
    • Ubuntu系列
  • 生产调优

    • 组件调优指南
    • 1v1指导调优
  • 定制开发

    • 组件版本定制
    • 样式风格定制
  • 蓝图愿景
  • 技术支持
  • 合作共建
GitHub (opens new window)

JaneTTR

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

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

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

    • 更新说明
  • Ambari-Env

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

    • 专区—Ambari
    • 专区—Bigtop
  • 报错解决

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

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

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

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 模板代码

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

    • Centos系列
    • Kylin系列
    • OpenEuler系列
    • Rocky系列
    • Ubuntu系列
  • 生产调优

    • 组件调优指南
    • 1v1指导调优
  • 定制开发

    • 组件版本定制
    • 样式风格定制
  • 蓝图愿景
  • 技术支持
  • 合作共建
GitHub (opens new window)
  • 准备阶段

  • 理解packages.gradle

    • Bigtop 构建过程中 RPM 打包路径解析
      • 1. packages.gradle 中的路径收集逻辑解析
        • 📥 代码分析
      • 2. 构建输出结构一览(含实际截图)
      • 3. 典型路径归类总结表
      • 4. 小结与构建建议
    • Bigtop 如何统一管理各组件版本
    • Bigtop 如何插入补丁
    • Bigtop 应用补丁
    • Bigtop 多版本编译源码改造(一)
    • Bigtop 多版本编译源码改造(二)
  • 理解bigtop.bom

  • Hadoop编译

  • Flink编译

  • Spark编译

  • Atlas编译

  • Superset编译

  • Zookeeper编译

  • Hbase编译

  • Hive编译

  • Kafka编译

  • Solr编译

  • Tez编译

  • Zeppelin编译

  • 组件编译-Bigtop
  • 理解packages.gradle
JaneTTR
2022-12-18
目录

Bigtop 构建过程中 RPM 打包路径解析

在 Apache Bigtop 的组件打包体系中,每个服务(如 Ranger、Kafka、HDFS)都会通过 Gradle 脚本构建成 RPM 包,而其中最关键的打包中间路径便是:

build/<component>/rpm/SOURCES/
1

这里汇聚了源码 tar 包、启动模板、构建脚本、补丁文件、配置元信息等所有用于 .spec 文件构建的内容。

理解这些路径的来源与组织方式,有助于我们在修改源码、补丁或打包脚本时做到有的放矢、快速定位。

# 1. packages.gradle 中的路径收集逻辑解析

Bigtop 使用 packages.gradle 文件统一管理各组件的构建任务。以下是拷贝资源到构建目录的完整逻辑片段。

# 📥 代码分析

// 复制组件 rpm 目录下的 spec 文件和其他资源
copy {
    from fileTree("${BASE_DIR}/bigtop-packages/src/rpm/$NAME") {
        include '**/*'
    }
    into "$PKG_BUILD_DIR/rpm"
}
1
2
3
4
5
6
7

.spec 文件就是在这里被收集到 $PKG_BUILD_DIR/rpm 目录的,后续会由 rpmbuild 使用。

// 种子源码包(通常为 .tar.gz)
copy {
    from SEED_TAR
    into "$PKG_BUILD_DIR/rpm/SOURCES"
}
1
2
3
4
5

这部分是打包的核心来源,构建系统会默认在 .spec 中声明 Source0 指向它。

// init 脚本模板
copy {
    from "${BASE_DIR}/bigtop-packages/src/templates/init.d.tmpl"
    into "$PKG_BUILD_DIR/rpm/SOURCES"
}
1
2
3
4
5

对应的是各服务的 systemd / init 脚本模版。

// 拷贝扩展补丁等附加脚本
copy {
    from "${BASE_DIR}/bigtop-packages/src/extensions"
    into "$PKG_BUILD_DIR/rpm/SOURCES"
    include "*"
}
1
2
3
4
5
6

所有 patch 文件、postinstall/postuninstall 脚本都可以放在 extensions/ 目录中。

// 通用脚本文件(install.sh、deploy.sh)
copy {
    from "${BASE_DIR}/bigtop-packages/src/scripts"
    into "$PKG_BUILD_DIR/rpm/SOURCES"
    include "*"
}
1
2
3
4
5
6

这些文件常用于服务初始化或外部部署集成(如部署 Ambari 服务 XML 等)。

// 每个组件下的通用配置文件,如 bom、xml、env
copy {
    from fileTree("$BASE_DIR/bigtop-packages/src/common/$NAME") {
        include '**/*'
    }
    into "$PKG_BUILD_DIR/rpm/SOURCES"
}
1
2
3
4
5
6
7

这段是核心扩展:将每个组件的配置项(如 bigtop.bom、aws-maven.xml)归档至构建路径内,确保 .spec 能引用到。

这些资源最终都会被集中写入到 rpm/SOURCES 中统一管理。

# 2. 构建输出结构一览(含实际截图)

执行构建任务后,会生成如下标准化 RPM 打包目录:

build/ranger/rpm/
├── BUILD/
├── BUILDROOT/
├── SOURCES/
│   ├── release-ranger-2.4.0.tar.gz
│   ├── patch0-RANGER-4201.diff
│   ├── init.d.tmpl
│   ├── install_ranger.sh
│   ├── bigtop.bom
│   └── ...
├── SPECS/
│   └── ranger.spec
└── SRPMS/
1
2
3
4
5
6
7
8
9
10
11
12
13

📷 实际视图如下所示:

打包阶段存放路径

可以看到:

  • .tar.gz 为主源码包,.spec 中用作 Source0
  • patch*.diff 会在构建中自动依次打入(通过 %patch0, %patch1)
  • 各种脚本、bom、模板全部归档在同一目录,避免路径冲突

这些组织方式是为了配合 RPM 的构建机制,其中 .spec 文件就是读取这些 打包原材料 来完成解压、打补丁、安装等一系列构建动作。

# 3. 典型路径归类总结表

类型 来源路径 用途说明
Spec 文件 src/rpm/<component> 被 rpmbuild 使用生成 rpm 包
源码包 ${SEED_TAR} 指定为 Source0,用于 %setup
脚本工具 src/scripts/ install/deploy 脚本,供 %install 使用
补丁扩展 src/extensions/ .diff 文件被用于 %patch 语句
启动模板 src/templates/ 生成 systemd/init 脚本
组件通用配置 src/common/<component> 如 bigtop.bom、maven.xml 等基础配置

所有路径最终都必须出现在 SOURCES/ 中,否则在 .spec 文件中无法引用。重要提示

# 4. 小结与构建建议

Bigtop 的打包体系通过 Gradle 构建逻辑,将一切资源集中在统一结构中管理,这为构建可复现、维护可控打下了基础。

  • 如果你希望添加新的资源文件,只需将其放入指定路径
  • .spec 文件不需要硬编码路径,构建时会自动从 SOURCES/ 中获取
  • 所有引用统一后,构建流程会变得稳定、清晰、可预期

提示

你可以通过 build/<component>/rpm/SPECS/<component>.spec 来检查实际构建使用了哪些资源。

如后续需自定义构建行为(添加 patch、新增配置等),只需修改上述路径对应文件即可,构建框架已完成自动注入,无需手动干预路径引用。


#Bigtop#Gradle#RPM#构建机制
IDE针对Bigtop代码高亮设置
Bigtop 如何统一管理各组件版本

← IDE针对Bigtop代码高亮设置 Bigtop 如何统一管理各组件版本→

最近更新
01
Pandoc 缺失导致 SparkR 构建失败
06-08
02
Cyrus SASL/GSASL 缺失解决
06-07
03
Hadoop_3.3.4 编译实战 1.0.0+
06-06
更多文章>
Theme by Vdoing | Copyright © 2017-2025 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式