我的公司为不同的客户管理一些 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 包含的内容...)--provides
man rpm
query-options
答案2
一个回答者超级用户的老问题建议使用rpm --rebuild
.然而,RHEL 7 附带的 RPM 版本似乎不支持此选项。
另一种方法是使用rpmrebuild
,可通过 RHEL 7 上的 EPEL 获得。我能够使用此工具重新创建已安装的软件包。生成的包与原始包几乎但不完全相同。尤其:
- 对磁盘上文件的任何更改都将由新包获取(最有可能发生在配置文件中)
- 即使原始包已签名,该包也将未签名,因为除了原始包签名者之外,没有人拥有用于签署包的私钥的副本