我的公司为各种客户管理一些 RHEL 7 系统。特别是一位客户从其系统上的非默认存储库安装了一个软件包。几周前,该存储库突然意外下线。现在客户想要一个安装了相同软件包的新系统。但是,我们无法获得该包的副本 - 上游 repo 处于离线状态,我们/var/cache/yum
每天通过自动化流程(使用yum clean
)进行清理以节省生产系统的磁盘空间。我们正在与供应商联系以获取包裹的副本,但到目前为止还没有成功。
假设 Yum 缓存不包含副本,有没有办法在通过 Yum 安装 RPM 包后检索或重建它?
已经有几个问题(1、2 )解决了获取已安装包的副本,但所有答案都取决于 Yum 缓存。
显然,在我的特定场景中,最好的答案是告诉客户在供应商采取行动之前我们无能为力,但是为了这个问题,假设客户是我们最大的客户,他们会离开我们如果我们没有在安装了他们的软件的情况下启动新系统,那么我们必须获得该软件包的副本,否则我们公司将面临破产的风险。(实际上我只是好奇是否有办法做到这一点,我的生计实际上并不依赖于它。)
缓慢烦人的手动方式可能会沿着
并从这些文件构建一个 tarball。但是,您可能需要排除其中一些文件或目录,具体取决于。此外,您需要收集脚本(如果有)
然后找到或改编一个适合
newhope.spec
使用您newhope.tar.gz
的源,将脚本插入到该规范文件中,然后进行一些未知量的摆弄和测试,以便从最合适rpmbuild
的位置获取%files
和脚本,解决上述任何冲突愚蠢的 make-a-tarball 方法可以使用其他包创建,等等。(
rpm -q
--conflicts
而且--requires
和可能需要检查--triggers
并--provides
可能需要手动包含在规范中;基本上man rpm
并遍历标志部分中提到的每个标志,query-options
以查看已安装的 RPM 包含的内容......)SuperUser上一个老问题的回答者建议使用
rpm --rebuild
. 但是,RHEL 7 附带的 RPM 版本似乎不支持此选项。另一种方法是使用
rpmrebuild
,可通过 RHEL 7 上的 EPEL 获得。我能够使用此工具重新创建已安装的软件包。生成的包将与原始包几乎但不完全相同。尤其: