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
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
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 深度说明 参考:多版本管理解读-配置级
- 01
- bigtop-select 打包缺 compat 报错修复 deb07-16
- 02
- bigtop-select 打包缺 control 文件报错修复 deb07-16
- 03
- 首次编译-环境初始化 必装07-16