Como limite as atualizações instaladas às de um conjunto específico de repositórios? Tudo isso é possível?
Como limite as atualizações instaladas às de um conjunto específico de repositórios? Tudo isso é possível?
Respostas:
Fixar é um processo que permite que você permaneça em uma versão estável do Ubuntu (ou qualquer outro sistema debian) enquanto obtém pacotes de uma versão mais recente. - help.ubuntu.com
Você pode desativar as atualizações automáticas de determinados repositórios sem removê-las completamente por meio de aptpolíticas:
Para desativar as atualizações automáticas do repositório repo, adicione um arquivo /etc/apt/preferences.d/repocom o seguinte conteúdo:
Package: *
Pin: release n=repo
Pin-Priority: 50
O que dará a todos os pacotes deste repositório uma prioridade mais baixa do que os pacotes já instalados (que possuem 100).
Para mais informações man apt_preferencesou consulte o Wiki da Comunidade Ubuntu .
apt-cache policy package-name
release n=repovontade não cache de ninguém
Você pode especificar uma liberação com a -topção Como exemplo, eu adicionei o seguinte repositório /etc/apt/sources.listpara instalar o Iceweasel versão mais recente:
deb http://mozilla.debian.net/ squeeze-backports iceweasel-release
Como você sabe, existe um mesmo pacote iceweaselno repositório oficial da Debian. Se eu quiser instalar o Iceweasel a partir 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.
Eu acho que essa é uma solução melhor.
ATUALIZAÇÃO : Como o @SuB mencionado no comentário, " -tespecifica o nome do repositório, não o repositório. Não há nome no repositório no Ubuntu (diferente do Linux baseado no RedHat, como RHEL, Fedora, CentOS, ...)".
apt-getmanual, -tespecifique release, não nome do repositório. Não existe um nome de repositório no Ubuntu (ao contrário do Linux baseado em RedHat, como RHEL, Fedora, CentOS, ...)
-t xenialtrabalha para um único pacote. mas tudo o que é dependências ainda será buscada a partir pacotes mais elevados
Você precisa fixar os repositórios dos quais não deseja instalar com uma prioridade menor que 100. O que significa (na apt_preferencepágina de manual)
100 <= P <500
faz com que uma versão seja instalada, a menos que exista 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 fixação, você usaria campos do Releasearquivo dos repositórios . Tais como archive, label, release, versionetc. Ao especificar os valores desses campos, você pode precisamente selecionar um repositório e atribuir a sua prioridade preferido a ele. Verifique a página apt_preference para mais detalhes.
Antes de prosseguir, precisamos saber algo importante sobre a fixação. Isso inclui
Campos de Releasearquivos e mapeamento para apt-cache policysaída
Formato dos arquivos de preferência do apt
Usando Releasecampos de arquivos para definir a prioridade
Releasearquivo e apt-cache policysaídaDo artigo da Debian Wiki
Você veria resultados apt-cache policycomo esses
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 são provenientes de Releasearquivos.
Descrição define a descrição para um repositório. Isso não é mostrado na apt-cache policysaída
Label é o rótulo do repositório. Muitos repositórios têm rótulos vazios. É mostrado na l=<label>saída.
Origem: informa sobre a origem do repositório. Repositório oficial do Ubuntu tem Ubuntucomo valor. Mostrado como o=na saída
Version é a versão de uma distribuição. É 16.04 para o Xenial. Mostrado como v=na saída
O conjunto é o mesmo que o arquivo morto . No wiki do debian é is O nome da distribuição do Debian aos quais os pacotes deste diretório pertencem (ou foram projetados), ou seja, estável, testando ou instável. . Para o Ubuntu, estes são release-updates, release-securityetc. Por exemplo, xenial-updates, xenial-security. É mostrado na saída como a=xenial, a=xenial-security. Os PPAs usam apenas o nome do release para isso, é por isso que não ajuda muito em Pinning.
O componente fala sobre o licenciamento. É main, multiverse, restricted, universeno Ubuntu. Na saída, é mostrado como c=mainou c=restrictedetc. A maioria dos PPAs usa mainpara esse campo, portanto, também não ajuda a fixar muito.
Arquitetura é sobre a arquitetura do SO. Mostrado como b=i386ou b=amd64na saída
Codename é o nome do release da distribuição. Para 16.04 é xenial. Para 14.04 é trusty. Mostrado na apt-cache policysaída como n=xenialou n=trusty. É o mesmo para todos os repositórios para uma única distribuição normalmente. É por isso que não ajuda em fixar muito.
A outra linha na apt-cache policysaída iniciada por origininforma a origem da Internet do repositório. Também pode ser usado na fixação. Mas não deve ser misturado com o campo Releasearquivos Origin. Aqueles são diferentes.
Usaremos esses valores para fixar um repositório.
Então, como usamos a fixação de 1 para restringir o repositório?
Existem várias maneiras de controlar a fixação e apenas um pequeno subconjunto é eficaz para o Ubuntu. Uma explicação detalhada está além do escopo da resposta. Por favor, consulte a apt_preferencepágina de manual para isso.
Os arquivos de preferência para fixar ou apt residem na /etc/apt/preferences.dpasta. Cada fixação contém três linhas.
A primeira linha começa com Package:e os nomes de pacotes separados por vírgula. Expressões regulares e globs são permitidos
A segunda linha começa com Pin:e é usada para direcionar um conjunto de pacotes.
Se quisermos fixar pacotes com valores xenialsuperiores a xenial-updates, usaremos release a=xenial.
Se quisermos fixar a versão 5.0, usaremos version 5.0aqui. Pattens Glob são permitidos.
Ou, se quisermos fixar pacotes da origem http://archive.ubuntu.com, usaremos origin "archive.ubuntu.com". Note, não escrevemos http://protocolo lá.
A terceira linha começa com Pin-Priority:e seu valor é um número. O que significa a prioridade dos itens segmentados acima.
Releasecampos de arquivos para definir a prioridadeAqui está um exemplo
Package: *
Pin: release a=xenial
Pin-Priority: 1001
Neste exemplo, os pacotes dos xenialarquivos têm prioridade mais alta que xenial-updatese xenial-security.
Após a fixação, a execução de um apt-cache policy nautilusmostra que ele realmente deu uma prioridade mais alta a uma versão inferior do xenialarquivo morto do que a uma versão superior do xenial-updatesarquivo morto . Observe a Candidate:linha.
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 também queremos dar prioridade aos pacotes fornecidos pelo PPA, isso não funcionará. Porque PPAs usam o mesmo nome do arquivo xenialpor padrão. Portanto, atribuir uma prioridade a a=xenialtambém se aplicará 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 xenialarquivo de repositório oficial do Ubuntu e o PPA têm a mesma prioridade 1001, porque usam o mesmo valor Archiveno arquivo Release. Para fixar com sucesso, precisamos combinar mais campos no arquivo Fixar.
Para fixar pacotes de um repositório, precisamos direcioná-lo usando as informações encontradas no apt-cache policycomando Acabamos de ver que a=xenialisso 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 com precisão um repositório.
Por exemplo, para impedir todos os pacotes do 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 codinome e o Originvalor do PPA. (Embora o valor do codinome não seja necessário aqui, na verdade). Às vezes, o repositório pode perder esses valores. Nesses casos, algumas outras técnicas devem ser usadas. A saída de apt-cache policy libgl1-mesa-glxdiz que funciona. Reduziu 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 aconteceu porque já está instalado no meu sistema . Verifique a prioridade à direita
Se queremos fixar um repositório cujas informações de liberação estão ausentes, 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 origincom segurança para fixar esse repositório.
Package: *
Pin: origin download.opensuse.org
Pin-Priority: 10
Nota 1: Esta origem é a origem da Internet, não a que especifica o Fornecedor no arquivo de Liberação.
Nota 2: Pin-Priority número tem um significado especial. Consulte apt_preferencea página do manual para obter detalhes.
A escolha óbvia é modificar /etc/apt/sources.liste comentar todos os outros repositórios e, em seguida, executar
apt-get update && apt-get upgrade && apt-get autoclean
E, em seguida, remova os comentários de sources.list. Talvez não seja a melhor maneira, mas pelo menos as apt-getpáginas de manual não especificam nenhuma maneira de fazer isso.
Em nota relacionada, por exemplo, o processo de atualização da distribuição Ubuntu desativa todos os repositórios de terceiros durante a atualização (e não basta executar alguma opção para excluí-los temporariamente).