GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Por qué Apt piensa que necesita esta dependencia adicional?

Estoy trabajando en algunas instrucciones de configuración de la máquina y me sorprendió descubrir que apt-get install A B puede comportarse de manera diferente a apt-get install A && apt-get install B .

Mi ejemplo específico es A == openjdk-7-jdk y B == ant .

Entonces, openjdk-7-jdk depende de openjdk-7-jre-headless , que satisface ant dependencia de java6-runtime-headless . Pero si los instala como apt-get install openjdk-7-jdk ant , APT no parece darse cuenta de esto e instala default-jre-headless . Pero si instala openjdk-7-jdk antes de instalar ant , su dependencia está satisfecha y todo está bien.

APT suele ser lo suficientemente inteligente como para resolver este tipo de cosas, entonces, ¿por qué no puede hacerlo en este caso? Me gustaría tener una mejor comprensión de por qué funciona de esta manera, para que este tipo de cosas no me vuelvan a hacer tropezar en el futuro.

Respuesta aceptada:

Parece que aquí hay algún tipo de sistema de "peso":

$ 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

Como puedes ver ant depende de openjdk-7-jdk debido a una cantidad complicada e intrincada de sugerencias, recomendaciones y dependencias, mientras que al usar openjdk-6-jdk la dependencia es más directa:

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

Por supuesto aptitude métodos de resolución de dependencias, podrían ser diferentes de apt-get 's. Por cierto, ejecutar una simulación de ant sin openjdk-7-jdk instalado no extrajo 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]? 

Tal vez si usa los mismos métodos que yo, podría descubrir más, ya que estoy usando pruebas de Debian en este momento y los repositorios podrían haber cambiado mientras tanto.

Relacionado:¿Cómo agregar una entrada para Ubuntu al menú de inicio de Windows 7 en Ubuntu?
Ubuntu
  1. Linux:¿por qué Apt Autoremove no elimina todos los paquetes antiguos del kernel a la vez?

  2. ¿Por qué este script que ejecuta Su nunca parece terminar si cambio de usuario dentro del script?

  3. ¿Por qué sale esta canalización de shell?

  4. ¿Por qué esta expresión regular no funciona en Linux?

  5. ¿Por qué este comando ldapadd se cierra con un error de sintaxis no válida?

¿Por qué Ctrl + flecha izquierda no salta palabras?

¿Por qué salta el cursor al escribir?

¿Cómo elige Apt el paquete específico para instalar con el fin de proporcionar un paquete virtual necesario como dependencia?

¿Por qué Ping -f actúa así?

¿Por qué Libreoffice parece viejo?

¿Por qué este código falla con la aleatorización de direcciones activada?