Como instalar uma versão específica de pacote com apt install

Como instalar uma versão específica de pacote com apt install

Quer instalar uma versão específica de um pacote no Ubuntu ou Debian? Veja como fazer isso com o comando apto e solucionar os possíveis problemas com ele.

Quer instalar uma versão específica de um pacote no Ubuntu? Você pode fazer isso "facilmente" da seguinte maneira:

Comandos para usar no terminal

sudo apt install nome_do_pacote=versao_do_pacote

Como você sabe quais versões estão disponíveis para um determinado pacote? Use este comando:

Comandos para usar no terminal

apt list --all-versions package_name

Na captura de tela abaixo, você pode ver que temos duas versões do VLC disponíveis e usamos o comando para instalar a versão mais antiga:

listando_versoes_disponiveis

Parece uma tarefa simples, certo? Mas as coisas não são tão simples quanto parecem. Há vários "ses" e "mas" envolvidos aqui.

Este tutorial abordará todos os aspectos importantes da instalação de uma versão específica de programas usando comandos do apt.

Coisas para saber sobre a instalação de uma versão específica de um programa

Você precisa saber algumas coisas sobre como o APT e os repositórios funcionam em distribuições baseadas em Ubuntu e Debian.

Sem versões mais antigas da mesma fonte

O Ubuntu não mantém versões mais antigas de pacotes no repositório. Você pode ver mais de uma versão em casos específicos, temporariamente. Por exemplo, você executa a atualização apropriada (mas não atualização) e uma nova versão está disponível. Você pode ver duas versões para o mesmo pacote no cache apt. Mas assim que o pacote é atualizado para a nova versão, a versão mais antiga é removida do cache, bem como os repositórios.

Use várias fontes para diferentes versões

Para obter várias versões do mesmo pacote, você terá que adicionar várias fontes. Por exemplo, o VLC está na versão 3.x. A adição do VLC daily build PPA dará a versão (instável) 4.x.

Da mesma forma,você pode baixar um arquivo DEB com uma versão diferente e instalá-lo.

A versão superior sempre tem a prioridade

Se você tiver o mesmo pacote disponível em mais de uma fonte, por padrão, o Ubuntu instalará a versão mais alta disponível.

No exemplo anterior, se instalarmos o VLC, ele instalará a versão 4.x, não 3.x.

A versão mais antiga é atualizada para a versão mais recente disponível

Esse é outro problema em potencial. Mesmo se você instalar a versão mais antiga de um pacote, ele é atualizado para a versão mais recente (se disponível). Você tem que segurar o pacote e impedi-lo de atualizar.

As dependências também precisam ser instaladas

Se o pacote tiver dependências, você terá que instalar a versão necessária dos pacotes dependentes também.

Agora que você conhece alguns problemas potenciais, vamos ver como enfrentá-los.

Instalando versão específica de um pacote

Estamos tomando o exemplo do VLC neste tutorial. A versão 3.0.16 do VLC está disponível nos repositórios do Ubuntu. Adicionamos o PPA de uma compilação diária e isso retorna o candidato de lançamento da versão 4.0 do VLC.

Como você pode ver, temos duas versões VLC disponíveis no sistema agora:

Listando versões disponíveis de um pacote pelo apt

Uma vez que a versão mais alta tem prioridade, o uso de 'apt install vlc' resultará na instalação do VLC 4.0. Mas queremos instalar a versão mais antiga 3.0.16 por causa deste tutorial.

Comandos para usar no terminal

sudo apt install vlc=3.0.16-1build7

Mas o negócio é o seguinte. O pacote vlc tem várias dependências e essas dependências também precisam de versões específicas. No entanto, o Ubuntu tenta instalar as versões mais altas disponíveis para eles e, assim, você recebe o clássico erro "você tem pacotes quebrados".

Instalando uma versão específica de um pacote pelo apt

Para corrigir isso, você tem que fornecer versões específicas de todos os pacotes dependentes que ele reclama. Então esse comando se torna algo assim:

Comandos para usar no terminal

sudo apt install vlc=3.0.16-1build7 vlc-bin=3.0.16-1build7 vlc-plugin-base=3.0.16-1build7 vlc-plugin-qt=3.0.16-1build7 vlc-plugin-video-output=3.0.16-1build7 vlc-l10n=3.0.16-1build7 vlc-plugin-access-extra=3.0.16-1build7 vlc-plugin-notify=3.0.16-1build7 vlc-plugin-samba=3.0.16-1build7 vlc-plugin-skins2=3.0.16-1build7 vlc-plugin-video-splitter=3.0.16-1build7 vlc-plugin-visualization=3.0.16-1build7

Caso você esteja se perguntando, a barra invertida \ no final de cada linha é apenas uma maneira de escrever um único comando sobre várias linhas.

Funciona? Em muitos casos, sim. Mas escolhemos um exemplo complicado do VLC, que tem muitas dependências. Mesmo as dependências mencionadas têm dependências de outros pacotes. Fica uma bagunça.

Uma alternativa é especificar a fonte durante a instalação.

Alternativamente, especifique a fonte do repositório

Você adicionou várias fontes, então você deve ter alguma ideia sobre as fontes de onde o pacote vem.

Use o comando abaixo e procure o repositório:

Comandos para usar no terminal

apt-cache policy | less

Concentre-se nas linhas que vêm após o nome do repositório:

500 http://security.ubuntu.com/ubuntu jammy-security/multiverse i386 Packages
     release v=22.04,o=Ubuntu,a=jammy-security,n=jammy,l=Ubuntu,c=multiverse,b=i386
     origin security.ubuntu.com

Você pode especificar os parâmetros o,l,a, etc.

No exemplo original, queremos instalar o VLC do repositório do Ubuntu (para obter 3.16) em vez do PPA (que me dá 4).

Assim, o comando abaixo instalará o VLC 3.16 junto com todas as dependências:

Comandos para usar no terminal

sudo apt install -t "o=ubuntu" vlc

Instalando a versão original de um pacote pelo apt

Parece bom? Mas o problema vem quando você tem que atualizar o sistema. Em seguida, ele reclama de não encontrar a versão especificada.

O que mais pode ser feito?

Para instalar uma versão mais antiga, remova a fonte da versão mais recente do seu sistema (se possível). Ajuda a se livrar das dependências dos problemas infernais.

Se isso não for possível, verifique se você pode obtê-lo em alguns outros formatos de pacotes como Snap, Flatpak, AppImage, etc. Na verdade, Snap e Flatpak também permitem que você escolha e instale entre as versões disponíveis. Como os aplicativos são sandboxed, é mais fácil gerenciar as dependências para diferentes versões.

Segure o pacote e evite a atualização

Se você conseguir instalar uma versão específica do programa, você pode querer evitar a atualização acidental para a versão mais recente. Não é muito complicado conseguir isso.

Comandos para usar no terminal

sudo apt-mark hold nome_do_pacote

Você pode remover a restrição para que ele possa ser atualizado mais tarde:

Comandos para usar no terminal

sudo apt-mark unhold nome_do_pacote

Observe que as dependências de um pacote não são mantidas automaticamente. Elas precisam ser mencionadas individualmente.

Conclusão

Como você pode ver, há uma provisão para instalar a versão selecionada de um programa. As coisas só ficam complicadas se o pacote tiver dependências. Então você entra no inferno das dependências.

Esperamos que tenha aprendido algumas coisas novas neste tutorial. Se você tiver perguntas ou sugestões para melhorá-lo, por favor, nos avise na seção de comentários.

Última atualização deste artigo: 11 de october de 2022