Quer instalar uma versão específica de um pacote no Ubuntu? Você pode fazer isso "facilmente" da seguinte maneira:
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:
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:
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:
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.
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".
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:
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:
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:
sudo apt install -t "o=ubuntu" vlc
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.
sudo apt-mark hold nome_do_pacote
Você pode remover a restrição para que ele possa ser atualizado mais tarde:
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.
Via itsfoss.com. Você pode conferir o post original em inglês:
Install Specific Package Version With Apt Command in UbuntuÚltima atualização deste artigo: 11 de october de 2022