在不使用 Yum 記憶體的情況下,我可以在安裝後檢索或重建 RPM 嗎?
我的公司為各種客戶管理一些 RHEL 7 系統。特別是一位客戶從其係統上的非預設儲存庫安裝了一個軟體包。幾週前,該儲存庫突然意外下線。現在客戶想要一個安裝了相同軟體包的新系統。但是,我們無法獲得該包的副本 - 上游 repo 處於離線狀態,我們
/var/cache/yum
每天通過自動化流程(使用yum clean
)進行清理以節省生產系統的磁碟空間。我們正在與供應商聯繫以獲取包裹的副本,但到目前為止還沒有成功。假設 Yum 記憶體不包含副本,有沒有辦法在通過 Yum 安裝 RPM 包後檢索或重建它?
已經有幾個問題(1、2 )解決了獲取已安裝包的副本,但所有答案都取決於 Yum 記憶體。
顯然,在我的特定情況下,最好的答案是告訴客戶,在供應商採取行動之前我們無能為力,但是為了這個問題,假設客戶是我們最大的客戶,他們會離開我們如果我們沒有在安裝了他們的軟體的情況下啟動新系統,那麼我們必須獲得該軟體包的副本,否則我們公司將面臨破產的風險。(實際上我只是好奇是否有辦法做到這一點,我的生計實際上並不依賴於它。)
SuperUser上一個老問題的回答者建議使用
rpm --rebuild
. 但是,RHEL 7 附帶的 RPM 版本似乎不支持此選項。另一種方法是使用
rpmrebuild
,可通過 RHEL 7 上的 EPEL 獲得。我能夠使用此工具重新創建已安裝的軟體包。生成的包將與原始包幾乎但不完全相同。尤其:
- 磁碟上文件的任何更改都將被新軟體包拾取(最有可能發生在配置文件中)
- 即使原始包已簽名,該包也將是未簽名的,因為除了原始包簽名者之外,沒有人擁有用於簽名包的私鑰的副本
緩慢煩人的手動方式可能會沿著
$ 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
並--provides
可能需要手動包含在規範中;基本上man rpm
並遍歷標誌部分中提到的每個標誌,query-options
以查看已安裝的 RPM 包含的內容……)