gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:30:52 26 4
gpt4 key购买 nike

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

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

我已经想出了一些解决方案,但似乎没有一个是完全正确的。

  • 维护包含原始文件的 rpm 的自定义版本。

尽管与其他一些可能的解决方案相比,这看起来不像黑客,但奖励相对较小,但工作量很大。

  • 使用其他名称将文件包含在 rpm 中,并将它们复制到帖子部分。

这可行,但意味着系统中会散布多个文件副本。它还意味着对每个文件的 rpm 构建规范进行额外的维护。

  • 在帖子部分使用 wget 替换来自某个已知服务器的原始文件。

这与复制技术类似,但文件甚至不会存在于 rpm 中。不过,这可能就像一个很好的中央配置机构。

  • 将文件部署为新文件,然后使用符号链接(symbolic link)覆盖原始文件。

这也类似于复制技术,但更简洁。这里的问题是某些文件的符号链接(symbolic link)表现不佳。

最佳答案

据我所知,RPM 的设计不允许更新/替换现有文件,因此您所做的任何事情都将是一种黑客行为。

在您列出的选项中,如果目标系统是我管理的系统(正如您所说,这需要更多工作,但是最干净的解决方案),那么我会选择#1作为最不坏的黑客,并且选择#2和#2的组合#4(可能的地方使用符号链接(symbolic link),没有的地方复制)如果我正在为其他人的系统创建 RPM(以避免必须分发一堆 RPM,但我会在文档我正在做什么)。

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

  • 许多程序设计为使用单个默认配置文件,并从 .d 子目录中获取配置文件。例如,Apache 使用 /etc/httpd/conf/httpd.conf/etc/httpd/conf.d/*.conf,因此您的 RPM 可以将文件放在/etc/httpd/conf.d 而不是修改 /etc/httpd/conf/httpd.conf。如果您需要修改的文件是不遵循此模式但可以修改的配置文件,您可以建议包维护者添加此功能;这不会立即为您提供帮助,但会使将来的版本更容易。
  • 对于可以由多个包提供的 sendmaillpr 等命令行实用程序,alternatives 系统(请参阅 man替代方案)允许超过 1 RPM,提供并排安装这些实用程序。同样,如果您需要修改的文件是不遵循此模式但可以实现的命令行实用程序,您可以建议包维护者添加此功能。
  • 您管理的系统上的配置文件更改可以通过 Cfengine 等工具更好地管理或Puppet而不是通过自定义 RPM。我认为红帽更喜欢 Puppet。
  • 如果我为不由我管理的系统创建 RPM,我会考虑使用 Bitrock 等第三方工具,并将我的所有内容转储到 /opt 下,这样我就不会'不必破坏其他管理员的 RPM 安装的文件。
  • 编辑(2019):如今,Software Collections提供了一个有用的替代方案。您可以创建安装在 /opt 下某处的软件包,软件集合工具为用户提供了一种标准化的方式来选择使用这些软件包,而不是通常安装在 /usr 下的软件包。红帽使用它来为其稳定且长期(即较旧的)红帽企业 Linux 发行版分发更新版本的工具。

关于deployment - 如何使用 rpm 更新/替换现有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/722305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com