【问题标题】:rpm spec to only install certain files based on system criteriarpm 规范仅根据系统标准安装某些文件
【发布时间】:2013-03-01 21:07:25
【问题描述】:

我有一个我构建的 RPM,它解压了我在三种不同类型的系统中使用的一堆脚本。我正在尝试添加第四种系统类型,它只需要打包在 rpm 中的文件的子集。有没有办法让 %install 部分仅基于简单的检查安装一些有效负载。像

(须藤代码)

if systemtype eq "type4"; then
    install %file4
else
    install %file
fi

所有四个系统都运行相同的操作系统,单个 RPM 让我可以更轻松地将 RPM 提供给其他人以供他们使用,所以我很想用一个包来完成这项工作。

我知道我可以在 %post 部分执行此操作,但我需要删除的文件列表很长,所以如果可以的话,我想避免这种情况。

【问题讨论】:

  • 不是 rpm 安装脚本只是 shell 脚本吗?您可以简单地在一个文件中列出所有要安装的文件,然后列出 install `cat filelist` 或任何等效的 rpm 脚本。

标签: bash sh rpm specifications


【解决方案1】:

使用单个 RPM 完成这项任务并不是一个很好的计划。正如 Marc 所说,您可以像在其他任何地方一样编写 shell 脚本,但根据您的问题,这似乎是不合理的。在您的问题中,您解释说此 RPM 会在一台机器上运行,那么为什么不为该特定系统打包一个 RPM?如果其他用户需要维护 RPM,这降低了 RPM 的复杂性,并且也减少了 RPM 的膨胀。在短期内,单个 RPM 可能更容易,但从长远来看,多个 RPM 将是更好的解决方案。

【讨论】:

  • 我同意一个 RPM 不是一个好的解决方案,但是不要为第四个系统使用不同的 RPM,这会导致代码重复,您可以制作一个包含所有文件的“基础”RPM,和另一个包含额外文件的包,它依赖于基本包。
  • @Eran,这是另一种可能性,但问题是存在三个 RPM(基础、类型 1 机器的包和类型 2 机器的包),而不是两个 RPM .当解释说他们必须安装此基本软件包时,其他人也可能会感到困惑,然后根据机器类型安装两个软件包之一。
  • 幸运的是,我们有 YUM。构建一个 YUM 数据库,并使用 YUM 进行所有安装。它很容易部署,并且可以解决所有这些问题。
【解决方案2】:

您可以让您的规范文件一次发出多个 RPM 文件。这称为"subpackaging"

如果你调整它们以匹配不同机器上给出的依赖关系,你最终可能会得到一定数量的可以安装的软件包。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 2019-06-14
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多