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 apt
políticas:
Para desativar as atualizações automáticas do repositório repo
, adicione um arquivo /etc/apt/preferences.d/repo
com 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_preferences
ou consulte o Wiki da Comunidade Ubuntu .
apt-cache policy package-name
release n=repo
vontade não cache de ninguém
Você pode especificar uma liberação com a -t
opção Como exemplo, eu adicionei o seguinte repositório /etc/apt/sources.list
para instalar o Iceweasel versão mais recente:
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 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, " -t
especifica 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-get
manual, -t
especifique 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 xenial
trabalha 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_preference
pá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 Release
arquivo dos repositórios . Tais como archive
, label
, release
, version
etc. 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 Release
arquivos e mapeamento para apt-cache policy
saída
Formato dos arquivos de preferência do apt
Usando Release
campos de arquivos para definir a prioridade
Release
arquivo e apt-cache policy
saídaDo artigo da Debian Wiki
Você veria resultados apt-cache policy
como 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 Release
arquivos.
Descrição define a descrição para um repositório. Isso não é mostrado na apt-cache policy
saí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 Ubuntu
como 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-security
etc. 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
, universe
no Ubuntu. Na saída, é mostrado como c=main
ou c=restricted
etc. A maioria dos PPAs usa main
para esse campo, portanto, também não ajuda a fixar muito.
Arquitetura é sobre a arquitetura do SO. 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
. Mostrado na apt-cache policy
saída 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 em fixar muito.
A outra linha na apt-cache policy
saída iniciada por 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
arquivos 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_preference
página de manual para isso.
Os arquivos de preferência para fixar ou apt residem na /etc/apt/preferences.d
pasta. 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 xenial
superiores a 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 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.
Release
campos de arquivos para definir a prioridadeAqui está um exemplo
Package: *
Pin: release a=xenial
Pin-Priority: 1001
Neste exemplo, os pacotes dos xenial
arquivos têm prioridade mais alta que xenial-updates
e xenial-security
.
Após a fixação, a execução de um apt-cache policy nautilus
mostra que ele realmente deu uma prioridade mais alta a uma versão inferior do xenial
arquivo morto do que a uma versão superior do xenial-updates
arquivo 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 xenial
por padrão. Portanto, atribuir uma prioridade a a=xenial
també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 xenial
arquivo de repositório oficial do Ubuntu e o PPA têm a mesma prioridade 1001
, porque usam o mesmo valor Archive
no 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 policy
comando Acabamos de ver que a=xenial
isso 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 Origin
valor 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-glx
diz 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 origin
com 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_preference
a página do manual para obter detalhes.
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
E, em seguida, remova os comentários de sources.list
. Talvez não seja a melhor maneira, mas pelo menos as apt-get
pá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).