in

Como excluir um pacote específico do apt-get upgrade

Veja como manter aplicações estáveis congelando atualização de programas no Linux.

Ao trabalhar em alguns projetos, às vezes você precisa da estabilidade do seu ambiente. A atualização de um pacote pode fazer com que todo o projeto falhe. Às vezes, nós atualizamos acidentalmente esses pacotes e isso cria um problema grave no servidor. É por isso que pode ser importante manter uma versão específica de um pacote. Este artigo vai mostrar como excluir um pacote específico da atualização no Ubuntu 16.04.

- Anúncios -

1) Excluir pacotes com alguns comandos

Existem alguns métodos diferentes para excluir ou manter um pacote específico durante a atualização completa do sistema. É possível marcar um pacote como retido. Neste artigo, usaremos o pacote virtualbox para nossos exemplos. Você pode ver a versão instalada:

dpkg -l | grep virtualbox
ii  virtualbox    5.0.18-dfsg-2build1   amd64   x86  virtualization solution - base binaries

Agora você pode ver que temos uma versão atualizada disponível:

apt list --upgradable
Listing... Pronto
virtualbox/xenial-updates 5.0.40-dfsg-0ubuntu1.16.04.2 amd64 [upgradable from: 5.0.18-dfsg-2build1]

Você pode marcar os pacotes usando os comandos abaixo:

apt-mark

Você pode usar o comando apt-mark seguido da opção hold. Isso impedirá que o pacote seja automaticamente instalado, atualizado ou removido. A sintaxe é como esta:

apt-mark hold pacote

Na prática, é assim:

apt-mark hold virtualbox
virtualbox marcado para manter.

Você pode verificar com o apt upgrade:

apt upgrade
Lendo listas de pacotes... Pronto
Construindo árvore de dependências 
Lendo informação de estado... Pronto
Calculando atualização... Pronto
Os pacotes seguintes foram mantidos:
    virtualbox
0 pacotes atualizados, 0 pacotes novos instalados, 0 a serem removidos e 0 não atualizados.

Você pode ver que não é possível atualizar o pacote. Para desmarcar, use a sintaxe:

apt-mark unhold pacote

Na prática, é assim:

apt-mark unhold virtualbox
Cancelou manter em virtualbox.

dpkg

Você também pode usar o comando dpkg --set-selection para marcar o pacote. A sintaxe é esta:

echo " hold" | dpkg --set-selections

Na prática, é isto aqui:

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

Você não possui nenhum retorno que mostre o resultado. Então, verifique diretamente com uma atualização:

apt upgrade
Lendo listas de pacotes... Pronto 
Construindo árvore de dependências Lendo informação de estado... Pronto 
Calculando atualização... Pronto 
Os pacotes seguintes foram mantidos: 
    virtualbox 
0 pacotes atualizados, 0 pacotes novos instalados, 0 a serem removidos e 0 não atualizados.

Funcionou 🙂

Agora, para desmarcar, o comando é diferente e respeita a sintaxe:

echo "pacote instalado" | sudo dpkg --set-selections

Use-o assim:

echo "virtualbox install" | dpkg --set-selections

Novamente, você não terá nenhum retorno na tela. Como estamos utilizando usuário root, não estamos usando o sudo.

aptitude

Você ainda pode utilizar o comando aptitude. Por padrão, este comando não está presente no sistema, então você precisa instalar com o comando abaixo:

apt install aptitude

Para marcar um pacote com o aptitude, utilize a sintaxe:

aptitude hold pacote

Quando você marca um pacote com aptitude, assim como o dpkg, também não terá nenhum retorno na tela.

aptitude hold virtualbox
Nenhum pacote será instalado, atualizado ou removido.
0 pacotes atualizados, 0 novos instalados, 0 a serem removidos e 0 não atualizados.
É preciso obter 0 B de arquivos. Depois do desempacotamento, 0 B serão usados.

Se você verificar o resultado com um aptitude upgrade, você não terá nenhuma menção de um pacote marcado, mas terá se tentar pelo apt upgrade.

Você pode cancelar a marcação com a sintaxe:

aptitude pacote unhold

Assim:

aptitude unhold virtualbox
Nenhum pacote será instalado, atualizado ou removido.
0 pacotes atualizados, 0 novos instalados, 0 a serem removidos e 0 não atualizados.
É preciso obter 0 B de arquivos. Depois do desempacotamento, 0 B serão usados.

dselect

Você pode usar o comando dselect que é um front-end para dpkg, usado para gerenciar pacotes de software em distribuições Debian e baseadas em Debian. Não está presente por padrão, então você precisa instalá-lo:

apt install dselect

Inicie o comando:

dselect

Você terá no terminal o seguinte:

Interface do gerenciador de pacotes do Debian 'dselect' versão 1.18.4 (amd64).

 0. [A]cesso Escolher o método de acesso a usar. 
 1. [U]pdate Atualizar lista de pacotes disponíveis, se possível.
*2. [S]eleciona Solicita quais pacotes você quer em seu sistema.
 3. [I]nstalar Instalar e atualizar pacotes desejados.
 4. [C]onfigura Configurar quaisquer pacotes que estejam desconfigurados.
 5. [R]emover Remover programas indesejados.
 6. [Q]Sair Sair do dselect.

Mova-se com ^P e ^N, teclas direcionais, letras iniciais, ou dígitos;
Pressione <enter> para confirmar a seleção. ^L redesenha a tela.

Copyright (C) 1994-1996 Ian Jackson.
Copyright (C) 2000,2001 Wichert Akkerman.
Este é um software livre; veja a Licença Pública Geral GNU (GPL) versão 2 ou
superior para ver as condições de cópia. NÃO há garantias.

Marque a opção 2 apertando a tecla S ou o número 2, você será direcionado para a ajuda, leia e caso queira sair, aperte a tecla espaço.

Você pode consultar um pacote utilizando /. Após encontrar o pacote, aperte a tecla = ou H para manter o pacote.

Você pode conferir utilizando o comando apt upgrade:

apt upgrade 
Lendo listas de pacotes... Pronto 
Construindo árvore de dependências 
Lendo informação de estado... Pronto 
Calculando atualização... Pronto 
Os pacotes seguintes foram mantidos: 
    virtualbox 
0 pacotes atualizados, 0 pacotes novos instalados, 0 a serem removidos e 0 não atualizados.

Se quiser desmarcar um pacote, utilize o + ao invés de H ou =, fazendo com que apareçam 3 asteriscos no pacote.

2) Bloquear o pacote usando arquivos de configuração apt

Uma outra forma de marcar o pacote, é editar o arquivo /etc/apt/preferences. Para não atualizar um pacote ao atualizar todo o sistema, devemos definir uma prioridade para a apt < 0, se o arquivo não exisitr, você deve criá-lo. Você precisa respeitar a sintaxe abaixo:

Package: <nome-do-pacote> ('*' for all packages)

Pin: release * (o=Ubuntu para Origem do SO)

Pin-Priority: -1

Na linha Pin release, você pode adicionar o oiriginador dos pacotes e para os números em Pin-Priority, um número maior significa mais preferência e -1 é igual a ignorar esse pacote. Existem algumas outras opções que poder utilizadas.

Para bloquear o pacote do virtualbox, edite o arquivo conforme abaixo:

Package: virtualbox
Pin: release o=Ubuntu
Pin-Priority: -1

Salve e saia. Isso é tudo o que você precisa para bloquear o pacote. Para excluir o pacote, você pode comentar as linhas do arquivo ou simplesmente excluir o arquivo.

Você pode ver que é possível usar alguns métodos para bloquear um pacote. Isso pode ser útil para manter a versão estável do seu projeto. Você pode escolher o seu método preferido. Você não precisa usar dois ou mais métodos para o mesmo objetivo.

Written by Samuel Barbosa

É servidor público na Rede Federal de Educação, Desenvolvedor Web, pós-graduando em Engenharia de Software, estudante de Marketing Digital na Digital House. É apaixonado por open source, mountain bikes e guitarras.

Como iniciar máquinas virtuais pela linha de comando no GNU/Linux

Como iniciar máquinas virtuais pela linha de comando no GNU/Linux

Customizando o GRUB e LightDM no Debian 9