¿Por qué cree que necesita esta dependencia adicional?


9

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

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

Entonces, openjdk-7-jdkdepende de openjdk-7-jre-headlessqué satisface antla dependencia java6-runtime-headless. Pero si los instala como apt-get install openjdk-7-jdk ant, APT no parece resolver esto e instala default-jre-headless. Pero si instala openjdk-7-jdkantes 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 vuelva a hacer tropezar en el futuro.


Al mirar mi caché de apt, veo que openjdk-7-jdk 7 ~ u3-2.1.1 ~ pre1-1ubuntu2 depende de openjdk-7-jre, que a su vez depende de openjdk-7-jre-headless, por lo que esta dependencia es indirecta . hormiga depende directamente de default-jre-headless. Estoy usando Precise. Solo estoy adivinando, pero apt-get podría comenzar arbitrariamente con hormiga o comenzar con dependencias de nivel 1 y luego ir a dependencias de nivel 2. En cualquier caso, si le importa la configuración final de los paquetes (quiere openjdk-7-jre-headless over default -..- ..), especificarlos específica e individualmente es probablemente la mejor manera de controlar eso.
John S Gruber

¿Todavía estás interesado en esa pregunta?
Guntbert

@guntbert Claro, aunque me resigné a creer que no hay razón; es tal como es.
leedm777

55
Para ver cómo funciona la resolución APT, mira apt-get install -o Debug::pkgProblemResolver=true package1 package2.... Eso podría darle una pista de por qué funciona de esa manera.
Lasall

Respuestas:


2

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

$ 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 puede ver, antdepende de openjdk-7-jdkuna cantidad complicada e intrincada de sugerencias, recomendaciones y dependencia, mientras que al usar openjdk-6-jdkla dependencia es más directo:

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

Por supuesto, los aptitudemétodos de resolución de dependencias podrían ser diferentes apt-get. Por cierto, ejecutando una simulación de hormiga sin openjdk-7-jdk instalado, no tire de 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 averiguar más, ya que estoy usando las pruebas de Debian en este momento y los repositorios podrían haber cambiado mientras tanto.


0

AFAIK, tiene valores predeterminados para satisfacer una dependencia, por lo que si esa dependencia no se ha satisfecho antes de instalar un paquete, instala la dependencia y luego instala el paquete solicitado.

Sin embargo, esto también podría ser un gran error.

De cualquier manera, espero que ayude.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.