Isso é mais ou menos replicação de esta questão . Espero que o AskUbuntu seja o lugar mais adequado para isso.
Descrição resumida:
apt
não pode atualizar um pacote se algumas dependências estiverem faltando (está OK), mas o que eu observo no ubuntu 14.04 é que ele faz isso com o código de saída 0 (questão 1) e sem relatar 'dependências não atendidas' questão 2).
Descrição detalhada:
Estou no Ubuntu 14.04, versão apt 1.0.1ubuntu2.6
# uname -a
Linux myhost 3.13.0-30-generic #55-Ubuntu SMP Fri Jul 4 21:40:53 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
# lsb_release -c
Codename: trusty
# dpkg -l apt
||/ Name Version Architecture Description
+++-===============-==============-============-====================================
ii apt 1.0.1ubuntu2.6 amd64 commandline package manager
Eu tenho um pacote instalado, versão 0.03, sem dependências:
# dpkg -l fake-test-package
||/ Name Version Architecture Description
+++-=====================-===============-===============-===============================================
ii fake-test-package 0.03-1 all package to test apt
# apt-cache depends fake-test-package=0.03-1
fake-test-package
Gostaria de atualizar o pacote para a versão 0.04 (que tem dependências não satisfeitas very-strange-dependency
):
# apt-cache depends fake-test-package=0.04-1
fake-test-package
Depends: <very-strange-dependency>
Então, eu executo apt-get install
:
# apt-get install fake-test-package=0.04-1
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
fake-test-package
0 upgraded, 0 newly installed, 0 to remove and 217 not upgraded.
# echo $?
0
Tudo parece OK e o código de saída é 0, mas os pacotes não foram atualizados:
# dpkg -l fake-test-package
||/ Name Version Architecture Description
+++-=====================-===============-===============-===============================================
ii fake-test-package 0.03-1 all package to test apt
Aqui está o problema, pois apt
silenciosamente se recusa a atualizar o pacote e eu não sei nem o que aconteceu nem por quê.
No Ubuntu 12.04, observo o comportamento diferente: código de saída = 100 e relatório de 'dependências não atendidas':
precise# apt-get install fake-test-package=0.04-1
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
fake-test-package : Depends: very-strange-dependency but it is not installable
E: Unable to correct problems, you have held broken packages.
precise# echo $?
100
O que é interessante, o problema ocorre apenas na atualização do pacote existente. Se eu remover a versão 0.03 do sistema e tentar instalar o 0,04 diretamente, o apt
se comportará de uma maneira esperada:
trusty# apt-get purge fake-test-package
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
fake-test-package*
0 upgraded, 0 newly installed, 1 to remove and 217 not upgraded.
After this operation, 13.3 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 157742 files and directories currently installed.)
Removing fake-test-package (0.03-1) ...
Purging configuration files for fake-test-package (0.03-1) ...
trusty# apt-get install fake-test-package=0.04-1
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
fake-test-package : Depends: very-strange-dependency but it is not installable
E: Unable to correct problems, you have held broken packages.
trusty# echo $?
100
A questão principal:
Como posso fazer apt
reportar dependências não atendidas na atualização de um pacote instalado e mostrar atualizações com falha através de código de saída diferente de zero?