Instalando versões específicas quando o repo possui versões mais recentes?

13

Vamos ter um metapacote que depende dos seguintes pacotes

Depends: A (=2),
 B (=2),
 C (=2)

Observe o '=' - eu quero instalar essas versões específicas, não as mais recentes.

Além disso:

B depende de A (> = 1)

C depende de B (> = 1) e A (> = 1)

Se as versões mais recentes de A, B, C no repositório forem 2, isso funcionará.

Desde que eu coloquei a versão 3 de A e a versão 3 de B no repo sudo, o apt-get install my-meta-package se recusa a terminar com as seguintes informações:

The following packages have unmet dependencies:
  my-meta-package: Depends: B (= 2) but 3 is to be installed
                   Depends: A (= 2) but 3 is to be installed

Se eu instalar manualmente as versões 2 de A e B, o metapacote será instalado corretamente, o que sugere fortemente que não há dependência oculta em A3 ou B3. Esta não é uma solução para o problema, pois o metapacote é instalado automaticamente em muitas máquinas.

PERGUNTA: O que fazer para fazer o sudo apt-get install my-meta-package install versões 2,2,2?

Além disso, existe uma maneira de obter informações estendidas sobre o que realmente cria a necessidade da versão 3 de A e versão 3 de B?

timtim
fonte
Ah, eu não li a pergunta toda antes de responder. Você pode apenas reembalar o metapacote?
21412 jQuery
2
@int_ua Não entendo o que seria reembalar o metapacote.
tymtam
@belacqua - eu sou com você, mas precisamos de uma resposta sólida que cobre o que acontece quando há reversões e quebrado dependências etc etc
RobotHumans
O arquivo de controle do seu metapacote inclui a versão explícita no de pacotes dependentes, como (a=2), (b=2)?
Anwar

Respostas:

11

Você precisa selecionar as versões específicas a serem instaladas e instalá-las todas ao mesmo tempo em que instala o meta-pacote.

sudo apt-get install meta-package package1=2 package2=2 package3=2

Como a resposta de int_ua diz, você pode descobrir dependências reversas com isso:

apt-cache rdepends package

Se você quiser saber mais informações sobre qualquer um desses pacotes ( versões disponíveis, dependências e muito mais ), use o seguinte:

apt-cache show package

Depois que você terminar de instalá-los e quiser mantê-los nessas versões durante as atualizações do sistema, será necessário usar o apt- pinning, conforme sugerido pelo belacqua .

Fixação do APT

O recurso de fixação do APT permite que os administradores forçam o APT a escolher versões específicas de pacotes que podem estar disponíveis em diferentes versões de diferentes repositórios. Isso permite que os administradores garantam que os pacotes não sejam atualizados para versões que possam entrar em conflito com outros pacotes no sistema ou que não foram suficientemente testados para alterações indesejadas. Para fazer isso, os pinos no arquivo de preferências do APT (/ etc / apt / preferências) devem ser modificados.

Sepero
fonte
Eu acredito que esta é a resposta correta, colocando o = e, em seguida, o nome do pacote com a versão
LnxSlck
1
Sou o colega de Tymek e isso realmente resolve o problema. Pena que temos que fazer engenharia reversa do metapacote para que isso aconteça. Alguns Python criativos estão em ordem. Muito obrigado pela resposta.
Igor Zevaka
1
Gostaria de saber se alguma solução melhor apareceu desde que o tempo passou?
ygrek
1

Você pode tentar instalar as dependências primeiro com

sudo apt-get install package=2 onde 2 é a versão

Você pode descobrir quais pacotes dependem do pacote com

apt-cache rdepends package

int_ua
fonte
1
O rdepends não fornece informações detalhadas sobre as versões, certo?
usar o seguinte comando
2
Instalar dependências primeiro desafiaria o metapacote. É uma solução, mas não a que estou procurando.
tymtam
1
Observe que, para que isso funcione, os repositórios precisam ter uma versão disponível daquela versão especificada, caso contrário, ocorrerá um erro.
Thomas Ward