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指令解读[一]
      • Step7-spec指令解读[二]
      • Step8-spec指令解读[三]
      • Step9-spec指令解读[四]
      • Step10-spec指令解读[五]
      • Step11-spec执行钩子解读[一]
        • 一、钩子是什么?为什么要用?
        • 二、安装前钩子:%pre 脚本实践
        • 三、安装后钩子:%post 脚本实践
        • 四、钩子内容的可扩展性
      • Step12-spec执行钩子解读[二]
  • 其他技巧

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

Step11-spec执行钩子解读[一]%pre %post

spec 文件中的 %pre、%post 钩子,是 rpm 包安装生命周期里的自动化入口。这里可以用 shell 做任意初始化,实现在部署阶段自动补齐用户、组、目录、配置和权限等全部细节。

# 一、钩子是什么?为什么要用?

  • %pre:安装前执行,适合创建用户、组、准备环境等
  • %post:安装后执行,适合配置目录、权限、多版本软链接等

提示

合理用好钩子,rpm 包就可以“即装即用”,平台化和自动化水平都会直线上升。

# 二、安装前钩子:%pre 脚本实践

在 rpm 包安装之前,建议自动检查并创建组件专属的用户组和运行用户。这样大数据平台的权限体系才能一致,后续维护无痛。

用户组初始化

标准写法:

%pre
if [ "$1" = 1 ]; then
    getent group %{group_name} >/dev/null  || groupadd -r %{group_name}
    getent passwd %{user_name} >/dev/null || /usr/sbin/useradd --comment "%{user_name}" --shell /bin/bash -r -g %{group_name} --home /home/%{user_name} %{user_name}
fi
1
2
3
4
5
  • groupadd/useradd:保证每个组件有自己专属的 unix 用户和用户组
  • rpm 宏参数:用 %{group_name}、%{user_name} 自动化兼容所有组件

# 三、安装后钩子:%post 脚本实践

在安装完成后,我们推荐自动创建日志、数据、配置等目录,并通过 alternatives 管理多版本配置。

示例脚本:

%post
if [ "$1" = 1 ]; then
    mkdir -p %{np_etc_component_name}
    %{alternatives_cmd} --install %{np_etc_component_name}/conf %{component_name}-conf %{etc_component}/conf.empty 30
    mkdir -p %{np_var_log_component_name}
    mkdir -p /var/lib/%{component_name}
    chown -R %{user_name}:%{group_name} /var/lib/%{component_name}
fi
1
2
3
4
5
6
7
8

要点说明:

动作 说明
创建配置目录 统一用 %{np_etc_component_name}
alternatives 多版本配置 用软链和 alternatives 保证切换一致性
日志、数据目录初始化 /var/log/redis、/var/lib/redis 等
权限归属设置 组件文件全部 chown 给组件用户/组

提示

alternatives 方案适用于一台机器多套环境/多版本共存,比如 Spark、Hadoop、Redis 多版本切换,极大提升灵活性。

# 四、钩子内容的可扩展性

  • 可以自定义更多脚本,比如 %preun、%postun 用于卸载前/后清理
  • 配合 systemd、日志 rotate、自动注册服务脚本等都能用钩子自动化

常见问题及实用链接

  • 怎么查验打包后的 rpm 钩子? 推荐阅读:如何查看Rpm包执行钩子
  • 多版本配置和 alternatives 深度说明 参考:多版本管理解读-配置级
#Bigtop#Gradle#SRPM#打包流程#大数据运维
Step10-spec指令解读[五]
Step12-spec执行钩子解读[二]

← Step10-spec指令解读[五] Step12-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
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式