Cómo hacer que APT/Aptitude prefiera un paquete virtual más reciente a uno real

Cómo hacer que APT/Aptitude prefiera un paquete virtual más reciente a uno real

Recientemente he creado un paquete que proporciona varios paquetes virtuales, más específicamente snmp, que proporciona libsnmp-base, libsnmp30, etc.

 - 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

Está instalado en mi sistema y se proporciona en mi PPA en línea. Cuando intento instalar otro paquete (php7.0-snmp) que depende de libsnmp30 y libsnmp-base, APT me ofrece la opción de desinstalar snmp para instalar las dependencias requeridas.

Parece que la APT siempre prefiere los paquetes reales a los virtuales, a pesar de que:

  • los virtuales tienen una versión más reciente
  • ya estan instalados

Aptitude ofrece más soluciones, pero ninguna incluye la preferida y más lógica: mantener snmp porque ya ofrece las dependencias necesarias más recientes:

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 ***

¿Cómo puedo instalar php7.0-snmp?sin tener que desinstalar snmp?

Respuesta1

Los paquetes virtuales no pueden ayudarte aquí. Deel manual de políticas de debian:

Si un campo de relación tiene un número de versión adjunto, solo se considerarán paquetes reales para ver si se cumple la relación (o se viola la prohibición, por un conflicto o ruptura). En otras palabras, si se especifica un número de versión, se trata de una solicitud para ignorar todos los proveedores de ese nombre de paquete y considerar solo los paquetes reales. El administrador de paquetes asumirá que un paquete que proporciona ese paquete virtual no es de la versión "correcta". Un campo Proporciona no puede contener números de versión, y el número de versión del paquete concreto que proporciona un paquete virtual en particular no se tendrá en cuenta al considerar una dependencia o un conflicto con el nombre del paquete virtual.

Una salida es crear paquetes mínimos para cada uno de los paquetes proporcionados, que solo dependen de su snmppaquete real (paquetes de transición). Serán de una versión superior y se preferirán automáticamente.

información relacionada