apt-get não pode instalar uma versão antiga específica do python-nova

0

Existe uma questão semelhante, apt -get não pode instalar uma versão específica listada na política do apt-cache . Mas esse não é meu caso.

Eu quero instalar uma versão antiga específica do python-nova (1: 2013.2.3-0ubuntu1 ~ cloud0), mas falhei, foi o que eu fiz:

root@ip-10-20-17:~# apt-cache policy python-nova
python-nova:
  Installed: (none)
  Candidate: 1:2014.1.3-0ubuntu1~cloud0.1
  Version table:
     1:2014.1.3-0ubuntu1~cloud0.1 0
        900 http://apt.myserver.com/game-cloud-ops/ precise/main amd64 Packages
     1:2014.1.2-0ubuntu1.1~cloud0-5 0
        900 http://apt.myserver.com/game-cloud-ops/ precise/main amd64 Packages
     1:2014.1.2-0ubuntu1.1~cloud0-4 0
        900 http://apt.myserver.com/game-cloud-ops/ precise/main amd64 Packages
     1:2014.1.2-0ubuntu1.1~cloud0-2 0
        900 http://apt.myserver.com/game-cloud-ops/ precise/main amd64 Packages
     1:2014.1.2-0ubuntu1.1~cloud0~-1 0
        900 http://apt.myserver.com/game-cloud-ops/ precise/main amd64 Packages
     1:2014.1.2-0ubuntu1.1~cloud063 0
        900 http://apt.myserver.com/game-cloud-ops/ precise/main amd64 Packages
     1:2014.1.2-0ubuntu1.1~cloud062 0
        900 http://apt.myserver.com/game-cloud-ops/ precise/main amd64 Packages
     1:2014.1.2-0ubuntu1.1~cloud061 0
        900 http://apt.myserver.com/game-cloud-ops/ precise/main amd64 Packages
     1:2014.1.2-0ubuntu1.1~cloud0~3 0
        900 http://apt.myserver.com/game-cloud-ops/ precise/main amd64 Packages
     1:2013.2.3-0ubuntu1~cloud0 0
        -10 http://apt.myserver.com/ubuntu-cloud-archive/ precise-updates/havana/main amd64 Packages
     2012.1.3+stable-20130423-e52e6912-0ubuntu1.4 0
        900 http://mirror.myserver.com/ubuntu/ precise-security/main amd64 Packages
        900 http://mirror.myserver.com/ubuntu/ precise-updates/main amd64 Packages
     2012.1-0ubuntu2 0
        900 http://mirror..myserver.com/ubuntu/ precise/main amd64 Packages


root@ip-10-20-17:~# apt-get -o Debug::pkgProblemResolver=yes  install python-nova=1:2013.2.3-0ubuntu1~cloud0
Reading package lists... Done
Building dependency tree... 0%
Building dependency tree       
Reading state information... Done
Starting
Starting 2
Investigating (0) python-nova [ amd64 ] < none -> 1:2014.1.3-0ubuntu1~cloud0.1 > ( python )
Broken python-nova:amd64 Depends on python-anyjson [ amd64 ] < none -> 0.3.3-1~cloud0 > ( python ) (>= 0.3.3)
.....
.....
.....
The following packages have unmet dependencies:
 python-nova : Depends: python-anyjson (>= 0.3.3) but 0.3.1-1build1 is to be installed
               Depends: python-boto (>= 2.4.0) but 2.2.2-0ubuntu3 is to be installed
               Depends: python-cinderclient (>= 1:1.0.5) but it is not installable
               Depends: python-eventlet (>= 0.13.0) but 0.9.16-1ubuntu4.2 is to be installed
               Depends: python-greenlet (>= 0.3.2) but 0.3.1-1ubuntu5.1 is to be installed
               Depends: python-glanceclient (>= 1:0.9.0) but it is not installable
               Depends: python-keystoneclient (>= 1:0.3.2) but 2012.1-0ubuntu1 is to be installed
               Depends: python-neutronclient (>= 1:2.3.0) but it is not installable
               Depends: python-jsonschema (>= 1.3.0) but it is not installable
               Depends: python-kombu (>= 2.5.12) but 1.4.3-1 is to be installed
               Depends: python-netaddr (>= 0.7.6) but 0.7.5-4build2 is to be installed
               Depends: python-oslo.config (>= 1:1.2.0) but it is not installable
               Depends: python-paramiko (>= 1.8.0) but 1.7.7.1-2ubuntu1 is to be installed
               Depends: python-sqlalchemy-ext (>= 0.7.8-1~) but 0.7.4-1ubuntu0.1 is to be installed or
                        python-sqlalchemy (< 0.6.3-2) but 0.7.4-1ubuntu0.1 is to be installed
               Depends: python-stevedore (>= 0.10) but it is not installable
               Depends: python-webob (>= 1.2.3) but 1.1.1-1ubuntu0 is to be installed
               Depends: python-pbr but it is not installable
               Depends: python-sqlalchemy (>= 0.8~) but 0.7.4-1ubuntu0.1 is to be installed
E: Unable to correct problems, you have held broken packages.

Sinto muito. Sinto falta de postar algumas informações importantes. Os pacotes de dependências estão lá, mas a política do apt-cache não prefere eles, por exemplo:

root@ip-10-20-17:~# apt-cache policy python-anyjson
python-anyjson:
  Installed: (none)
  Candidate: 0.3.1-1build1
  Version table:
     0.3.3-1~cloud0 0
        -10 http://apt.myserver.com/ubuntu-cloud-archive/ precise-updates/havana/main amd64 Packages
     0.3.1-1build1 0
        900 http://mirror.myserver.com/ubuntu/ precise/main amd64 Packages

python-anyjson 0.3.3-1 ~ cloud0 está lá, mas a política do apt-cache não a prefere. O que significa a prioridade -10?

    
por sosogh 09.12.2016 / 11:24

2 respostas

4

Pacotes podem ter dependências em outros pacotes. No seu caso, python-nova depende de python-anyjson , python-boto , python-cinderclient e assim por diante. Então, para instalar o python-nova , esses pacotes também precisam ser instalados.

Essa dependência também é específica da versão. Para instalar python-nova de uma versão específica, você também precisa instalar os pacotes dependentes de versões específicas. Por exemplo, para python-nova na versão 1: 2013.2.3-0ubuntu1 ~ cloud0 você precisaria de python-anyjson na versão 0.3.3 ou posterior , mas apenas a versão 0.3.1-1build1 está disponível:

python-nova : Depends: python-anyjson (>= 0.3.3) but 0.3.1-1build1 is to be installed

Assim, você não precisa apenas verificar se python-nova está disponível na versão que você precisa, mas também se todos os pacotes python-nova dependem também estão disponíveis nas respectivas versões. Os pacotes dos quais o python-nova depende também podem ter outras dependências.

Por causa disso, sugiro que você verifique se realmente precisa dessa versão específica. Ele pode se tornar um incômodo para satisfazer todas as dependências do pacote A, então todas as dependências das dependências de A, então ... Você também pode procurar usar outra distribuição ou uma versão mais antiga do Ubuntu, onde a versão python-nova que você precisa é o padrão e você não precisa lidar com todas as dependências sozinho. Isso, claro, depende muito dos detalhes do que você pretende fazer.

    
por Henning Kockerbeck 09.12.2016 / 12:26
0

Finalmente, eu descubro a partir da dica de Como proibir um pacote específico para ser instalado?

To block the installation of a given package we may put the following lines in /etc/apt/preferences

Package: 
Pin: origin ""
Pin-Priority: -1

Existe tal configuração no meu servidor, depois do rm, funciona

root@ip-10-20-17:~# cat /etc/apt/preferences.d/00fix_codename 
Explanation: Uninstall or do not install any other DISTRIB_CODENAME
Explanation: package versions other than those in the precise distro
Package: *
Pin: release n=precise
Pin-Priority: 900

Package: *
Pin: release n=*
Pin-Priority: -10

Obrigado por todos os que se preocupam com esta questão, especialmente Henning Kockerbeck.

    
por sosogh 13.12.2016 / 08:11