APT pinning: Como configurar APT para múltiplos repositórios no Debian

APT pinning

Para poder utilizar diferentes seções e repositórios corretamente num sistema Debian, sem quebrar dependências, é preciso usar a técnica de APT PINNING.

Primeiramente, deve ser criado ou editado um arquivo /etc/apt/preferences definindo "pesos" para repositórios, ou versões, ou até pacotes individuais.
IMPORTANTE SER CRIADO ANTES DE QUALQUER COMANDO APT, para não confundir dependências.

O "peso" de um pacote já instalado na máquina é definido como 100, independentemente do repositório de onde tenha sido instalado.

O APT atribui os pesos do /etc/apt/preferences somente para pacotes que SERÃO instalados. Portanto, mesmo versões mais novas em repositórios com peso inferior a 100 não seriam atualizadas automáticamente. Só com comando explícito similar a:

apt-get -t nome_repositorio_descrito_no_preferences_e_sources_list install nome_pacote

Uma limitação importante é que repositórios Testing, Unstable, Experimental continuam sempre evoluindo versões também dos compiladores e bibliotecas. Isso pode causar dependências impossíveis de resolver satisfatóriamente um certo tempo depois de lançada uma versão Estável. Sem mencionar que mesmo que resolvidas, podem baixar uma quantidade muito grande de novas versões de pacotes dependentes que anulariam as vantagens de uma distribuição Stable.

A melhor solução é procurar usar apenas os repositórios Wheezy (é o Stable na data deste artigo), Volatile e Backports quando necessário.

Outro cuidado a tomar é com o nome "Stable" ou claramente "Wheezy" (na data deste artigo). O comportamento pode ser diferente do esperado também dependendo da data de um NOVO lançamento, como do Jessie, e da consistência entre nomes no /etc/apt/sources.list e /etc/apt/preferences.

Veja um exemplo de arquivo /etc/apt/preferences

Package: *
Pin: release n=wheezy
Pin-Priority: 900

Package: *
Pin: release n=jessie
Pin-Priority: 30

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

Package: *
Pin: release a=experimental
Pin-Priority: 10

Package: *
Pin: release a="wheezy-backports"
Pin-Priority: 200

Leia mais no wiki do debian. Especialmente sobre como controlar precisamente o upgrade de certos pacotes, atribuindo "pesos" a eles, como no exemplo. No caso dos pacotes de glusterfs, eles seriam atualizados apenas por novas versões do backports, ou lenny, ou por comando explícito "apt-get -t testing install glusterfs-server" por exemplo.

 

Como configurar APT para múltiplos repositórios e seções

Para ter acesso aos pacotes binários não livres (como alguns drivers de rede e placas HBA), e outros programas não completamente livres, é preciso habilitar as seções "main", "non-free" e "contrib".
Depois de ter o arquivo /etc/apt/preferences, é preciso editar o arquivo /etc/apt/sources.list

 

# deb ftp://ftp.debian-multimedia.org wheezy main non-free
# deb ftp://ftp.deb-multimedia.org wheezy main non-free

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

deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free

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

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

# deb http://backports.debian.org/debian-backports wheezy-backports main contrib non-free
# deb-src http://backports.debian.org/debian-backports wheezy-backports main contrib non-free

deb http://ftp.debian.org/debian wheezy-backports main contrib non-free
deb-src http://ftp.debian.org/debian wheezy-backports main contrib non-free

#20130505 during dist-upgrade, disable proposed-updates
deb http://ftp.br.debian.org/debian/ wheezy-proposed-updates contrib non-free main
deb-src http://ftp.br.debian.org/debian/ wheezy-proposed-updates contrib non-free main

# deb http://mozilla.debian.net/ wheezy-backports iceweasel-release

deb http://download.skype.com/linux/repos/debian/ stable non-free

#AFM 20150517 only for the brave ones
# deb http://ftp.br.debian.org/debian/ experimental main contrib non-free
# deb-src http://ftp.br.debian.org/debian/ experimental main contrib non-free

#AFM 20140821
deb http://mozilla.debian.net/ wheezy-backports iceweasel-release

 

 

Fazer imediatamente, como root, um

apt-get update

Em seguida:

apt-get install debian-backports-keyring

E fazer NOVAMENTE, como root

apt-get update

Com estas duas configurações, será possível instalar pacotes e ou versões que não existam na estável, sem quebrar dependências.

Só então se pode fazer atualização de sistema:

apt-get upgrade

Leia os links e a página wiki do apt pinning para aprender os comandos para instalar pacotes de repositórios ou versões específicas sem quebrar dependências.