Talvolta è necessario mantenere una versione specifica di un pacchetto Debian, dopo un incidente applicativo o il tempo di verificare un aggiornamento su una macchina di prova. apt-mark hold blocca le modifiche automatiche a quel pacchetto. Blocca anche la sua rimozione.
Usalo per un’eccezione identificata, con un motivo e una data di riesame. Lasciare un pacchetto di sicurezza bloccato per mesi finisce per creare un’area cieca negli aggiornamenti.

Identificare il pacchetto e la versione installata
Inizia controllando il nome esatto del pacchetto. Una ricerca nei repository non dice sempre cosa è realmente installato sul server.
dpkg-query -W -f='${Package} ${Version}n' nome-del-pacchetto
apt-cache policy nome-del-pacchetto
Il primo comando mostra la versione locale. Il secondo confronta questa versione con i candidati noti da APT. Se il pacchetto è legato a un servizio, annota anche il sintomo e la versione che funziona prima di bloccarlo.
Un hold non sostituisce la comprensione di una dipendenza. Se blocchi openssl, linux-image o una libreria utilizzata da più applicazioni, guarda cosa la prossima aggiornamento voleva modificare prima di congelare il pacchetto.
Bloccare l’aggiornamento con apt-mark hold
Il comando richiede diritti di amministratore. Sostituisci nome-del-pacchetto con il nome rilevato nel passaggio precedente.
sudo apt-mark hold nome-del-pacchetto
sudo apt-mark showhold
showhold deve visualizzare il pacchetto. APT rispetta quindi questa etichettatura durante le operazioni di aggiornamento regolari. Puoi comunque controllare cosa farebbe prima di accettare un aggiornamento:
sudo apt update
apt list --upgradable
sudo apt-get -s upgrade
L’opzione -s simula l’operazione. Non scarica né installa pacchetti. Verifica che il pacchetto bloccato rimanga alla sua versione prevista e che le dipendenze non spingano APT verso una situazione incoerente.
Non confondere hold e pacchetto installato manualmente
apt-mark manual impedisce soprattutto la auto-rimozione di una dipendenza. Non blocca il suo aggiornamento. Al contrario, apt-mark hold modifica la selezione dpkg del pacchetto per impedire la sua installazione, aggiornamento o rimozione automatica.
Puoi verificare questa selezione con dpkg:
dpkg --get-selections nome-del-pacchetto
dpkg --get-selections | grep ' hold$'
Questa distinzione evita un falso senso di sicurezza. Un pacchetto contrassegnato come manual può molto bene passare a una nuova versione durante apt upgrade.
Rimuovere il hold dopo il test
Quando la correzione è convalidata su una macchina di test, rimuovi il blocco e controlla di nuovo la lista. Non avviare un aggiornamento globale solo per sbloccare un singolo pacchetto.
sudo apt-mark unhold nome-del-pacchetto
sudo apt-mark showhold
sudo apt install nome-del-pacchetto
L’ultimo comando mira solo al pacchetto interessato. Ricontrolla i pacchetti aggiuntivi proposti da APT prima di confermare. Per un pacchetto sensibile, successivamente riavvia il servizio interessato e controlla i suoi log. La pagina di manuale apt-mark di Debian dettaglia anche le selezioni hold, install, remove e purge.
Se il hold era stato imposto dopo un aggiornamento difettoso, annota nel tuo ticket o nella tua documentazione: il pacchetto, la versione congelata, il motivo, la data del test e la condizione che consente la rimozione del blocco. Questa traccia evita che un altro amministratore rimuova il hold senza sapere perché esistesse.
Quando è necessario rimuovere un pacchetto dalla lista?
Ritorna sugli hold ad ogni ciclo di manutenzione. Un blocco temporaneo può diventare pericoloso quando un aggiornamento corregge una falla o un’incompatibilità di dipendenze. Controlla gli annunci Debian o l’editore del software, testa la nuova versione fuori produzione, poi utilizza apt-mark unhold non appena il problema iniziale è risolto.
Per installare un pacchetto .deb locale e riparare correttamente le dipendenze, consulta anche la nostra guida su dpkg e APT. Se automatizzi le correzioni di sicurezza, l’articolo su unattended-upgrades su Debian spiega i controlli da mantenere prima di lasciare che il compito funzioni da solo.