Às vezes, você precisa 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 mudanças 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 revisã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 está realmente 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, observe o que a próxima atualização desejava modificar antes de congelar o pacote.
Bloquear a atualização com apt-mark hold
O comando requer privilégios de administrador. Substitua nome-do-pacote pelo nome anotado na etapa anterior.
sudo apt-mark hold nome-do-pacote
sudo apt-mark showhold
showhold deve exibir o pacote. O APT respeita então essa marcação durante as operações normais de atualização. No entanto, 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 na versão esperada e se as dependências não estão forçando o APT a uma situação incoerente.
Não confundir 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. Em contrapartida, 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 facilmente passar para uma nova versão durante o 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 depois verifique 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 se concentra apenas no pacote em questão. Revise os pacotes adicionais propostos pelo APT antes de confirmar. Para um pacote sensível, reinicie o serviço afetado 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 foi 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 é necessário 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, use apt-mark unhold assim que o problema inicial for resolvido.
Para instalar um pacote .deb local e reparar as dependências adequadamente, consulte também nosso guia sobre dpkg e APT. Se você automatiza as correções de segurança, o artigo sobre unattended-upgrades no Debian explica os controles a serem mantidos antes de deixar a tarefa rodando sozinha.