Capita a quasi ogni amministratore di sistema: si esegue un dnf update di routine e, pochi minuti dopo, un servizio smette di rispondere, un'applicazione si comporta in modo anomalo o una dipendenza critica è incompatibile con la nuova versione installata. In ambienti di produzione, ogni minuto di downtime ha un costo. Conoscere le tecniche di downgrade e version locking con DNF non è un optional: è una competenza fondamentale per chi gestisce infrastrutture basate su Red Hat Enterprise Linux (RHEL) e distribuzioni derivate come AlmaLinux, Rocky Linux o CentOS Stream.
Cos'è DNF e perché è rilevante
DNF (Dandified YUM) è il package manager predefinito nelle distribuzioni RHEL 8 e successive. Sostituisce il vecchio YUM introducendo migliori performance, gestione delle dipendenze più robusta e un'API Python moderna. Nonostante la sua affidabilità, gli aggiornamenti automatici o non pianificati possono introdurre regressioni, ovvero comportamenti indesiderati causati da modifiche nel software rispetto a una versione precedente.
Verificare le versioni disponibili di un pacchetto
Prima di procedere con il downgrade, è essenziale identificare quali versioni del pacchetto sono disponibili nei repository configurati. Il comando da utilizzare è:
dnf --showduplicates list <nome-pacchetto>
Questo elenca tutte le versioni indicizzate, incluse quelle precedenti a quella attualmente installata. È buona pratica annotare la versione target prima di procedere.
Eseguire il downgrade con DNF
Il downgrade di un pacchetto si esegue con un comando diretto e sintattico:
dnf downgrade <nome-pacchetto>
DNF selezionerà automaticamente la versione immediatamente precedente a quella installata. Se si desidera specificare una versione esatta, la sintassi diventa:
dnf install <nome-pacchetto>-<versione>
Ad esempio, per tornare a una specifica release di nginx:
dnf install nginx-1.20.1-1.el9
È importante ricordare che il downgrade potrebbe richiedere il ripristino anche delle dipendenze — librerie o altri pacchetti collegati — per garantire la coerenza dell'ambiente. DNF gestisce questo processo in modo automatico, ma è sempre consigliabile revisionare l'elenco delle modifiche proposte prima di confermare.
Bloccare un pacchetto a una versione specifica: il Version Locking
Eseguire il downgrade è solo metà del lavoro. Senza un meccanismo di blocco, il successivo dnf update ripristinerà la versione più recente, vanificando l'intervento. Qui entra in gioco il plugin dnf-plugin-versionlock.
versionlock: plugin DNF che impedisce l'aggiornamento o il downgrade automatico di pacchetti specificati, fissandoli a una versione definita.
Installazione del plugin
dnf install python3-dnf-plugin-versionlock
Bloccare un pacchetto
dnf versionlock add <nome-pacchetto>
Visualizzare i pacchetti bloccati
dnf versionlock list
Rimuovere un blocco
Quando si è pronti ad aggiornare nuovamente il pacchetto in modo controllato:
dnf versionlock delete <nome-pacchetto>
Implicazioni pratiche in ambienti enterprise
In contesti enterprise, la gestione delle versioni dei pacchetti si intreccia con le policy di Change Management e con i cicli di vita del software definiti dai vendor. RHEL, in particolare, offre canali di aggiornamento differenziati (EUS - Extended Update Support) che permettono di rimanere su una minor release specifica per periodi prolungati. Il version locking tramite DNF rappresenta un complemento operativo a queste strategie, utile soprattutto quando si gestiscono stack applicativi con dipendenze rigide, come ambienti SAP, database Oracle o middleware legacy.
Un approccio maturo prevede di documentare ogni pacchetto bloccato, la motivazione del blocco e una data di revisione pianificata, integrando queste informazioni negli strumenti di configuration management adottati (Ansible, Puppet, Chef). In questo modo il version locking smette di essere una misura d'emergenza e diventa parte di una strategia di stabilità consapevole e tracciabile.
Considerazioni finali
La capacità di tornare indietro rapidamente dopo un aggiornamento problematico è un indicatore di maturità operativa. DNF fornisce tutti gli strumenti necessari: il downgrade per ripristinare uno stato funzionante, il versionlock per preservarlo nel tempo. Padroneggiare entrambe le tecniche significa ridurre il rischio di interruzioni non pianificate e aumentare la resilienza complessiva dell'infrastruttura Linux.
