Tabla de contenido
Olá! a actualizar os pacotes, por vezes pode ter problemas se alguns pacotes forem actualizados. Pode querer impedir que um determinado pacote seja actualizado, mas como é que mantém pacotes no Debian e Ubuntu Linux para impedir que um pacote específico seja actualizado? Poderá querer bloquear actualizações de pacotes para que os pacotes não sejam actualizados através do apt/apt-get.
Em Debian ou Ubuntu Linux podemos reter ou bloquear pacotes usando as opções de comando apt, apt-mark, aptitude, dpkg e dselect. Temos múltiplas opções, vejamos, na minha opinião, as mais úteis.
Retenção de pacotes ao usar o apt-get/apt (método 1)
Normalmente executamos os dois comandos seguintes para actualizar todos os pacotes:
root@host# sudo apt update && sudo apt upgrade
Ou também:
root@host# sudo apt-get update && sudo apt-get upgrade
Passo 1 – Lista de actualizações disponíveis
Executar o comando apt:
root@host# sudo apt list --upgradable
Passo 2 – Forçar o apt-get a reter o pacote chamado php7.4 usando a marca apt
Passar a opção de hold ao comando apt-mark como se segue para marcar um pacote como retido, o que impedirá que o pacote seja instalado, actualizado ou removido automaticamente:
root@host# apt-mark hold PACKAGE
Neste caso:
root@host# apt-mark hold php7.4 php7.4 set on hold. root@host#
Passo 3 – Mostrar uma lista de pacotes de espera
Agora para imprimir a lista de pacotes bloqueados:
apt-mark showhold
Passo 4 – Cancelar a retenção
Quer cancelar um adiamento que já tenha feito num pacote? Pode fazê-lo desta forma:
root@host# apt-mark unhold PACKAGE
No nosso caso:
root@host# apt-mark unhold php7.4
Como evitar uma actualização do pacote com o comando dpkg
comando (método 2)
El paquete debe estar instalado para ponerlo en espera cuando se utiliza el método dpkg. De lo contrario, obtendrá un error como el siguiente:
dpkg: warning: package not in status nor available database at line 1: PACKAGE
Ou talvez:
dpkg: warning: found unknown packages; this might mean the available database is outdated, and needs to be updated through a frontend method;
Podemos colocar um pacote em espera da seguinte forma:
echo "PACKAGE_NAME hold" | dpkg --set-selections
Usando o mesmo pacote php7.4 para o exemplo:
root@host# echo "php7.4 hold" | dpkg --set-selections
Obter o estado dos pacotes
dpkg --set-selections PACKAGE_NAME
Ou também:
dpkg --set-selections | grep PACKAGE_NAME
Desbloqueio de um pacote
Para remover a fechadura de um pacote:
echo "PACKAGE_NAME install" | dpkg --set-selections
Usando o mesmo pacote php7.4 para o exemplo:
root@host# echo "php7.4 install" | dpkg --set-selections
Bloqueio de actualização do pacote com o comando de aptitude (método 3)
Ao contrário do anterior, este método funciona tanto com pacotes instalados como com pacotes desinstalados.
Para colocar um pacote na lista negra, é necessário executar o seguinte comando:
aptitude hold PACKAGE
Seguindo os exemplos acima, com o pacote php7.4 seria:
root@host# aptitude hold php7.4
Podemos também impedir que um pacote seja actualizado para uma determinada versão, ao mesmo tempo que permitimos actualizações automáticas para versões futuras. Isto é útil, por exemplo, para evitar que uma versão indesejada de um pacote seja instalada. Imagine que temos php=7.4.2 e não queremos actualizar para php=7.4.4.4 porque tem um bug de segurança (é inventado, não verifiquei se é verdade). Podemos impedi-lo de se actualizar desta forma:
aptitude forbid-version PACKAGE=VERSION
Por outras palavras (é uma versão inventada do pacote:
aptitude forbid-version php7.4=7.4.4-0ubuntu2.10
Depois de bloquear um pacote das formas acima referidas, se executar o comando de actualização de aptitude e detectar actualizações para o pacote retido, verá algo semelhante a isto:
30 packages upgraded, 0 newly installed, 0 to remove and 1 not upgraded.