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.