Como instalar pacotes específicos do Ubuntu, com a versão exata?

195

Eu quero configurar uma nova máquina virtual com alguns pacotes especificados (nome e versão), que são fornecidos.

Por exemplo, apache2 na versão 2.2.20-1ubuntu1 com todas as dependências. Mesmo se houver uma nova versão deste pacote nos servidores, este deve ser instalado.

A solução tem que funcionar / escalar com múltiplos (n) "setups". Outra máquina virtual pode precisar de uma versão mais antiga do apache2.

Atualmente conheço algumas possibilidades que instalam os pacotes exatos, mas não são tão bons assim:

  1. Copie todos os *.deb necessários para cada máquina virtual manualmente e insira: dpkg -i ... - > Poderia funcionar, mas é muito propenso a erros. (Scripts manuais etc.)
  2. Crie e use um novo repositório do Ubuntu para cada configuração. - > Não funciona porque eu precisaria de n repositórios.
  3. Configure a máquina uma vez e copie a VM / crie uma captura instantânea. - > Não funciona porque eu precisaria armazenar n VMs.

Meu problema pode ser rotulado como gerenciamento de patches, mas não quero atualizar meus pacotes para a versão atual. Meu objetivo é instalar pacotes antigos.

    
por ayckoster 01.01.2012 / 21:39

5 respostas

195

Você pode usar apt-get para instalar uma versão específica do pacote, desde que esteja em um arquivo que o apt saiba. Na% man_de% manpage:

% bl0ck_qu0te%

Por exemplo, você poderia fazer:

sudo apt-get install apache2=2.2.20-1ubuntu1

Note que você pode precisar fazer alguma resolução de dependência por conta própria nesse caso, mas se houver algum problema, o apt-get informará o que está causando isso. No meu sistema 11.10, eu precisaria fazer o seguinte para que isso funcionasse:

sudo apt-get install apache2=2.2.20-1ubuntu1 \
                     apache2.2-common=2.2.20-1ubuntu1 \
                     apache2.2-bin=2.2.20-1ubuntu1 \
                     apache2-mpm-worker=2.2.20-1ubuntu1
    
por fader 01.01.2012 / 21:57
57

Para verificar quais versões estão disponíveis, você pode verificar via:

sudo apt-cache madison ^apache2

Se não funcionar, considere executar sudo apt-get update antes de atualizar a lista de pacotes.

Copie a versão ou use a seguinte sintaxe:

sudo apt-get install apache2=2.2\*

Para verificar qual versão você instalou, execute:

dpkg -l 'apache2*' | grep ^i
    
por kenorb 01.04.2015 / 14:44
10

Expandirei as respostas anteriores com outros comandos úteis de versão na família apt . Para ver quais versões estão disponíveis, execute apt-cache policy :

# apt-cache policy apache2
apache2:
  Installed: (none)
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
     2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

Em seguida, conforme mencionado em outro lugar, instale uma versão específica com apt-get :

# apt-get install apache2=2.4.7-1ubuntu4.5
...

Agora você pode ver qual versão está instalada executando apt-cache policy novamente:

# apt-cache policy apache2
apache2:
  Installed: 2.4.7-1ubuntu4.5
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
 *** 2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
        100 /var/lib/dpkg/status
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

Se você não quiser que novas versões sejam instaladas nas atualizações, fixe o pacote com apt-mark :

# apt-mark hold apache2
apache2 set on hold.

Digamos que uma nova versão do apache2 seja adicionada ao índice de pacotes e sua máquina esteja sincronizada com apt-get update . Você verá isso quando executar o próximo apt-get upgrade :

# apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  apache2
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
    
por gsf 15.07.2016 / 19:25
8

Na prática, isso não é possível porque as versões antigas não são mantidas no arquivo morto. Portanto, a menos que você tenha uma cópia da versão antiga em algum lugar, não será possível instalá-la. Você deve estar se perguntando por que você deseja instalar uma versão mais antiga em primeiro lugar. Em uma versão estável, o principal motivo para uma nova versão ser lançada é corrigir uma vulnerabilidade de segurança e você não quer estar executando um servidor vulnerável, não é?

    
por psusi 02.01.2012 / 01:33
1

Como explica psusi, versões antigas não são mantidas no repositório do Ubuntu, mas aparentemente você ainda pode encontrá-las no launchpad. Então, você vai (substituir trusty e amd64 pela sua versão e arquitetura do Ubuntu):

link

e selecione a versão desejada. Então você baixa o deb como um arquivo e instala com:

dpkg -i apache2_2.4.7-1ubuntu4.20_amd64.deb

Novamente, substitua o nome do arquivo pelo seu arquivo. Isso fica entediante se você tiver que fazer o downgrade de muitos pacotes, mas é melhor do que nada se estiver desesperado.

    
por soger 18.10.2018 / 00:40