如何讓 APT/Aptitude 更喜歡更新的虛擬包而不是真實的包

如何讓 APT/Aptitude 更喜歡更新的虛擬包而不是真實的包

我最近建立了一個提供多個虛擬的套件,更具體地說是 snmp,它提供了 libsnmp-base、libsnmp30 等:

 - Version: 5.8~git20160427.8d07349f-14
 - Depends: ...
 - Provides:
   snmp,libsnmp-base,libsnmp-dev,libsnmp30,python-snmp,snmpd,snmptrapd,tkmib
 - Conflicts:
   libsnmp-base,libsnmp-dev,libsnmp30,python-snmp,snmpd,snmptrapd,tkmib
 - Replaces:
   libsnmp-base,libsnmp-dev,libsnmp30,python-snmp,snmpd,snmptrapd,tkmib

它安裝在我的系統上並在我的線上 PPA 上提供。當我嘗試安裝另一個依賴 libsnmp30 和 libsnmp-base 的軟體包 (php7.0-snmp) 時,APT 為我提供了卸載 snmp 的選項,以便安裝所需的依賴項。

看起來 APT 總是更喜歡真實的包而不是虛擬的包,儘管事實是:

  • 虛擬的有更新的版本
  • 他們已經安裝了

Aptitude 提供了更多解決方案,但沒有一個涉及首選且最合乎邏輯的解決方案:保留 snmp,因為它已經提供了最新所需的依賴項:

sudo aptitude install php7.0-snmpThe following NEW packages will be installed:
  libsnmp30{a} php7.0-snmp 
0 packages upgraded, 2 newly installed, 0 to remove and 1 not upgraded.
Need to get 832 kB of archives. After unpacking 3,382 kB will be used.
The following packages have unmet dependencies:
 snmp : Conflicts: libsnmp30 but 5.7.3+dfsg-1ubuntu4 is to be installed.
The following actions will resolve these dependencies:

     Remove the following packages:               
1)     snmp                                       

     Install the following packages:              
2)     libsnmp-base [5.7.3+dfsg-1ubuntu4 (xenial)]

Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:

     Keep the following packages at their current version:
1)     libsnmp30 [Not Installed]                          
2)     php7.0-snmp [Not Installed]                        

Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:

     Install the following packages:                                           
1)     libsnmp-base [5.7.3+dfsg-1ubuntu4 (xenial)]                             

     Downgrade the following packages:                                         
2)     snmp [5.8~git20160427.8d07349f-14 (now) -> 5.7.3+dfsg-1ubuntu4 (xenial)]

Accept this solution? [Y/n/q/?] n

*** No more solutions available ***

如何安裝php7.0-snmp無需卸載 snmp

答案1

虛擬包在這裡無法幫助您。從Debian 政策手冊

如果關係欄位附加了版本號,則僅考慮真實的套件來查看關係是否滿足(或是否違反禁止,導致衝突或破壞)。換句話說,如果指定了版本號,則這是忽略該套件名稱的所有 Provides 並僅考慮真實套件的請求。套件管理器將假定提供該虛擬套件的套件不是「正確」的版本。 Provides 欄位可以不包含版本號,並且在考慮與虛擬套件名稱的依賴或衝突時,將不考慮提供特定虛擬套件的具體套件的版本號。

一種解決方法是為每個提供的包創建最小的包,這僅取決於您的實際snmp包(過渡包)。它們將具有更高版本並自動成為首選。

相關內容