Resposta curta
Você precisa fixar os repositórios que não deseja instalar com uma prioridade menor que 100. O que significa (de apt_preference
man page)
100 & lt; = P & lt; 500
faz com que uma versão seja instalada a menos que haja uma versão disponível pertencente a alguma outra distribuição ou a versão instalada seja mais recente
E para selecionar um repositório para pinagem, você usaria campos do arquivo Release
dos repositórios. Como archive
, label
, release
, version
etc. Ao especificar os valores desses campos, você pode selecionar com precisão um repositório e atribuir sua prioridade preferencial a ele. Verifique a página apt_preference para mais detalhes.
Resposta longa
Antes de prosseguir, precisamos saber alguma coisa importante sobre a fixação. Isso inclui
-
Campos de Release
arquivos e está mapeando para apt-cache policy
output
-
Formato dos arquivos de preferências do apt
-
Usando os campos Release
files para definir a prioridade
1. Campos de Release
file e apt-cache policy
output
Do artigo Debian Wiki
- Descrição
- Etiqueta
- Origem
- Versão
- Suíte
- Codename
- Componentes
- Arquiteturas
Você veria a saída de apt-cache policy
como estes
500 http://mirrors.ircam.fr/pub/ubuntu/archive xenial/main amd64 Packages
release v=16.04,o=Ubuntu,a=xenial,n=xenial,l=Ubuntu,c=main,b=amd64
Os valores nessas linhas vêm de Release
files.
-
Descrição define a descrição para um repositório. Isso não é mostrado em apt-cache policy
output
-
Label é o rótulo do repositório. Muitos repositórios possuem rótulos vazios. É mostrado em l=<label>
na saída.
-
Origin isso informa sobre a origem do repositório. O repositório oficial do Ubuntu tem Ubuntu
como o valor. Mostrado como o=
na saída
-
Versão é a versão de uma distribuição. São 16,04 para o Xenial. Mostrado como v=
na saída
-
A Suite é igual a Arquivo . Do debian wiki está o O nome da distribuição do Debian em que os pacotes neste diretório pertencem (ou são projetados para), ou seja, estáveis, testando ou instáveis. . Para o Ubuntu, estes são release-updates
, release-security
etc. Por exemplo, xenial-updates
, xenial-security
. Ela é mostrada na saída como a=xenial
, a=xenial-security
. Os PPAs usam apenas o nome do lançamento para isso, por isso não ajuda muito no Pinning.
-
Componente informa sobre o licenciamento. É main
, multiverse
, restricted
, universe
no Ubuntu. Na saída, ela é mostrada como c=main
ou c=restricted
etc. A maioria dos PPAs usa main
para esse campo, portanto, não ajuda muito a fixar muito.
-
Arquitetura é sobre a arquitetura do sistema operacional. Mostrado como b=i386
ou b=amd64
na saída
-
Codename é o nome do release da distribuição. Para 16.04 é xenial
. Para 14.04 é trusty
. Exibido em apt-cache policy
output como n=xenial
ou n=trusty
. É o mesmo para todos os repositórios para uma única distribuição normalmente. É por isso que não ajuda a fixar muito.
A outra linha em apt-cache policy
output começando com origin
informa a origem da Internet do repositório. Também pode ser usado na fixação. Mas não deve ser misturado com o campo Release
files Origin
. Essas são diferentes.
Usaremos esses valores para fixar um repositório.
Então, como usamos o pinning 1 para restringir o repositório?
Existem várias maneiras de controlar o pinning e apenas um pequeno subconjunto é efetivo para o Ubuntu. Uma explicação detalhada está além do escopo da resposta. Por favor, consulte apt_preference
man-page para isso.
2. Pino formato de arquivo
Os arquivos de preferências Pin ou apt residem na pasta /etc/apt/preferences.d
. Cada pinning contém três linhas.
-
A primeira linha começa com Package:
e um nome de pacote separado por vírgulas segue. Expressões regulares e globs são permitidos
-
A segunda linha começa com Pin:
e é usada para segmentar um conjunto de pacotes.
Se quisermos fixar os pacotes de xenial
acima de xenial-updates
, usaremos release a=xenial
.
Se quisermos fixar a versão 5.0, usaremos version 5.0
aqui. Pattens Glob são permitidos.
Ou, se quisermos fixar os pacotes da origem http://archive.ubuntu.com
, usaremos origin "archive.ubuntu.com"
. Note que não escrevemos o protocolo http://
.
-
A terceira linha começa com Pin-Priority:
e seu valor é um número. O que significa a prioridade dos itens segmentados acima.
3. Usando campos Release
files para definir a prioridade
Aqui está um exemplo
Package: *
Pin: release a=xenial
Pin-Priority: 1001
Neste exemplo, pacotes de xenial
archives recebem prioridade maior que xenial-updates
e xenial-security
.
Depois de fixar, a execução de apt-cache policy nautilus
mostra que, de fato, atribuiu maior prioridade a uma versão inferior de xenial
archive em um arquivo com versão superior de xenial-updates
archive. Observe a linha Candidate:
.
nautilus:
Installed: 1:3.18.5-0ubuntu1~xenial1
Candidate: 1:3.18.4.is.3.14.3-0ubuntu4
Version table:
*** 1:3.18.5-0ubuntu1~xenial1 100
100 /var/lib/dpkg/status
1:3.18.4.is.3.14.3-0ubuntu5 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
1:3.18.4.is.3.14.3-0ubuntu4 1001
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Mas, se quisermos dar prioridade também aos pacotes fornecidos pelo PPA, isso não funcionará. Porque os PPAs usam o mesmo nome de arquivo xenial
por padrão. Portanto, atribuir uma prioridade a a=xenial
também se aplica a esses pacotes. Por exemplo (após o PPA ativado),
13:31 $ apt-cache policy nautilus
nautilus:
Installed: 1:3.18.5-0ubuntu1~xenial1
Candidate: 1:3.18.5-0ubuntu1~xenial1
Version table:
*** 1:3.18.5-0ubuntu1~xenial1 1001
500 http://ppa.launchpad.net/budgie-remix/ppa/ubuntu xenial/main amd64 Packages
500 http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu xenial/main amd64 Packages
100 /var/lib/dpkg/status
1:3.18.4.is.3.14.3-0ubuntu5 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
1:3.18.4.is.3.14.3-0ubuntu4 1001
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Agora, a versão candidata é de um PPA. Ambos os pacotes do arquivo xenial
do repositório oficial do Ubuntu e o PPA têm a mesma prioridade 1001
, porque ambos usam o mesmo valor para Archive
no arquivo Release. Para definir com sucesso, precisamos combinar mais campos no arquivo Pin.
Alguns exemplos
Fixar um repositório PPA
Para fixar pacotes de um repositório, precisamos direcioná-lo usando as informações encontradas no comando apt-cache policy
. Acabamos de ver que a=xenial
não ajudará a apontar um repositório. Precisamos usar vários campos juntos usando vírgula em um arquivo de preferência para direcionar precisamente um repositório.
Por exemplo, para evitar todos os pacotes de http://ppa.launchpad.net/oibaf/graphics-drivers/
ppa, podemos usar
Package: *
Pin: release n=xenial,o=LP-PPA-oibaf-graphics-drivers
Pin-Priority: 10
Aqui estamos usando o valor do nome de código, bem como o valor Origin
do PPA. (Embora o valor do nome de código não seja necessário aqui, na verdade). Às vezes, o repositório pode perder esse valor. Nesses casos, algumas outras técnicas devem ser usadas. A saída de apt-cache policy libgl1-mesa-glx
diz que funciona. Diminuiu a prioridade de todos os pacotes deste PPA.
libgl1-mesa-glx:
Installed: 12.1~git1608200730.16ef7a~gd~x
Candidate: 12.1~git1608200730.16ef7a~gd~x
Version table:
*** 12.1~git1608200730.16ef7a~gd~x 100
-10 http://ppa.launchpad.net/oibaf/graphics-drivers/ubuntu xenial/main amd64 Packages
100 /var/lib/dpkg/status
11.2.0-1ubuntu2.1 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
11.2.0-1ubuntu2 500
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Ignore o fato de que é Candidato. Isso feliz, porque já está instalado no meu sistema . Verifique a prioridade à direita
Fixar um repositório quando faltam informações de lançamento
Se quisermos fixar um repositório cujas informações de release estão faltando, como este http://download.opensuse.org/repositories/home:/sarimkhan/xUbuntu_14.04
, devemos usar outro método. Como nenhum outro repositório está usando essa origem, podemos usar com segurança origin
para fixar este repositório.
Package: *
Pin: origin download.opensuse.org
Pin-Priority: 10
Nota 1: Esta origem é a origem da Internet, não aquela que especifica o Fornecedor no arquivo Release.
Observação 2: Pin-Priority
number tem um significado especial. Verifique a % página de manual do co_de% para detalhes.