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

317

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

Como isso pode ser alcançado?

    
por Ivan 23.12.2010 / 18:29

12 respostas

456

Holding

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

dpkg

Coloque um pacote em espera:

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

Remover a retenção:

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

Exibe o status dos 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>

Remover a retenção:

sudo apt-mark unhold <package-name>

dselect

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

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

aptitude

Segure um pacote:

sudo aptitude hold <package-name>

Remover a retenção:

sudo aptitude unhold <package-name>

Bloqueio com o Gerenciador de Pacotes Synaptic

Vá para o Gerenciador de Pacotes Synaptic (Gerenciador de Pacotes do Synaptic & gt; Administração de Sistemas & gt;).

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

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

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

    
por hhlp 23.12.2010 / 19:04
43

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
    
por Panther 08.12.2011 / 21:15
27

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:

Package: compiz-plugins-main
Pin: version 1:0.9.7.0~bzr19-0ubuntu10.1
Pin-Priority: -1

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

    
por soger 22.07.2013 / 13:13
19

Instale synaptic usando sudo apt-get install synaptic .

Execute usando gksudo synaptic e na caixa de pesquisa, localize o pacote que você deseja bloquear, por exemplo: gedit

No menu de pacotes, selecione Bloquear versão :

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

    
por Bruno Pereira 08.12.2011 / 21:06
16

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

echo package_name hold | dpkg --set-selections

... onde * package_name * é o nome do pacote que você deseja impedir 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.

    
por RobotHumans 05.02.2011 / 02:18
4

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 isso ajude

edit: Esta pergunta 16668 lida com uma situação semelhante

    
por Allan 23.12.2010 / 18:35
4

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 funcionam mais com o novo Firefox 57 (consulte" Atualização de WebExtensions ").

É 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 deserdá-los mais tarde, esse seria o comando:

sudo apt-mark unhold firefox firefox-locale-*
    
por rubo77 19.11.2017 / 08:45
3

Tudo o que você sempre quis saber sobre "manter" e "fixar" os pacotes em versões específicas: link

    
por Jeff Ferland 23.12.2010 / 22:09
3

Veja os bugs # 75332 , # 158981 e # 72806 .

O resumo é que hold no apt-get / aptitude level não está acionando o status hold no dpkg (veja bug 72806 especialmente) e o update-manager lê o status do dpkg.

A solução alternativa

é executada como root: echo "package hold" | dpkg --set-selections

    
por jasper 26.11.2012 / 08:24
1

Se você tiver o Synaptic instalado, poderá selecionar o pacote e usar o menu Pacote - & gt; Bloqueie a versão para impedir que ela seja atualizada.

Você pode instalar o Synaptic com o sudo apt-get install synaptic. Eu pessoalmente acho mais útil que o Centro de Software ... então, novamente, eu sou bastante velha escola. :)

    
por dinchamion 08.12.2011 / 21:06
1

Você pode usar no aptitude a "substituição específica", assim:

aptitude reinstall ~i oracle-java8-jre:

Este é um único uso de tempo (não armazenado para reinstalações futuras), manter substituição específica, para reinstalar todos os pacotes em seu sistema, mas não oracle-java8-jre.

Se você usar uma substituição específica de keep, o pacote momentaneamente ficará em um estado de manutenção e um aptitude não tentará instalá-lo.

Uma coisa muito boa se você acha que seu sistema foi comprometido de alguma forma.

    
por cabonamigo 18.05.2017 / 18:27
0

Ocasionalmente, pode-se querer reter todos os pacotes atualmente instalados. Veja como.

Primeiro salve o estado atual para poder desfazer:

dpkg --get-selections > current_selections.txt

Então, para segurar todos os pacotes:

dpkg --get-selections | sed -r "s/\tinstall/hold/" |dpkg --set-selections

Finalmente, quando você quiser reverter para o estado anterior:

dpkg --set-selections < current_selections.txt

Um caso de uso para isso pode ser ao criar uma VM ou um instantâneo da Amazon AMI para migrar de um controle de qualidade para o ambiente de produção.

    
por JVW 14.01.2015 / 20:46