Qual é o método recomendado para instalar uma versão arbitrária de um pacote usando o apt?

5

O problema:

Eu preciso de uma maneira de instalar versões específicas e fixas de alguns pacotes no meu sistema Debian. O snapshot.debian.org parece oferecer um meio para fazer isso, no entanto, mesmo depois de adicionar um instantâneo aos meus apt-sources, não consigo apt-get install algumas versões específicas dos pacotes dentro desse arquivo de instantâneos.

A pergunta:

Qual é a forma oficial ou "correta" de instalar uma versão específica do pacote a partir de um arquivo de instantâneos Debian?

Plano de fundo & O que eu tentei:

Vamos usar Debian8 Jessie e o 3.16.x kernel binary uma versão secundária atrás da atual como nossos exemplos. Como desta escrita, o kernel liberado de Jessie é 3.16.43-2 + deb8u5. Digamos que eu queira instalar o 3.16.43-2 + deb8u4.

Eu começo pesquisando os arquivos do snapshot do debian para a versão que eu quero ( link ) e clique na versão exata do kernel que estou procurando, o que me leva a link

De lá, vejo que o pacote foi "Visto em debian-security em 2017-09-20 22:12:21" e "Visto em debian em 2017-10-08 16:31:52". Eu decido usar o primeiro e me estabelecer no snapshot debian-security 20170920T221221Z .

Seguindo as instruções na primeira página do snapshot.debian.org , adiciono o seguinte ao meu / etc / apt / sources. lista:

deb http://snapshot.debian.org/archive/debian-security/20170920T221221Z/ jessie/updates main
deb src http://snapshot.debian.org/archive/debian-security/20170920T221221Z/ jessie/updates main

Eu, então, executo apt-get -o Acquire::Check-Valid-Until=false update e vejo a atualização (parece) concluída com sucesso.

Eu acho que isso me permitiria instalar a versão desejada do kernel, mas o apt só conhece dois candidatos de instalação, 3.16.43-2 + deb8u2 e 3.16.43-2 + deb8u5. Nenhum sinal de + deb8u4:

# apt-cache madison linux-image-3.16.0-4-amd64
linux-image-3.16.0-4-amd64 | 3.16.43-2+deb8u5 | http://security.debian.org/ jessie/updates/main amd64 Packages
linux-image-3.16.0-4-amd64 | 3.16.43-2+deb8u5 | http://snapshot.debian.org/archive/debian-security/20170920T221221Z/ jessie/updates/main amd64 Packages
linux-image-3.16.0-4-amd64 | 3.16.43-2+deb8u2 | http://cloudfront.debian.net/debian/ jessie/main amd64 Packages
linux-image-3.16.0-4-amd64 | 3.16.7-ckt25-2 | http://cloudfront.debian.net/debian/ jessie-updates/main amd64 Packages
     linux |  3.16.39-1 | http://cloudfront.debian.net/debian/ jessie-backports/main Sources

# apt-cache policy linux-image-3.16.0-4-amd64
linux-image-3.16.0-4-amd64:
  Installed: 3.16.43-2+deb8u5
  Candidate: 3.16.43-2+deb8u5
  Version table:
     3.16.43-2+deb8u5 0
        500 http://security.debian.org/ jessie/updates/main amd64 Packages
        500 http://snapshot.debian.org/archive/debian-security/20170920T221221Z/ jessie/updates/main amd64 Packages
 *** 3.16.43-2+deb8u2 0
        500 http://cloudfront.debian.net/debian/ jessie/main amd64 Packages
        100 /var/lib/dpkg/status
     3.16.7-ckt25-2 0
        500 http://cloudfront.debian.net/debian/ jessie-updates/main amd64 Packages

Além disso, se eu tentar especificar e instalar a versão desejada, ele retornará "Not Found":

# apt-get install linux-image-3.16.0-4-amd64=3.16.43-2+deb8u4
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Version '3.16.43-2+deb8u4' for 'linux-image-3.16.0-4-amd64' was not found

Eu consegui contornar isso baixando o binário .deb e dpkg -i instalando-o, mas eu preferiria usar o apt em vez de baixar o .debs e instalá-lo. Alguém pode explicar o que eu preciso fazer para poder apt-get install de um pacote específico ou pelo menos explicar por que isso não funciona da maneira que eu esperava?

    
por devnall 06.11.2017 / 20:53

1 resposta

3

Isso não é ciência exata, mas aqui está uma explicação provável de por que não funcionou para esse caso específico (geralmente funciona quando você não está seguindo um alvo mudando muito rápido).

Um determinado repositório geralmente referencia apenas uma versão de um pacote no arquivo Packages, para o seu exemplo, este . Isso não é uma obrigação técnica, por exemplo deb https://dl.winehq.org/wine-builds/debian/ jessie main inclui múltiplas versões do mesmo pacote em seu arquivo Packages, todas recuperáveis pelo apt-get, usando = como você fez, mas o Debian (TM) não mantém referências a múltiplos versões no mesmo arquivo Packages.

Se você olhar para o diretório onde o pacote que você está procurando existe, você pode ver que existem duas versões disponíveis:

linux-image-3.16.0-4-amd64_3.16.43-2 + deb8u4_amd64.deb
linux-image-3.16.0-4-amd64_3.16.43 -2 + deb8u5_amd64.deb

Quando deb8u5 apareceu, a referência anterior a deb8u4 desapareceu. O deb8u4 .deb ainda pode ter sido referenciado por outro repositório ou simplesmente não ter sofrido alguma "coleta de lixo". Clicar em "prev change" na navegação de snapshot leva apenas a deb8u3 sem deb8u4 nem deb8u5. Isso significa que a mudança entre deb8u4 e deb8u5 aconteceu rápido demais para o arquivo Packages do deb8u4 estar disponível para download ou para o snapshot.debian.org salvar esse arquivo Packages antes do deb8u5 substituí-lo. Esta referência (e as somas de verificação correspondentes, e o arquivo de Release assinado) em debian-security são perdidas.

Apenas tentando novamente com debian (em vez de debian-security):

linux-image-3.16.0-4-amd64_3.16.43-2 + deb8u4_amd64.deb

com um arquivo Packages.xz correspondente . Este tem a entrada para deb8u2 apenas ... e manterá apenas este. As versões mais novas devem vir da segurança-debian até que 8.10 seja lançado, então, mesmo que apareçam no pool, isso é apenas porque o snapshot.debian.org faz tudo aparecer no mesmo lugar.

Bem, desculpe, para esta versão específica do pacote, eu não vejo uma maneira de baixar o deb8u4. Mesmo que possa ser baixado dos links e dpkg -i possa instalá-lo, não é possível validar o que foi baixado, por isso deve ser evitado.

NOTA: seu método está correto. Geralmente você pode completá-lo fixando seu instantâneo específico para alguns pacotes específicos, permitindo ao apt-get escolhê-los automaticamente (sem a necessidade de = ) e evitando que eles sejam atualizados posteriormente. Isso é explicado lá: link . Segurá-los também funciona ( dpkg --set-selections ou apt-mark hold ) para evitar a atualização.

    
por 06.11.2017 / 23:27

Tags