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


9

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

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

Então, openjdk-7-jdkdepende de openjdk-7-jre-headless, o que satisfaz anta dependência de java6-runtime-headless. Mas se você instalá-los como apt-get install openjdk-7-jdk ant, o APT não parece entender isso e instala default-jre-headless. Mas se você instalar openjdk-7-jdkantes da instalação ant, sua dependência será satisfeita e tudo ficará bem.

O APT geralmente é inteligente o suficiente para descobrir esse tipo de coisa, então por que não pode fazer isso neste caso? Eu gostaria de entender melhor por que funciona dessa maneira, para que esse tipo de coisa não me traga de novo no futuro.


Observando meu cache apt, vejo que o openjdk-7-jdk 7 ~ u3-2.1.1 ~ pre1-1ubuntu2 depende do openjdk-7-jre, que por sua vez depende do openjdk-7-jre-headless, portanto essa dependência é indireta . O ant depende diretamente do default-jre-headless. Estou usando o Precise. Só estou supondo que o apt-get possa iniciar arbitrariamente com ant, ou começar com dependências de nível 1 e depois passar para as dependências de nível 2. De qualquer forma, se você se preocupa com a configuração final dos pacotes (deseja openjdk-7-jre-headless sobre o padrão -..- ..) especificá-los especificamente e individualmente é provavelmente a melhor maneira de controlar isso.
John S Gruber

Você ainda está interessado nessa pergunta?
guntbert

@ guntbert Claro, embora eu tenha me resignado a acreditar que não há razão; É do jeito que é.
Leedm777

5
Para ver como o resolvedor do APT funciona, veja apt-get install -o Debug::pkgProblemResolver=true package1 package2.... Isso pode lhe dar uma dica de por que está funcionando dessa maneira.
Lasall

Respostas:


2

Parece que existe algum tipo de sistema de "peso" sendo reproduzido 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, antdepende de openjdk-7-jdkuma quantidade complicada e complexa de sugestões, recomendações e dependência, enquanto o uso openjdk-6-jdkda dependência é mais direto:

$ 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 aptitudemétodos de resolução de dependências podem ser diferentes dos apt-get. BTW, executar uma simulação do ant sem o openjdk-7-jdk instalado não puxou o 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, poderá descobrir mais, já que estou usando o teste Debian agora e os repositórios podem ter mudado enquanto isso.


0

AFAIK, possui padrões para satisfazer uma dependência; portanto, se essa dependência não tiver sido satisfeita antes da instalação de um pacote, instala a dependência e depois instala o pacote solicitado.

Isso também pode ser apenas um grande erro.

De qualquer maneira, espero que ajude.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.