有時,當我要求 Zypper 安裝某些東西時,我會收到類似以下內容的訊息:
Problem: foo-tools requires foo-lib, but this requirement cannot be provided
Problem: foo-tools requires foo-lib, but this requirement cannot be provided
uninstallable providers: foo-lib.7.31.13.x86_64
Solution 1: do not install foo-tools
Solution 2: break foo-tools by ignoring some of its dependencies
為什麼 Zypper 認為我出於這個確切原因故意提供的 RPM 是「可卸載的提供者」?這則訊息是什麼意思意思是? RPM 檔案無法讀取嗎?拱門錯了?版本錯誤?到底在煩惱什麼?
答案1
事實證明它foo-lib
本身有未滿足的依賴關係。添加這些解決了問題。
但問題是…為什麼 Zypper 沒有說這就是問題所在?通常,如果發生依賴關係問題,它會告訴您找不到特定的套件。為什麼我收到這條不透明的「可卸載提供者」訊息?
答案2
RPM 在系統中儲存已安裝檔案(例如二進位執行檔和共用程式庫)的資料庫。
某些軟體(例如 foo-tools)需要其他軟體(例如 foo-lib)才能正常運作。此依賴資訊由 RPM 打包程式決定。
如果您有foo-lib 和foo-tools 可作為RPM 檔案使用,但兩者都沒有安裝,您可以在命令列上將它們(全部)提供給RPM(或以zypper 等效的方式),以使RPM看到所有依賴將得到滿足。另一種選擇是先安裝必備包。
如果 foo-lib 又有自己的依賴項,那麼它們也必須被滿足。如果不是,則 foo-lib 不是 foo-lib 的可安裝提供者。
不建議:確保透過其他方式滿足先決條件(手動安裝所需的東西,可能是從原始碼安裝,並強制 Zypper 忽略依賴項。這樣做會在以後引起問題,所以不要這樣做。