使用 RPM 时更新第三方组件配置的正确方法是什么?

使用 RPM 时更新第三方组件配置的正确方法是什么?

我们使用 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

我认为最大转速指南是有关如何做这些事情的权威信息来源。

相关内容