Alfinetando o APT

Debian é um sistema maneiro (se fosse usar gíria do meu tempo, eu diria "supimpa"). Entretanto, a distribuição stable é sempre velha de dois anos, mesmo quando ela acaba de nascer. Este conservadorismo, aliado à coerência entre zilhões de pacotes disponíveis, é que faz o sucesso da Debian. Por outro lado, é difícil ficar na crista da onda em termos de aplicativos.

É por isto que eu mantenho o APT da Debian do meu notebook sempre apontando para a distribuição testing. Obviamente, não é aconselhável seguir esta prática em servidores compartilhados, como as VMs do CEFALA. Felizmente, já encontraram uma maneira de contornar o problema: basta alfinetar o APT (APT pinning, em inglês).

Imagine que você esteja rodando a Debian amd64 stable atual (a.k.a. jessie), que tem o kernel Linux no pacote linux-image-3.16.0-4-amd64. Digamos que você deseja testar um kernel mais moderno, por exemplo a versão 4.0 do Linux. Uma solução seria fazer a atualização completa do sistema para a Debian unstable, no que só de pensar já dá preguiça. Outra solução seria espetar o APT com um alfinete, da seguinte forma:

Primeiro, informe o seu sistema da existência da Debian unstable, por exemplo, criando o arquivo /etc/apt/sources.list.d/debian-unstable.list com o seguinte conteúdo:

deb http://ftp.br.debian.org/debian/ unstable main contrib non-free
deb-src http://ftp.br.debian.org/debian/ unstable main contrib non-free

Em seguida, informe o APT quais são as suas preferências, por exemplo, criando o arquivo /etc/apt/preferences.d/debian-releases com o seguinte conteúdo:

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

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

Os números que aparecem nas linhas Pin-Priority não têm relevância particular, mas o essencial é saber que o maior deles indica a distribuição preferida.

Em seguida, basta rodar:

$ sudo aptitude update
$ sudo aptitude install linux-image-4.0.0-1-amd64/unstable

e você terá o kernel Linux 4.0 rodando na sua máquina após o próximo reboot.

Como eu sou um cara supimpa (ou maneiro, se você preferir) eu criei um projetinho para automatizar os passos acima. Para variar, e por vício meu, ele está no Git do cefala-admin. Para aqueles que têm acesso via par de chaves SSH (veja as instruções que eu postei num outro artigo), basta fazer:

$ git clone cefala-admin@www.cefala.org:apt-debian-pinning

Em seguida, basta rodar sudo make para alfinetar o APT. O "programa" fará algumas perguntas, como no exemplo abaixo, mas basta teclar "Enter" para aceitar as opções por default. Leia a documentação no arquivo README.md, para maiores detalhes.

$ sudo make
Debian mirror [ftp.us.debian.org]: ftp.fr.debian.org
Priority order [stable testing unstable experimental]: testing unstable experimental
Installing preferences file...
Installing source files...
aptitude update
[...]

social