Como instalar apenas atualizações de um repositório específico?

32

Como faço para limitar as atualizações instaladas a partir de um conjunto específico de repositórios? Isso é possível?

    
por Ton van den Heuvel 21.02.2011 / 09:55

6 respostas

24

Use Fixação

  

Fixar é um processo que permite que você permaneça em uma versão estável de   Ubuntu (ou qualquer outro sistema Debian) ao pegar pacotes de um   versão mais recente. - help.ubuntu.com

Você pode desativar as atualizações automáticas de determinados repositórios sem removê-las totalmente por meio de apt policies:

Para desabilitar as atualizações automáticas do repositório repo , adicione um arquivo de /etc/apt/preferences.d/repo com o seguinte conteúdo:

Package: *
Pin: release n=repo
Pin-Priority: 50

Que dará a todos os pacotes deste repositório uma prioridade menor que os pacotes já instalados (que têm 100).

Para mais informações man apt_preferences ou verifique o Wiki da comunidade do Ubuntu .

    
por kynan 15.07.2012 / 20:55
34

Você pode especificar uma versão com a opção -t . Como exemplo, adicionei o seguinte repositório a /etc/apt/sources.list para instalar a última versão do Iceweasel:

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

Como você sabe, existe um mesmo pacote iceweasel no repositório oficial da Debian. Se eu quiser instalar o Iceweasel desta versão específica, eu corro:

apt-get install -t squeeze-backports iceweasel

da página de manual do apt-get:

-t, --target-release, --default-release
           This option controls the default input to the policy engine, it creates a default pin at priority 990 using the specified
           release string. This overrides the general settings in /etc/apt/preferences. Specifically pinned packages are not affected by
           the value of this option. In short, this option lets you have simple control over which distribution packages will be retrieved
           from. Some common examples might be -t '2.1*', -t unstable or -t sid. Configuration Item: APT::Default-Release; see also the
           apt_preferences(5) manual page.

Acho que esta é uma solução melhor.

UPDATE : Como @SuB mencionado no comentário, " -t especifica o nome do repositório e não do repositório. Não há nome de repositório no Ubuntu (diferente do linux baseado em RedHat como o RHEL, Fedora , CentOS, ...) ".

    
por cartoonist 19.08.2011 / 03:19
8

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

  1. Campos de Release arquivos e está mapeando para apt-cache policy output

  2. Formato dos arquivos de preferências do apt

  3. 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.

    
por Anwar 21.08.2016 / 13:43
7

Uma alternativa baseada em gui seria abrir o centro de software e selecionar edit & gt; fontes de software ...

tudo que você precisa fazer é desmarcar os repositórios dos quais você não quer atualizações.

Espero que isso ajude

    
por Allan 21.02.2011 / 11:35
5

A escolha óbvia é modificar /etc/apt/sources.list e comentar todos os outros repositórios e, em seguida, executar

apt-get update && apt-get upgrade && apt-get autoclean

Em seguida, remova os comentários de sources.list . Talvez não da melhor maneira, mas pelo menos apt-get man pages não especificam nenhuma maneira de fazer isso.

Em nota relacionada, por exemplo, o processo de atualização da distribuição do Ubuntu desabilita todos os repositórios de terceiros durante a atualização (e não apenas executa alguma opção para excluí-los temporariamente).

    
por Olli 21.02.2011 / 10:01
1

Uma outra opção de GUI é apenas escolher a origem no gerenciador de pacotes Synaptic.

  1. Pesquise o nome do pacote que você deseja instalar
  2. Clique no botão Origem
  3. Escolha o repositório que você deseja instalar a partir de
  4. Escolha os pacotes
  5. Aplicar
por woot 29.06.2017 / 19:59

Tags