Как заставить Apt / Aptitude предпочесть более свежий виртуальный пакет, чем реальный

Недавно я создал пакет, который предоставляет несколько виртуальных пакетов, в частности, snmp, который предоставляет libsnmp-base, libsnmp30 и т. Д .:

  • Версия: 5.8 ~ git20160427.8d07349f-14
  • Зависит от: ...
  • Предоставляет: snmp, libsnmp-base, libsnmp-dev, libsnmp30, python-snmp, snmpd, snmptrapd, tkmib
  • Конфликты: libsnmp-base, libsnmp-dev, libsnmp30, python-snmp, snmpd, snmptrapd, tkmib
  • Заменяет: libsnmp-base, libsnmp-dev, libsnmp30, python-snmp, snmpd, snmptrapd, tkmib

Он установлен в моей системе и предоставляется в моей сети через поверенного Когда я пытаюсь установить другой пакет (php7.0-snmp), который зависит от libsnmp30 и libsnmp-base, Apt предлагает мне удалить snmp, чтобы установить необходимые зависимости. Похоже, что Apt всегда предпочитает реальные пакеты виртуальным, несмотря на то, что:

  • виртуальные имеют более свежую версию
  • , они уже установлены

Aptitude предлагает больше решений, но ни одно не включает предпочтительный и наиболее логичный вариант: keep 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
задан 5 May 2016 в 13:39

1 ответ

Виртуальные пакеты не могут помочь Вам здесь. От Руководство политики Debian:

, Если полю отношений присоединили номер версии, только реальные пакеты, как будут полагать, будут видеть, удовлетворены ли отношения (или нарушенный запрет для конфликта или поломки). Другими словами, если номер версии указан, это - запрос для игнорирования, все Предусматривает то имя пакета, и рассмотрите только реальные пакеты. Диспетчер пакетов предположит, что пакет, если тот виртуальный пакет не имеет "правильной" версии. Поле Provides не может содержать номера версий и номер версии конкретного пакета, который обеспечивает, конкретный виртуальный пакет не рассмотрят при рассмотрении зависимости от или конфликта с виртуальным именем пакета.

Один выход должен создать минимальные пакеты для каждого из обеспеченных пакетов, которые просто зависят от Вашего фактического snmp пакет ( переходные пакеты ). Они будут иметь старшую версию и предпочтены автоматически.

0
ответ дан 5 May 2016 в 23:39
  • 1
    @Philippos, я соглашаюсь с Вами, но я хотел включать возможность, что его определением сервиса было определение системной службы, а не фоновой программы, взаимодействующей с user' s программа. – jpezz 18 October 2017 в 08:47

Другие вопросы по тегам:

Похожие вопросы: