Как заставить 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. Когда я пытаюсь установить другой пакет (php7.0-snmp), который зависит от libsnmp30 и libsnmp-base, 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пакета (переходные пакеты). Они будут иметь более высокую версию и будут автоматически предпочтительны.

Связанный контент