Back to TILs

Escolhendo versões dos pacotes no Debian/Ubuntu

Date: 2019-07-02Last modified: 2023-02-17
Photo by Derek Oyen on Unsplash

Parte 1 - Regra geral

Antes de começar a escolher versões vamos estabelecer que todos os pacotes usarão a versão stable por padrão.

No arquivo /etc/apt/preferences (que deve estar vazio inicialmente) acrescente as seguintes linhas:

# Arquivo: /etc/apt/preferences

# Todos os pacotes vem do stable por padrão
Package: *
Pin: release a=stable
Pin-Priority: 1001

Package: *
Pin: release a=testing
Pin-Priority: 650

Package: *
Pin: release a=unstable
Pin-Priority: 600

O valor acima de 1000 vai forçar os pacotes que foram instalados na mão usando outras versões a voltarem para o stable.

Agora que já definimos uma REGRA GERAL podemos começar a definir as exceções à regra.

Parte 2 - Exceções à regra geral

Por target

Para exemplo vamos escolher o pacote hugo para este post. Você pode usar este mesmo procedimento para qualquer pacote.

Se você acessar https://packages.debian.org/search?keywords=hugo encontrará as seguintes versões:

# /etc/apt/preferences.d/hugo
Package: hugo
Pin: release a=testing
Pin-Priority: 1002

Observe que a prioridade precisa ser maior que a prioridade da regra padrão para funcionar.

Por origem

Ao instalar o pacote nodejs a versão 4.8 será instalada pois é a mais recente que está no repositório padrão.

apt install nodejs
...
Obter:1 http://ftp.br.debian.org/debian stretch/main amd64 nodejs amd64 4.8.2~dfsg-1 [3.440 kB]
...

Para pegar a versão mais rescente do nodejs diretamente do deb.nodesource.com em vez do repositório padrão do Debian use:

# /etc/apt/preferences.d/nodejs
Package: *
Pin: origin deb.nodesource.com
Pin-Priority: 1001

Então basta executar o comando de instalação novamente para que o pacote seja atualizado para a versão 12.

apt update
apt install nodejs
...
Obter:1 https://deb.nodesource.com/node_12.x stretch/main amd64 nodejs amd64 12.6.0-1nodesource1 [16,9 MB]
...

Parte 3 - Upgrade/Downgrade

Agora que todas as nossas regras já estão definida basta atualizar que os pacotes vão para a versões escolhidas.

apt-get update
apt-get upgrade
apt-get dist-upgrade

Note que alguns pacotes podem sofrer downgrade nesta atualização.

Só para conferir que a versão escolhida foi realmente instalada:

$ dpkg -l | grep hugo
ii  hugo 0.55.6+really0.54.0-1 amd64 Fast and flexible Static Site Generator written in Go

Entendendo os valores das prioridades

P > 1000

Instala mesmo que precise baixar a versão de algum pacote já instalado. Somente prioridades acima de 1000 permitem downgrade.

990 < P <= 1000

Instala somente se uma versão maior estiver disponível no target release (Ver variáel APT::Default-Release para detalhes). Não permite downgrade de pacote instalado.

500 < P <= 990

Instala somente se uma versão maior estiver disponível no target release (Ver variáel APT::Default-Release para detalhes).

100 < P <= 500

Utilizado como predefinição para os arquivos NotAutomatic e ButAutomaticUpgrades

Instala a menos que exista uma versão disponível em outra distribuição ou se a versão instalada for mais recente.

causes a version to be installed unless there is a version available belonging to some other distribution or the installed version is more recent

0 < P <= 100

Instala somente se não possuir versão instalada do pacote.

P == 1

Valor padrão para NotAutomatic

P < 0

Nunca instala o pacote mesmo que o pacote seja recomendado.