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.
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.