我们使用 RPM 来打包和部署我们的产品。我们的产品依赖于其他组件,如 postgresql 数据库等,这些组件在我们的 .spec 文件中指定。假设,在安装我们的产品之前必须修补第三方组件的配置文件之一(并在卸载后恢复)。这样做的正确程序是什么?有没有执行相同操作的 RPM 包示例?
谢谢!
答案1
RPM 规范文件支持每次安装 ( %pre
) 和安装后 ( %post
) 或卸载前 ( %preun
) 和卸载后 ( %postun
) 脚本,可用于在安装 RPM 包之前或删除 RPM 包时更新任何系统配置。
例如,您可以检查 httpd 包,其中%pre
部分定义为添加 apache 用户,%post
部分定义为在启动时启用 httpd 服务。
rpm -q --scripts httpd
preinstall scriptlet (using /bin/sh):
# Add the "apache" user
getent group apache >/dev/null || groupadd -g 48 -r apache
getent passwd apache >/dev/null || \
useradd -r -u 48 -g apache -s /sbin/nologin \
-d /var/www -c "Apache" apache
exit 0
postinstall scriptlet (using /bin/sh):
# Register the httpd service
/sbin/chkconfig --add httpd
/sbin/chkconfig --add htcacheclean
preuninstall scriptlet (using /bin/sh):
if [ $1 = 0 ]; then
/sbin/service httpd stop > /dev/null 2>&1
/sbin/chkconfig --del httpd
/sbin/service htcacheclean stop > /dev/null 2>&1
/sbin/chkconfig --del htcacheclean
fi
posttrans scriptlet (using /bin/sh):
test -f /etc/sysconfig/httpd-disable-posttrans || \
/sbin/service httpd condrestart >/dev/null 2>&1 || :
以下是 SPEC 文件中与 httpd 包相关的部分:
%pre
# Add the "apache" user
getent group apache >/dev/null || groupadd -g 48 -r apache
getent passwd apache >/dev/null || \
useradd -r -u 48 -g apache -s /sbin/nologin \
-d %{contentdir} -c "Apache" apache
exit 0
%post
# Register the httpd service
/sbin/chkconfig --add httpd
我认为最大转速指南是有关如何做这些事情的权威信息来源。