So bringen Sie APT/Aptitude dazu, ein aktuelleres virtuelles Paket einem realen vorzuziehen

So bringen Sie APT/Aptitude dazu, ein aktuelleres virtuelles Paket einem realen vorzuziehen

Ich habe vor Kurzem ein Paket erstellt, das mehrere virtuelle Pakete bereitstellt, genauer gesagt snmp, das libsnmp-base, libsnmp30 usw. bereitstellt:

 - 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

Es ist auf meinem System installiert und in meinem Online-PPA bereitgestellt. Wenn ich versuche, ein anderes Paket (php7.0-snmp) zu installieren, das von libsnmp30 und libsnmp-base abhängt, bietet mir APT die Möglichkeit, snmp zu deinstallieren, um die erforderlichen Abhängigkeiten zu installieren.

Es scheint, dass APT immer echte Pakete gegenüber virtuellen bevorzugt, trotz der Tatsachen, dass:

  • die virtuellen haben eine aktuellere Version
  • Sie sind bereits installiert

Aptitude bietet mehrere Lösungen, aber keine davon beinhaltet die bevorzugte und logischste: Behalten Sie SNMP, da es bereits die aktuellsten benötigten Abhängigkeiten bietet:

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

Wie kann ich php7.0-snmp installieren?ohne SNMP deinstallieren zu müssen?

Antwort1

Virtuelle Pakete können Ihnen hier nicht helfen.das Debian-Richtlinienhandbuch:

Wenn einem Beziehungsfeld eine Versionsnummer zugeordnet ist, werden nur echte Pakete berücksichtigt, um zu sehen, ob die Beziehung erfüllt ist (oder das Verbot bei einem Konflikt oder Bruch verletzt wurde). Mit anderen Worten, wenn eine Versionsnummer angegeben ist, ist dies eine Aufforderung, alle Provides für diesen Paketnamen zu ignorieren und nur echte Pakete zu berücksichtigen. Der Paketmanager geht davon aus, dass ein Paket, das dieses virtuelle Paket bereitstellt, nicht die „richtige“ Version hat. Ein Provides-Feld darf keine Versionsnummern enthalten, und die Versionsnummer des konkreten Pakets, das ein bestimmtes virtuelles Paket bereitstellt, wird bei der Prüfung einer Abhängigkeit von oder eines Konflikts mit dem virtuellen Paketnamen nicht berücksichtigt.

Ein Ausweg besteht darin, für jedes der bereitgestellten Pakete Minimalpakete zu erstellen, die nur von Ihrem aktuellen snmpPaket abhängen (Übergangspakete). Sie sind von einer höheren Version und werden automatisch bevorzugt.

verwandte Informationen