Warum glaubt apt, dass es diese zusätzliche Abhängigkeit braucht?


9

Ich arbeite an einigen Anweisungen zur Maschineneinrichtung und war überrascht, dass apt-get install A Bsich das anders verhalten kann als apt-get install A && apt-get install B.

Mein konkretes Beispiel ist A == openjdk-7-jdkund B == ant.

Kommt also openjdk-7-jdkdarauf an openjdk-7-jre-headless, welche die antAbhängigkeit befriedigt java6-runtime-headless. Wenn Sie sie jedoch als installieren apt-get install openjdk-7-jdk ant, scheint APT dies nicht herauszufinden und zu installieren default-jre-headless. Wenn Sie jedoch openjdk-7-jdkvor der Installation installieren ant, ist die Abhängigkeit erfüllt und alles ist gut.

APT ist normalerweise klug genug, um so etwas herauszufinden. Warum kann es das in diesem Fall nicht? Ich hätte gerne ein besseres Verständnis dafür, warum es so funktioniert, damit mich so etwas in Zukunft nicht mehr stört.


Wenn ich mir meinen passenden Cache ansehe, sehe ich, dass openjdk-7-jdk 7 ~ u3-2.1.1 ~ pre1-1ubuntu2 von openjdk-7-jre abhängt, was wiederum von openjdk-7-jre-headless abhängt, sodass diese Abhängigkeit indirekt ist . Ameise hängt direkt von Standard-Jre-Headless ab. Ich benutze Precise. Ich vermute nur, aber apt-get könnte entweder willkürlich mit ant beginnen oder mit Abhängigkeiten der Ebene 1 beginnen und dann zu Abhängigkeiten der Ebene 2 wechseln. In jedem Fall ist es wahrscheinlich der beste Weg, dies zu kontrollieren, wenn Sie sich für die endgültige Konfiguration von Paketen interessieren (möchten Sie openjdk-7-jre-headless über default -..- ..), indem Sie diese spezifisch und individuell angeben.
John S Gruber

Interessieren Sie sich noch für diese Frage?
Guntbert

@guntbert Sicher, obwohl ich mich damit abgefunden habe zu glauben, dass es keinen Grund gibt; es ist einfach so wie es ist.
leedm777

5
Sehen Sie sich an, wie der APT-Resolver funktioniert apt-get install -o Debug::pkgProblemResolver=true package1 package2.... Das könnte Ihnen einen Hinweis geben, warum es so funktioniert.
Lasall

Antworten:


2

Es scheint, dass hier eine Art "Gewicht" -System spielt:

$ aptitude why ant openjdk-7-jdk
p   ant                 Recommends ant-optional       
p   ant-optional        Suggests   libgnumail-java    
p   libgnumail-java     Suggests   libgnumail-java-doc
p   libgnumail-java-doc Recommends default-jdk-doc    
p   default-jdk-doc     Depends    openjdk-7-doc      
p   openjdk-7-doc       Suggests   openjdk-7-jdk

Wie Sie sehen können, anthängt dies von openjdk-7-jdkeiner komplizierten und komplizierten Menge an Vorschlägen, Empfehlungen und Abhängigkeiten ab, während die Verwendung openjdk-6-jdkder Abhängigkeit direkter ist:

$ aptitude why ant openjdk-6-jdk
p   ant           Suggests default-jdk | java-compiler | java-sdk
p   openjdk-6-jdk Provides java-sdk

Natürlich können sich die aptitudeMethoden zur Auflösung von Abhängigkeiten von denen unterscheiden apt-get. Übrigens: Wenn Sie eine Ameisensimulation ohne installiertes openjdk-7-jdk ausführen, wird openjdk-6-jdk nicht gezogen:

$ sudo apt-get install ant
[sudo] password for braiam: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  ant-optional
Suggested packages:
  default-jdk java-compiler java-sdk ant-gcj ant-doc liboro-java junit
  libregexp-java jython antlr libbcel-java libjdepend-java libgnumail-java
  libcommons-net-java libjsch-java javacc ant-optional-gcj
The following NEW packages will be installed:
  ant ant-optional
0 upgraded, 2 newly installed, 0 to remove and 9 not upgraded.
Need to get 2,234 kB of archives.
After this operation, 3,041 kB of additional disk space will be used.
Do you want to continue [Y/n]? 

Wenn Sie dieselben Methoden wie ich verwenden, können Sie möglicherweise mehr herausfinden, da ich gerade Debian-Tests verwende und die Repositorys sich inzwischen möglicherweise geändert haben.


0

AFAIK hat Standardeinstellungen für die Erfüllung einer Abhängigkeit. Wenn diese Abhängigkeit also vor der Installation eines Pakets nicht erfüllt wurde, wird die Abhängigkeit installiert und anschließend das angeforderte Paket installiert.

Dies könnte jedoch auch nur ein großer Fehler sein.

Ich hoffe, das hilft.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.