如果不使用 Yum 缓存,我可以在安装 RPM 后检索或重建它吗?

如果不使用 Yum 缓存,我可以在安装 RPM 后检索或重建它吗?

我的公司为不同的客户管理一些 RHEL 7 系统。特别是一位客户从其系统上的非默认存储库安装了一个软件包。几周前,该存储库突然意外地离线了。现在,客户想要一个安装了相同软件包的新系统。但是,我们无法获取该包的副本 - 上游存储库处于离线状态,我们/var/cache/yum每天通过自动化流程(使用yum clean)进行清理,以节省生产系统上的磁盘空间。我们正在与供应商联系以获取包裹的副本,但到目前为止还没有成功。

假设 Yum 缓存不包含副本,那么在通过 Yum 安装 RPM 包后,有没有办法检索或重建 RPM 包?

已经有几个问题了(1,2)该地址解决了获取已安装软件包的副本的问题,但所有答案都取决于 Yum 缓存。

显然,在我的特定场景中,最好的答案是告诉客户,在供应商采取行动之前我们无能为力,但为了这个问题,我们假设客户是我们最大的客户,他们会离开我们如果我们没有安装他们的软件并启动新系统,那么我们必须获取该包裹的副本,否则我们公司将面临破产的风险。 (实际上我只是好奇是否有办法做到这一点,我的生计实际上并不依赖于它。)

答案1

缓慢烦人的手动方式可能会沿着以下路线运行

$ rpm -ql openssh-server
...

并从这些文件构建一个 tarball。但是,您可能需要排除其中一些文件或目录,具体取决于。此外,您还需要收集脚本(如果有)

$ rpm -q --scripts openssh-server
...

然后找到或改编一个合适的文件newhope.spec来使用您的newhope.tar.gz源文件,将脚本插入到该规范文件中,然后进行一些未知量的摆弄和测试,rpmbuild以获取%files上述所有适当位置的脚本,解决上述任何冲突愚蠢的 make-a-tarball 方法可以使用其他包等创建。

(还rpm -q --conflicts可能--requires需要检查并可能需要手动包含在规范中;基本上并运行标志部分中提到的每个标志,--triggers以查看已安装的 RPM 包含的内容...)--providesman rpmquery-options

答案2

一个回答者超级用户的老问题建议使用rpm --rebuild.然而,RHEL 7 附带的 RPM 版本似乎不支持此选项。

另一种方法是使用rpmrebuild,可通过 RHEL 7 上的 EPEL 获得。我能够使用此工具重新创建已安装的软件包。生成的包与原始包几乎但不完全相同。尤其:

  • 对磁盘上文件的任何更改都将由新包获取(最有可能发生在配置文件中)
  • 即使原始包已签名,该包也将未签名,因为除了原始包签名者之外,没有人拥有用于签署包的私钥的副本

相关内容