如何使用rpm更新/替换现有文件?

tre*_*qui 21 deployment lamp configuration rpm

我有几个应用程序,我希望使用rpm部署.我的应用程序部署中的某些文件会覆盖其他已部署软件包中的文件.简单地在部署包中包含新文件将导致rpm冲突.

我正在寻找使用rpm来更新/替换已安装文件的正确方法.

我已经提出了一些解决方案,但似乎没有什么是正确的.

  • 维护包含原始文件的rpms的自定义版本.

这似乎是一项相对较小的奖励的大量工作,即使它感觉不像一个黑客比一些其他可能的解决方案.

  • 使用其他名称将文件包含在rpm中,并将其复制到post部分中.

这可行,但意味着乱丢系统的多个副本.此外,它还意味着每个文件的rpm构建规范中的额外维护.

  • 在post部分中使用wget替换某些已知服务器中的原始文件.

这与复制技术类似,但文件甚至不会存在于rpm中.这可能就像一个不错的中央配置权限.

  • 将文件部署为新文件,然后使用符号链接覆盖原始文件.

这也类似于复制技术,但杂乱程度较低.这里的问题是一些文件表现不如符号链接.

Jos*_*ley 10

据我所知,RPM不是为了允许更新/替换现有文件而设计的,所以你所做的任何事情都将成为一个黑客.

在你列出的选项中,如果目标系统是我管理的系统(正如你所说,它是更多的工作但是最干净的解决方案)以及#2和#4的组合,我会选择#1作为最不好的黑客攻击(符号链接如果可能的话,复印时没有),如果我为他人创造系统的RPM(以避免分发了一堆RPM包的,但我会让它非常的文档清晰的我在做什么).

您尚未描述需要更新或替换哪些文件以及需要更新的文件.根据这些问题的答案,您可能还有其他几种选择:

  • 许多程序旨在使用单个默认配置文件,并从.d子目录中获取配置文件.例如,Apache使用/etc/httpd/conf/httpd.conf/etc/httpd/conf.d/*.conf,因此您的RPM可以删除文件/etc/httpd/conf.d而不是修改/etc/httpd/conf/httpd.conf.如果您需要修改的文件是不遵循此模式但可以使用的配置文件,您可以向软件包维护者建议他们添加此功能; 这不会立即帮助你,但会使未来的版本更容易.
  • 对于命令行实用程序等sendmail,并lpr可以由多个包提供,该alternatives系统(参见man alternatives)允许超过1个RPM,提供这些实用程序来通过并排安装.同样,如果您需要修改的文件是不遵循此模式但可以使用的命令行实用程序,您可以向软件包维护者建议他们添加此功能.
  • 您管理的系统上的配置文件更改可通过CfenginePuppet等工具进行更好的管理,而非通过自定义RPM进行管理.我认为Red Hat喜欢Puppet.
  • 如果我为我不管理的系统创建RPM,我会考虑使用像Bitrock这样的第三方工具并将我所有的东西/opt都转储下来,这样我就不必踩踏其他管理员RPM所安装的文件了. .


小智 6

你也可以执行rpm -U --replacefiles --replacepkgs ...,这会给你你想要的。