Às vezes, você deve manter uma versão específica de um pacote Debian, após um incidente aplicativo ou enquanto verifica uma atualização em uma máquina piloto. apt-mark hold bloqueia as alterações automáticas nesse pacote. Ele também bloqueia sua remoção.
Use-o para uma exceção identificada, com um motivo e uma data de reavaliação. Deixar um pacote de segurança bloqueado por meses acaba criando um ponto cego nas atualizações.

Identificar o pacote e a versão instalada
Comece verificando o nome exato do pacote. Uma pesquisa nos repositórios nem sempre diz o que realmente está instalado no servidor.
dpkg-query -W -f='${Package} ${Version}n' nome-do-pacote
apt-cache policy nome-do-pacote
A primeira comando exibe a versão local. A segunda compara essa versão com os candidatos conhecidos pelo APT. Se o pacote estiver relacionado a um serviço, anote também o sintoma e a versão que funciona antes de bloqueá-lo.
Um hold não substitui a compreensão de uma dependência. Se você bloquear openssl, linux-image ou uma biblioteca usada por vários aplicativos, veja o que a próxima atualização queria modificar antes de congelar o pacote.
Bloquear a atualização com apt-mark hold
O comando requer privilégios administrativos. Substitua nome-do-pacote pelo nome registrado na etapa anterior.
sudo apt-mark hold nome-do-pacote
sudo apt-mark showhold
showhold deve exibir o pacote. O APT respeita essa marcação durante as operações habituais de atualização. Você ainda pode controlar o que ele faria antes de aceitar uma atualização:
sudo apt update
apt list --upgradable
sudo apt-get -s upgrade
A opção -s simula a operação. Ela não baixa nem instala pacotes. Verifique se o pacote bloqueado permanece em sua versão esperada e se as dependências não estão levando o APT a uma situação incoerente.
Não confunda hold e pacote instalado manualmente
apt-mark manual impede principalmente a auto-remoção de uma dependência. Ele não bloqueia sua atualização. Por outro lado, apt-mark hold modifica a seleção dpkg do pacote para impedir sua instalação, atualização ou remoção automática.
Você pode verificar essa seleção com dpkg:
dpkg --get-selections nome-do-pacote
dpkg --get-selections | grep ' hold$'
Essa distinção evita um falso sentimento de segurança. Um pacote marcado como manual pode muito bem passar para uma nova versão durante apt upgrade.
Remover o hold após o teste
Quando a correção for validada em uma máquina de teste, remova o bloqueio e cheque novamente a lista. Não inicie uma atualização global apenas para desbloquear um único pacote.
sudo apt-mark unhold nome-do-pacote
sudo apt-mark showhold
sudo apt install nome-do-pacote
A última comando foca apenas no pacote em questão. Revise os pacotes adicionais propostos pelo APT antes de confirmar. Para um pacote sensível, reinicie depois o serviço envolvido e verifique seus logs. A página de manual apt-mark do Debian também detalha as seleções hold, install, remove e purge.
Se o hold tiver sido aplicado após uma atualização quebrada, mantenha em seu ticket ou documentação: o pacote, a versão congelada, a razão, a data do teste e a condição que permite o desbloqueio. Esse registro evita que outro administrador remova o hold sem saber por que ele existia.
Quando é preciso remover um pacote da lista?
Revise os holds a cada ciclo de manutenção. Um bloqueio temporário pode se tornar perigoso quando uma atualização corrige uma falha ou uma incompatibilidade de dependências. Verifique os anúncios do Debian ou do editor do software, teste a nova versão fora da produção e, em seguida, utilize apt-mark unhold assim que o problema inicial for resolvido.
Para instalar um pacote .deb local e corrigir as dependências corretamente, consulte também nosso guia sobre dpkg e APT. Se você automatizar as correções de segurança, o artigo sobre atualizações não supervisionadas no Debian explica os controles a manter antes de deixar a tarefa rodando sozinha.