Escolhendo versões dos pacotes no Debian/Ubuntu
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:
- stable 0.18.1
- testing 0.55.6
- unstable 0.55.6
Crie um arquivo dentro do diretório /etc/apt/preferences.d/
com o nome do
pacote que você quer especificar a versão. Pode ser qualquer nome aqui, mas
usando o nome do pacote fica mais fácil de manter o sistema.
# /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.