apt-get: razões para “… mas não vai ser instalado” [duplicado]

2

Então mais uma vez o apt-get me incomodou com a mensagem infame de que a instalação do pacote falhou porque uma dependência “não será instalada”:

~ $ sudo apt-get install php-apcu
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:
 php-apcu : Depends: phpapi-20151012
            Recommends: php-apcu-bc but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Pelo que entendi, o padrão é instalar todas as dependências ausentes junto com os pacotes solicitados. O que faria com que o apt-get se recusasse a instalar certas dependências? (E se há mais de uma coisa que leva a isso, como posso descobrir qual é?)

    
por user149408 23.09.2017 / 19:46

1 resposta

1

TL; DR: <foobar> is not going to be installed é uma sugestão de que a dependência <foobar> tem alguma dependência que não pode ser satisfeita por algum motivo.

Executar novamente apt-get e incluir explicitamente a dependência problemática na linha de comando deve fornecer uma ideia melhor de onde está o problema.

No caso acima, recebi isso:

~ $ sudo apt-get install php-apcu php-apcu-bc
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:
 php-apcu : Depends: phpapi-20151012
 php-apcu-bc : Depends: phpapi-20151012
E: Unable to correct problems, you have held broken packages.

e:

~ $ sudo apt-get install php-apcu php-apcu-bc phpapi-20151012
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package phpapi-20151012 is a virtual package provided by:
  php7.0-phpdbg 7.0.22-3
  php7.0-fpm 7.0.22-3
  php7.0-cli 7.0.22-3
  php7.0-cgi 7.0.22-3
  libphp7.0-embed 7.0.22-3
  libapache2-mod-php7.0 7.0.22-3
You should explicitly select one to install.

E: Package 'phpapi-20151012' has no installation candidate

Portanto, o problema aqui é que o pacote originalmente solicitado php-apcu depende de php-apcu-bc , que por sua vez depende de phpapi-20151012 . O último não é um pacote diretamente instalável, mas um recurso fornecido por vários pacotes, assim o apt-get não pode determinar automaticamente o que ele precisa instalar.

A causa raiz neste caso específico é que eu tentei instalar o php-apcu , um pacote PHP7, em um sistema executando o PHP5, para o qual o pacote correto seria php5-apcu .

    
por 23.09.2017 / 20:10