Estou trabalhando em algumas instruções de configuração da máquina e fiquei surpreso ao descobrir que apt-get install A B
elas podem se comportar de maneira diferente apt-get install A && apt-get install B
.
Meu exemplo específico é A == openjdk-7-jdk
e B == ant
.
Então, openjdk-7-jdk
depende de openjdk-7-jre-headless
, o que satisfaz ant
a 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-jdk
antes 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.
fonte
apt-get install -o Debug::pkgProblemResolver=true package1 package2...
. Isso pode lhe dar uma dica de por que está funcionando dessa maneira.Respostas:
Parece que existe algum tipo de sistema de "peso" sendo reproduzido aqui:
Como você pode ver,
ant
depende deopenjdk-7-jdk
uma quantidade complicada e complexa de sugestões, recomendações e dependência, enquanto o usoopenjdk-6-jdk
da dependência é mais direto:É claro que os
aptitude
métodos de resolução de dependências podem ser diferentes dosapt-get
. BTW, executar uma simulação do ant sem o openjdk-7-jdk instalado não puxou o openjdk-6-jdk: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.
fonte
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.
fonte