Perché apt pensa di aver bisogno di questa dipendenza aggiuntiva?


9

Sto lavorando su alcune istruzioni di installazione della macchina e sono stato sorpreso di scoprire che apt-get install A Bpuò comportarsi diversamente da apt-get install A && apt-get install B.

Il mio esempio specifico è A == openjdk-7-jdke B == ant.

Quindi, openjdk-7-jdkdipende da openjdk-7-jre-headless, che soddisfa antla dipendenza java6-runtime-headless. Ma se li installi come apt-get install openjdk-7-jdk ant, APT non sembra capirlo e si installa default-jre-headless. Ma se si installa openjdk-7-jdkprima dell'installazione ant, la sua dipendenza è soddisfatta e tutto va bene.

L'APT di solito è abbastanza intelligente da capire questo genere di cose, quindi perché non può farlo in questo caso? Mi piacerebbe avere una migliore comprensione del perché funzioni in questo modo, quindi questo genere di cose non mi farà inciampare in futuro.


Guardando la mia cache apt vedo che openjdk-7-jdk 7 ~ u3-2.1.1 ~ pre1-1ubuntu2 dipende da openjdk-7-jre, che a sua volta dipende da openjdk-7-jre-headless, quindi questa dipendenza è indiretta . la formica dipende direttamente da default-jre-senza testa. Sto usando Precise. Sto solo indovinando, ma apt-get potrebbe iniziare arbitrariamente con formica o iniziare con dipendenze di livello 1 e poi passare a dipendenze di livello 2. In ogni caso, se ti interessa la configurazione finale dei pacchetti (vuoi openjdk-7-jre-headless su default -..- ..) specificarli in modo specifico e individualmente è probabilmente il modo migliore per controllarlo.
John S Gruber,

Sei ancora interessato a questa domanda?
Guntbert,

@guntbert Certo, anche se mi sono rassegnato a credere che non ci sia motivo; è così com'è.
leedm777,

5
Per vedere come funziona il risolutore APT, guarda apt-get install -o Debug::pkgProblemResolver=true package1 package2.... Ciò potrebbe darti un suggerimento sul perché funzioni in questo modo.
Lasall,

Risposte:


2

Sembra che ci sia una sorta di sistema di "peso" che gioca qui:

$ 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

Come puoi vedere antdipende da openjdk-7-jdkuna quantità complicata e complessa di suggerimenti, raccomandazioni e dipendenze, mentre quando si utilizza openjdk-6-jdkla dipendenza è più diretta:

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

Naturalmente i aptitudemetodi di risoluzione delle dipendenze potrebbero essere diversi da quelli di apt-get. A proposito, eseguendo una simulazione di formica senza openjdk-7-jdk installato non estrarre openjdk-6-jdk:

$ 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]? 

Forse se usi gli stessi metodi di me, potresti capire di più, dato che sto usando i test Debian in questo momento e i repository potrebbero essere cambiati nel frattempo.


0

AFAIK, ha i valori predefiniti per soddisfare una dipendenza, quindi se tale dipendenza non è stata soddisfatta prima di installare un pacchetto, installa la dipendenza e quindi installa il pacchetto richiesto.

Questo potrebbe anche essere solo un grosso bug, però.

Ad ogni modo, spero che aiuti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.