TT Bigdata TT Bigdata
首页
GitHub (opens new window)
JaneTTR

JaneTTR

数据酿造智慧,每一滴都是沉淀!
  • Ambari 深度专题

  • Bigtop 方法论

    • Bigtop 深度专题
    • 方法论

    • 组件编译技巧

    • 打包技巧-DEB

    • 打包技巧-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执行钩子解读[二]
    • 其他技巧

  • 自定义集成

  • Ambari Server 与 Web

  • Ambari Metrics

  • Ambari Plus 思考

  • Redis集成实战

  • 通用代码模板

  • 各组件代码

  • 技术专题
  • Bigtop 方法论
  • 实战-日志与源码解读
  • 适用于REDHAT
JaneTTR
2025-07-05
目录
一、钩子是什么?为什么要用?
二、安装前钩子:%pre 脚本实践
三、安装后钩子:%post 脚本实践
四、钩子内容的可扩展性

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
当前版本 2026/08
08-29
02
把 Ambari Server HA 稳稳地跑起来
08-17
03
从一次启用操作追到主备就绪
08-17
更多文章>
Theme by Vdoing | Copyright © 2017-2026 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式