Step5-Debian下构造-inst|rmpre/post
# 1. 文件位置
在 Redis 的打包目录下,四个脚本命名需与包名一致,并以阶段后缀结尾:
bigtop-packages/src/deb/redis/redis.postinst
bigtop-packages/src/deb/redis/redis.preinst
bigtop-packages/src/deb/redis/redis.postrm
bigtop-packages/src/deb/redis/redis.prerm
1
2
3
4
5
6
2
3
4
5
6
# 2. 四个阶段说明
脚本 | 执行时机 | 典型作用 |
---|---|---|
preinst | 包安装/升级前 | 创建用户组、准备系统环境 |
postinst | 包安装/升级后 | 创建目录、初始化配置、注册 alternatives |
prerm | 包卸载/升级前 | 移除配置链接、关闭服务 |
postrm | 包卸载/升级后 | 清理日志、删除残留目录 |
总结
这四个脚本相当于 生命周期钩子,类似 RPM 的 %pre/%post/%preun/%postun
。
通过它们,开发者可以精确控制包在安装和卸载过程中的环境变化。
# 3. 脚本示例
# 3.1 postinst(安装后执行)
#!/bin/bash
# 版权所有 (c) JaneTTR 2025
COMPONENT_NAME="redis"
COMPONENT_USER="redis"
COMPONENT_GROUP="hadoop"
ETC_DIR="/usr/bigtop/3.2.0/etc/redis"
LIB_DIR="/usr/bigtop/3.2.0/var/lib/redis"
ALT_NAME="${COMPONENT_NAME}-conf"
ALT_PATH="${ETC_DIR}/conf.empty"
NP_ETC_DIR="/etc/${COMPONENT_NAME}"
NP_LOG_DIR="/var/log/${COMPONENT_NAME}"
NP_RUN_DIR="/var/run/${COMPONENT_NAME}"
case "$1" in
configure)
mkdir -p "$NP_ETC_DIR" "$NP_LOG_DIR" "$NP_RUN_DIR" "$LIB_DIR"
update-alternatives --install "$NP_ETC_DIR/conf" "$ALT_NAME" "$ALT_PATH" 30
chown -R "$COMPONENT_USER:$COMPONENT_GROUP" "$LIB_DIR" "$NP_LOG_DIR" "$NP_RUN_DIR"
;;
esac
exit 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 3.2 postrm(卸载后执行)
#!/bin/bash
set -e
NP_LOG_DIR="/var/log/redis"
case "$1" in
remove|purge)
rm -rf "$NP_LOG_DIR" || true
;;
esac
exit 0
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 3.3 preinst(安装前执行)
#!/bin/bash
set -e
COMPONENT_USER="redis"
COMPONENT_GROUP="hadoop"
COMPONENT_HOME="/home/redis"
case "$1" in
install|upgrade)
if ! getent group "$COMPONENT_GROUP" >/dev/null; then
addgroup --system "$COMPONENT_GROUP"
fi
if ! getent passwd "$COMPONENT_USER" >/dev/null; then
adduser --system --ingroup "$COMPONENT_GROUP" \
--home "$COMPONENT_HOME" --shell /bin/bash \
--gecos "$COMPONENT_USER" "$COMPONENT_USER"
fi
;;
esac
exit 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 3.4 prerm(卸载前执行)
#!/bin/bash
set -e
COMPONENT_NAME="redis"
ALT_NAME="${COMPONENT_NAME}-conf"
ALT_PATH="/usr/bigtop/3.2.0/etc/redis/conf.empty"
case "$1" in
remove|purge)
update-alternatives --remove "$ALT_NAME" "$ALT_PATH" || true
;;
esac
exit 0
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 4. 实战注意点
- 用户与组:建议在
preinst
中创建,避免服务启动失败。 - 目录权限:统一在
postinst
中调整,保证redis
用户可读写。 - 配置替换:通过
update-alternatives
实现多版本切换。 - 清理残留:在
postrm
中清理日志和缓存,避免系统污染。
- 01
- [/metrics/aggregated] — 聚合数据范围 检查点09-19
- 02
- [/metrics] — 反向分析接口参数 请求抓包09-17
- 03
- [/metrics] — 普通指标写入方法 POST09-17