Por que o apt acha que precisa dessa dependência extra?

9

Estou trabalhando em algumas instruções de configuração de máquina e fiquei surpreso ao descobrir que apt-get install A B pode se comportar de maneira diferente de apt-get install A && apt-get install B .

Meu exemplo específico é A == openjdk-7-jdk e B == ant .

Portanto, openjdk-7-jdk depende de openjdk-7-jre-headless , o que satisfaz a ant da dependência de java6-runtime-headless . Mas se você instalá-los como apt-get install openjdk-7-jdk ant , o APT não parece descobrir isso e instala default-jre-headless . Mas se você instalar openjdk-7-jdk antes de instalar ant , sua dependência é satisfeita e tudo é bom.

O APT é geralmente inteligente o suficiente para descobrir esse tipo de coisa, então por que não pode fazê-lo neste caso? Eu gostaria de ter um melhor entendimento de como isso funciona dessa maneira, então esse tipo de coisa não me atrapalha no futuro.

    
por leedm777 17.05.2012 / 18:20

2 respostas

2

Parece que há algum tipo de sistema de "peso" jogando aqui:

$ 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 você pode ver, ant depende de openjdk-7-jdk devido a uma quantidade complicada e intrincada de sugestões, recomendações e dependência, enquanto ao usar openjdk-6-jdk , a dependência é mais direta:

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

É claro que os métodos aptitude de resolução de dependência podem ser diferentes de apt-get . BTW, executando uma simulação de formiga sem openjdk-7-jdk instalado não puxou 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]? 

Talvez se você usar os mesmos métodos que eu, você poderia descobrir mais, já que eu estou usando o teste Debian agora e os repositórios poderiam ter mudado enquanto isso.

    
por Braiam 16.09.2013 / 05:14
0

AFAIK, tem padrões para satisfazer uma dependência, portanto, se essa dependência não for satisfeita antes da instalação de um pacote, ele instala a dependência e, em seguida, instala o pacote solicitado.

Isso também pode ser um grande bug.

De qualquer forma, espero que ajude.

    
por haneefmubarak 11.04.2013 / 01:35