GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Perché Apt pensa di aver bisogno di questa dipendenza extra?

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

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

Quindi, openjdk-7-jdk dipende da openjdk-7-jre-headless , che soddisfa ant 's dipendenza java6-runtime-headless . Ma se li installi come apt-get install openjdk-7-jdk ant , APT non sembra capirlo e installa default-jre-headless . Ma se installi openjdk-7-jdk prima di installare ant , la sua dipendenza è soddisfatta e tutto va bene.

APT di solito è abbastanza intelligente da capire questo genere di cose, quindi perché non può farlo in questo caso? Mi piacerebbe capire meglio perché funziona in questo modo, in modo che questo genere di cose non mi faccia inciampare di nuovo in futuro.

Risposta accettata:

Sembra che ci sia una specie di sistema di "peso" in riproduzione 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 ant dipende da openjdk-7-jdk a causa di una quantità complicata e intricata di suggerimenti, consigli e dipendenze, durante l'utilizzo di openjdk-6-jdk la 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 aptitude metodi di risoluzione delle dipendenze, potrebbero essere diversi da apt-get 'S. A proposito, l'esecuzione di una simulazione di ant senza openjdk-7-jdk installato non ha eseguito il pull di 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 i miei stessi metodi, potresti capirne di più, dal momento che sto usando Debian testing in questo momento e i repository potrebbero essere cambiati nel frattempo.

Correlati:come aggiungere una voce per Ubuntu al menu di avvio di Windows 7 in Ubuntu?
Ubuntu
  1. Perché Apt non aggiorna più il kernel?

  2. Perché questo script in esecuzione su sembra non terminare mai se cambio utente all'interno dello script?

  3. Perché questo codice si arresta in modo anomalo con la randomizzazione degli indirizzi attiva?

  4. Perché questa espressione regolare non funziona su Linux?

  5. Perché questo comando ldapadd si chiude con un errore di sintassi non valido?

Perché Ctrl + Freccia sinistra non salta le parole?

Perché Ubuntu ha bisogno di due kernel?

Perché il cursore salta durante la digitazione?

Perché Ping -f si comporta in questo modo?

Perché Libreoffice sembra vecchio?

Perché questa pipeline di shell termina?