Questão Como evitar a atualização de um pacote específico?


Por causa de bug # 693758 Eu gostaria de evitar apt-get upgrade e o Update Manager atualizando o pacote "libgtk2.0-0".

Como isso pode ser alcançado?


324
2017-12-23 17:29


origem


@hhlp: Mas esta pergunta é sobre um pacote que nunca foi instalado. - Nathan Osman
@George Edison - Há também o empacotamento de pacotes, que permite que você não atualize o pacote. Então, segurar um pacote significa basicamente que você está dizendo ao gerenciador de pacotes para manter a versão atual, não importa o quê. Isso é útil se a versão mais recente de um programa atualmente em funcionamento for interrompida após uma atualização. (você não pode segurar um pacote que nunca foi instalado também veja a minha pergunta é a mesma) .... eu testei isso agora - veja ele disse disable packages from the auto-update - hhlp


Respostas:


Segurando

Existem quatro maneiras de reter os pacotes: com dpkg, apt, aptitude ou dselect.

dpkg

Coloque um pacote em espera:

echo "<package-name> hold" | sudo dpkg --set-selections

Remova o porão:

echo "<package-name> install" | sudo dpkg --set-selections

Exibe o status de seus pacotes:

dpkg --get-selections

Exibe o status de um único pacote:

dpkg --get-selections | grep "<package-name>"

apt

Segure um pacote:

sudo apt-mark hold <package-name>

Remova o porão:

sudo apt-mark unhold <package-name>

dselect

Com o dselect, entre na tela [S] elect, encontre o pacote que você deseja manter em seu estado atual e pressione = ou H. As alterações entrarão em vigor imediatamente após sair da tela [S] elect.


As seguintes abordagens são limitadas em que bloquear / manter um pacote dentro do aptitude ou synaptic não afeta o apt-get / apt.

aptidão

Segure um pacote:

sudo aptitude hold <package-name>

Remova o porão:

sudo aptitude unhold <package-name>

Bloqueando com o Gerenciador de Pacotes Synaptic

Vamos para Gerenciador de Pacotes Synaptic (Sistema> Administração> Gerenciador de Pacotes Synaptic).

Clique no botão de pesquisa e digite o nome do pacote.

Quando você encontrar o pacote, selecione-o e vá para o Pacote menu e selecione Versão de bloqueio.

Synaptic menu

Esse pacote agora não será exibido no gerenciador de atualização e não será atualizado.


474
2017-12-23 18:04



Isso também funciona para impedir que um pacote seja instalado. Ao instalar devscripts, muitos pacotes são puxados como pacotes recomendados. Como eu não preciso de um servidor de e-mail (postfix), eu poderia desabilitar a instalação dele executando echo postfix hold | sudo dpkg --set-selections antes de correr sudo apt-get install devscripts. Esta ação de retenção persiste apenas para esta instalação, após a instalação, as seleções são redefinidas. - Lekensteyn
Também vale a pena ressaltar que os pacotes empacotados quebram as atualizações e os patches às vezes criando uma situação em que não há uma solução legal que o apt possa calcular para uma dependência. Se o pacote foo tiver uma dependência == <ou <= na libbar, o apt se recusará a atualizar libbar assim como foo. Com o tempo, essas dependências em cascata podem aumentar para bloquear um grande número de atualizações, incluindo atualizações de segurança importantes. Você precisará remover a suspensão e deixar a atualização acontecer ou reconstruir os pacotes que você está mantendo contra versões mais novas de suas dependências, se isso acontecer. - Stephanie
Apenas uma nota: apt-mark não suporta hold na versão 0.7.25 (Ubuntu Lucid) - Joril
Isso é especialmente útil ao tentar segurar os drivers gráficos. Para usuários da ATI, apt-mark hold fglrx fglrx-amdcccle fglrx-dev && aptitude hold fglrx fglrx-amdcccle fglrx-dev. - earthmeLon
Atualmente, o synaptic e o aptitude apenas bloqueiam pacotes dentro desses programas. "Qualquer outra coisa que faça upgrades de pacotes (leia-se: Update Manager, apt-get, aptitude, etc) ignora isso." A partir de essa questão. - holocronweaver


Para colocar um pacote "foo" em espera:

echo "foo hold" | dpkg --set-selections

No seu caso, vamos colocar o vinho em espera:

sudo -i
echo "wine hold" | dpkg --set-selections

Para remover a retenção:

sudo -i
echo "wine install" | dpkg --set-selections

43
2017-12-08 20:15



Observe também que enquanto um pacote está em espera, você posso instalar uma versão específica via apt-get install wine=1.2.3. Estar em espera impede apt-get (dist-)upgrade de mudar isso. - rcoup
@rcoup Se você tiver uma versão antiga em espera e, em seguida, atualizar manualmente para uma nova versão sem remover a retenção conforme descrito, a versão antiga será mantida no cache para que você possa voltar a ela? - cxrodgers
@cxrodgers o cache local (normalmente /var/cache/apt/archives) é independente de retenções e atualizações, então todas as versões que você baixou estarão lá até que você execute apt-get [auto]clean - rcoup


Eu estava procurando a mesma coisa e depois de muita pesquisa descobri que usando a seguinte sintaxe você pode proibir uma versão específica, mas permitir a próxima atualização:

Pacote: compiz-plugins-main
Pin: versão 1: 0.9.7.0 ~ bzr19-0ubuntu10.1
Pin-prioridade: -1

Isso vai para o arquivo / etc / apt / preferences.


28
2017-07-22 11:13



Esta é uma maneira muito melhor do que evitar atualizações indefinidamente - Eero Aaltonen
Com este método, eu acho que as chances são maiores para evitar que o 'adware' do Ubuntu, como o Ubuntu ou o ícone da Amazon, sejam reinstalados com a próxima atualização ... - Daniel Alder


Instalar synaptic usando sudo apt-get install synaptic.

Corra usando gksudo synaptic e na caixa de pesquisa localize o pacote que você deseja bloquear, ou seja: gedit

enter image description here

No menu de pacotes, selecione Versão de bloqueio:

enter image description here

E isso é tudo, a versão atualmente instalada no momento do bloqueio permanecerá instalada mesmo durante os upgrades.


19
2017-12-08 20:06



Por favor, olhe para "A versão de bloqueio não é tão inteligente quanto parece. É suposto fazer o que diz na lata, bloquear a versão ... Mas só bloqueia dentro do Synaptic. Qualquer outra coisa que faça upgrades de pacotes (leia-se: Update Manager , apt-get, aptitude, etc) ignora isso.Este é provavelmente um comportamento de bugs, então eu esperaria que isso fosse corrigido no tempo ". a partir de askubuntu.com/questions/9607/what-does-lock-version-do. Qual é o estado atual? Se algo estiver bloqueado no Synaptic, outros gerenciadores de pacotes "honrarão" o bloqueio?
vasa1: A partir da versão 0.75.13, ainda não :( Mesmo problema com o aptitude. - syockit


Impedir que um pacote seja instalado é chamado de "holding de pacotes" e é muito simples de fazer:

eco nome do pacote segure | dpkg --set-selections

... onde * package_name * é o nome do pacote que você deseja evitar da instalação.

Nota: o comando acima assume privilégios de root. Em outras palavras, você provavelmente precisará digitar sudo su antes de executá-lo.


16
2018-02-05 01:18



Perfeito esta foi a resposta. Obrigado. - asoundmove
s/sudo su/sudo -s/g (ou sudo -i). (-i vai dar um shell de login, -s não vou). - derobert


Desde algum tempo apt-get é substituído por apt, por exemplo, eu quero impedir o Firefox de atualizar para a versão acima de 56, porque muitos add-ons, como "Grupos de guias" não trabalhe mais com o novo Firefox 57 (veja "WebExtensions Update").

É possível manter mais de um pacote com um comando e usar curingas.

Evitar que o Firefox atualize

sudo apt-mark hold firefox firefox-locale-*

Se você quiser desenterrá-las mais tarde, esse seria o comando:

sudo apt-mark unhold firefox firefox-locale-*

5
2017-11-19 07:45





Eu synaptic você pode congelar a versão de um pacote específico Eu não tenho 100% de certeza se isso irá alterar o apt-get, mas ele definitivamente irá parar o gerenciador de atualização.

Para congelar um pacote, selecione-o no synaptic, abra o menu do pacote e selecione a versão congelada.

Espero que isto ajude

edit: este questão 16668 lida com uma situação semelhante


4
2017-12-23 17:35