【问题标题】:How to properly update the local variables with rpmbuild spec file?如何使用 rpmbuild 规范文件正确更新局部变量?
【发布时间】:2019-03-27 11:55:12
【问题描述】:

我需要使用 RPM 打包的自定义软件包定期更新多个 CentOS 服务器。该软件有多个目录和文件,其中一些是配置文件,其中包含多个具有本地服务器特定值的变量。

我一直在阅读有关 configuration files 的 RPM 文档,该文档解释了如何正确制作它们,从而使它们保持原样。但我实际上需要更新配置文件的内容,也只保留一些局部变量值。所以我看到了两种可能的方法:

  1. 将此类文件标记为配置文件,并在 rpmuild 的规范文件中使用 %post 指令在远程服务器执行 yum update 后更新每个此类文件的差异。

  2. 第二种方式正好相反:yum update 替换所有内容,但感谢%post 指令,远程服务器上相应文件中的一些变量会使用本地值进行更新。

所以我的问题是哪种方式更好,经验丰富的 RPM 包构建者推荐哪种方式 - 我在这里完全是新手,所以请多多包涵。

【问题讨论】:

    标签: rpm yum updating rpmbuild rpm-spec


    【解决方案1】:

    使用 *.rpm 打包进行本地配置的最佳方法是将配置范例更改为包含 2 个文件,一个包含来自包的通用默认配置,另一个包含带有(可能)覆盖的本地配置。

    RPM 最好分发静态内容,而不是可变配置文件。

    【讨论】:

    • 杰夫,感谢您的意见。您能否还解释一下两个文件如何相互交互?我的意思是自定义程序需要有配置文件,其中包含需要采用本地值的变量数。假设我以建议的方式推送了两个这样的文件,但是远程系统再次只需要使用一个配置文件,因此无论如何它都应该使用本地值进行更新。
    • 在包中分发的通用配置中设置合理的默认值,然后根据需要提供本地覆盖,必要时使用 %post。 RPM 非常适合静态不变的内容,但不适用于本地配置。拆分为 2 部分使本地配置更容易。
    • 我建议您修改应用程序,而不仅仅是打包,以在单独的文件中处理本地配置/覆盖。
    • 对不起,我很困惑 - 在这些服务器上的自动更新拉取新的 RPM 包之后,我应该如何修改多个服务器上的应用程序?我以为我必须使用%post 指令来这样做,如果我这样做了,那么每个配置文件真的需要两个文件吗?
    • 向应用程序开发人员说明您的需求。否则,根据配置类型,拆分为通用配置和本地配置,并在 %post 中连接成最终配置。您还可以使用 %verifyscript 和 %post 重复自定义。同时 rpm 除了 %post 来处理自定义之外别无他法:我的分离建议只是一种通过重构和连接而不是编辑随 rpm 分发的文件来进行 KISS 的方法。
    猜你喜欢
    • 2011-11-16
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多