Comprendere la Gestione dei Pacchetti Linux: APT vs. YUM vs. DNF

Un confronto pratico tra APT, YUM e DNF per installare, aggiornare, rimuovere e risolvere problemi con i pacchetti Linux.

Comprendere la Gestione dei Pacchetti Linux: APT vs. YUM vs. DNF

Se ti sposti tra Ubuntu, Debian, Fedora, Rocky Linux, AlmaLinux o RHEL, la gestione dei pacchetti è uno dei primi ambiti in cui la memoria muscolare viene meno. Il compito è lo stesso ovunque: installare software, applicare aggiornamenti di sicurezza, rimuovere ciò che non serve più e mantenere le dipendenze coerenti. I comandi e le posizioni dei file sono sufficientemente diversi che copiare il runbook sbagliato può far perdere tempo o danneggiare un host.

APT, YUM e DNF non sono strumenti concorrenti tra cui normalmente scegli su una singola macchina. Appartengono a diverse famiglie di distribuzioni. APT è lo strumento di alto livello normale sui sistemi basati su Debian. YUM è stato lo strumento di alto livello di lunga data sui sistemi più vecchi basati su Red Hat. DNF è il sostituto moderno su Fedora, RHEL 8 e successivi, CentOS Stream, Rocky Linux e AlmaLinux.

Cos'è un Gestore di Pacchetti?

Al suo cuore, un gestore di pacchetti è una raccolta di strumenti software che automatizzano il processo di installazione, aggiornamento, configurazione e rimozione dei pacchetti software da un sistema operativo. Invece di compilare software dal codice sorgente o gestire manualmente le dipendenze, un gestore di pacchetti interagisce con i repository software per ottenere binari precompilati e gestire automaticamente tutti i prerequisiti necessari.

Le funzioni chiave di un gestore di pacchetti includono:

  • Risoluzione delle Dipendenze: Identifica e installa automaticamente tutte le librerie richieste e altri pacchetti software di cui una particolare applicazione ha bisogno per funzionare.
  • Repository Software: Gestisce le connessioni a server remoti (repository) dove sono memorizzati i pacchetti, garantendo l'accesso a un'ampia gamma di software.
  • Aggiornamenti di Sistema: Facilita l'aggiornamento di singoli pacchetti o dell'intero sistema operativo, assicurando che le patch di sicurezza e le nuove funzionalità vengano applicate.
  • Integrità dei Pacchetti: Verifica l'autenticità e l'integrità dei pacchetti utilizzando firme digitali per prevenire manomissioni.
  • Rimozione Pulita: Assicura che quando il software viene disinstallato, tutti i suoi file associati e le dipendenze vengano rimossi in modo pulito, evitando l'accumulo di file nel sistema.

Le distribuzioni Linux tipicamente utilizzano uno dei due formati principali di pacchetto: .deb per i sistemi basati su Debian e .rpm per i sistemi basati su Red Hat. APT gestisce i pacchetti .deb, mentre YUM e DNF gestiscono i pacchetti .rpm.

APT (Advanced Package Tool)

APT è l'utilità a riga di comando per gestire i pacchetti .deb presenti principalmente su Debian e i suoi derivati, come Ubuntu, Linux Mint, Pop!_OS e molti altri. È rinomato per la sua robusta risoluzione delle dipendenze e un vasto ecosistema di software.

Concetti Fondamentali

  • dpkg: Mentre apt è lo strumento di alto livello, dpkg è lo strumento di basso livello sottostante che effettivamente installa, rimuove e gestisce i singoli pacchetti .deb. APT funge da front-end per dpkg, gestendo repository e dipendenze.
  • sources.list: Il file /etc/apt/sources.list (e i file in /etc/apt/sources.list.d/) definisce le posizioni dei repository software che APT utilizza per trovare i pacchetti. Questi possono essere repository ufficiali, PPA (Personal Package Archives) di terze parti o fonti locali.
  • Struttura dei Pacchetti: I pacchetti sono distribuiti come file .deb, che sono essenzialmente archivi contenenti il software compilato, i file di configurazione e i metadati.

Comuni Comandi APT

Storicamente, apt-get era il comando principale, ma il comando apt (introdotto intorno a Debian 8 / Ubuntu 16.04) offre un'interfaccia più user-friendly combinando le funzionalità più comuni di apt-get e apt-cache.

Compito Comando apt Descrizione
Aggiornare le liste dei pacchetti sudo apt update Aggiorna l'elenco dei pacchetti disponibili e delle loro versioni dai repository.
Aggiornare i pacchetti installati sudo apt upgrade Aggiorna tutti i pacchetti installati alle versioni più recenti. Non rimuove pacchetti.
Aggiornamento completo del sistema sudo apt full-upgrade Aggiorna tutti i pacchetti installati, rimuovendo quelli vecchi se necessario per risolvere le dipendenze.
Installare un pacchetto sudo apt install <nome_pacchetto> Installa un pacchetto specificato e le sue dipendenze.
Rimuovere un pacchetto sudo apt remove <nome_pacchetto> Rimuove un pacchetto ma conserva i suoi file di configurazione.
Eliminare un pacchetto sudo apt purge <nome_pacchetto> Rimuove un pacchetto e i suoi file di configurazione.
Cercare un pacchetto apt search <parola_chiave> Cerca pacchetti che corrispondono a una parola chiave.
Mostrare dettagli del pacchetto apt show <nome_pacchetto> Mostra informazioni dettagliate su un pacchetto.
Pulire i vecchi pacchetti sudo apt autoremove Rimuove i pacchetti di dipendenza installati automaticamente che non sono più necessari.

Esempi

# Aggiornare le liste dei pacchetti
sudo apt update

# Installare il server web 'nginx'
sudo apt install nginx

# Aggiornare tutti i pacchetti installati
sudo apt upgrade

# Rimuovere 'nginx' e i suoi file di configurazione
sudo apt purge nginx

Vantaggi di APT

  • Gestione affidabile delle dipendenze: APT è bravo a spiegare cosa intende installare, aggiornare, tenere indietro o rimuovere prima di modificare il sistema.
  • Vasto ecosistema di repository: I repository di Debian e Ubuntu coprono un'ampia gamma di software per server e desktop.
  • Comportamento prevedibile del server: Le versioni stabili di Debian e Ubuntu LTS di solito danno priorità a versioni testate dei pacchetti rispetto all'ultima release upstream.

Svantaggi di APT

  • Versioni Software più Recenti: A volte, i pacchetti nei repository ufficiali potrebbero non essere le versioni assolutamente più recenti a causa dell'attenzione alla stabilità e ai test approfonditi.

YUM (Yellowdog Updater, Modified)

YUM era il gestore di pacchetti principale per Red Hat Enterprise Linux (RHEL) e i suoi derivati come CentOS, Fedora (fino a poco tempo) e Scientific Linux. Opera su pacchetti .rpm (Red Hat Package Manager).

Concetti Fondamentali

  • rpm: Simile a dpkg, rpm è lo strumento di gestione dei pacchetti di basso livello per i file .rpm. YUM funge da front-end di livello superiore.
  • File .repo: Le configurazioni dei repository sono tipicamente definite in file .repo situati in /etc/yum.repos.d/. Questi file specificano l'URL di base, le chiavi GPG e altri metadati per ogni repository.
  • Struttura dei Pacchetti: Il software è distribuito come file .rpm, contenenti binari, librerie e metadati.

Comuni Comandi YUM

Compito Comando yum Descrizione
Verificare la presenza di aggiornamenti sudo yum check-update Verifica la disponibilità di aggiornamenti senza installarli.
Aggiornare tutti i pacchetti sudo yum update Aggiorna tutti i pacchetti installati.
Installare un pacchetto sudo yum install <nome_pacchetto> Installa un pacchetto specificato e le sue dipendenze.
Rimuovere un pacchetto sudo yum remove <nome_pacchetto> Rimuove un pacchetto.
Cercare un pacchetto yum search <parola_chiave> Cerca pacchetti che corrispondono a una parola chiave.
Mostrare dettagli del pacchetto yum info <nome_pacchetto> Mostra informazioni dettagliate su un pacchetto.
Pulire i file nella cache sudo yum clean all Pulisce i metadati del repository e i pacchetti nella cache.

Esempi

# Verificare la presenza di aggiornamenti disponibili
sudo yum check-update

# Installare il server web 'httpd' (Apache)
sudo yum install httpd

# Aggiornare tutti i pacchetti installati
sudo yum update

# Rimuovere 'httpd'
sudo yum remove httpd

Vantaggi di YUM

  • Comportamento enterprise maturo: YUM è ancora comune su sistemi RHEL e CentOS più vecchi, quindi lo vedrai nei runbook legacy.
  • Cronologia delle transazioni: yum history può mostrare installazioni, aggiornamenti e rimozioni precedenti. In alcuni casi puoi annullare o ripristinare una transazione, ma dovresti testarlo attentamente perché i file di configurazione, lo stato del servizio e i dati esterni non vengono magicamente ripristinati.

Svantaggi di YUM

  • Prestazioni: A volte può essere più lento rispetto ai moderni gestori di pacchetti come DNF, specialmente con repository grandi o alberi di dipendenze complessi.
  • In fase di sostituzione: Nei sistemi più recenti basati su RHEL (RHEL 8+), DNF ha sostituito YUM come gestore di pacchetti predefinito, anche se yum spesso funziona ancora come alias per dnf.

DNF (Dandified YUM)

DNF è il gestore di pacchetti di nuova generazione per le distribuzioni basate su Red Hat, che funge da successore di YUM. È il predefinito su Fedora (dalla versione 18), RHEL 8+, CentOS Stream, AlmaLinux e Rocky Linux. DNF risolve molte delle carenze di YUM, offrendo prestazioni migliorate e risoluzione delle dipendenze.

Concetti Fondamentali

  • libsolv: DNF utilizza libsolv per la risoluzione delle dipendenze, che è altamente ottimizzato e fornisce prestazioni significativamente migliori rispetto al vecchio risolutore di YUM.
  • Modularità: Una caratteristica chiave in RHEL 8+ e Fedora, la modularità consente a diverse versioni o stream di un pacchetto software (ad esempio, Python 3.6 vs. Python 3.8) di essere disponibili simultaneamente, e gli utenti possono scegliere quale installare.
  • Compatibilità: DNF mantiene un'interfaccia a riga di comando in gran parte compatibile con YUM, rendendo la transizione più facile per gli utenti.

Comuni Comandi DNF

Molti comandi DNF sono identici o molto simili ai comandi YUM.

Compito Comando dnf Descrizione
Verificare la presenza di aggiornamenti sudo dnf check-update Verifica la disponibilità di aggiornamenti senza installarli.
Aggiornare tutti i pacchetti sudo dnf update Aggiorna tutti i pacchetti installati.
Installare un pacchetto sudo dnf install <nome_pacchetto> Installa un pacchetto specificato e le sue dipendenze.
Rimuovere un pacchetto sudo dnf remove <nome_pacchetto> Rimuove un pacchetto.
Cercare un pacchetto dnf search <parola_chiave> Cerca pacchetti che corrispondono a una parola chiave.
Mostrare dettagli del pacchetto dnf info <nome_pacchetto> Mostra informazioni dettagliate su un pacchetto.
Pulire i file nella cache sudo dnf clean all Pulisce i metadati del repository e i pacchetti nella cache.
Elencare i moduli disponibili dnf module list Elenca gli stream di moduli software disponibili.
Abilitare un modulo sudo dnf module enable <modulo> Abilita uno stream di modulo specifico.

Esempi

# Verificare la presenza di aggiornamenti disponibili
sudo dnf check-update

# Installare il database 'mariadb-server'
sudo dnf install mariadb-server

# Aggiornare tutti i pacchetti installati
sudo dnf update

# Elencare gli stream del modulo Node.js disponibili
dnf module list nodejs

# Abilitare lo stream del modulo Node.js 16 (se disponibile)
sudo dnf module enable nodejs:16

# Rimuovere 'mariadb-server'
sudo dnf remove mariadb-server

Vantaggi di DNF

  • Risoluzione delle dipendenze migliorata: DNF utilizza libsolv, che generalmente gestisce scelte di dipendenze complesse più velocemente e in modo più chiaro rispetto al vecchio comportamento di YUM.
  • Output e API più puliti: DNF è più facile da usare negli script rispetto al vecchio YUM in molti flussi di lavoro amministrativi.
  • Modularità: Fornisce flessibilità per installare diverse versioni di software all'interno dello stesso sistema.
  • Design moderno: Costruito con un'API chiara per estensioni e codice più pulito.

Svantaggi di DNF

  • Tecnologia più recente: Sebbene stabile, alcune funzionalità, specialmente quelle relative alla modularità, potrebbero richiedere una curva di apprendimento leggermente più ripida per i nuovi utenti.

Differenze Chiave e Casi d'Uso

La distinzione fondamentale tra APT e YUM/DNF risiede nella famiglia di distribuzioni che servono e nel formato dei pacchetti che gestiscono.

Caratteristica APT (Debian/Ubuntu) YUM/DNF (RHEL/Fedora)
Formato del Pacchetto .deb (Pacchetto Debian) .rpm (Pacchetto Red Hat)
Strumento Sottostante dpkg rpm
File di Configurazione /etc/apt/sources.list /etc/yum.repos.d/*.repo
Distribuzioni Principali Debian, Ubuntu, Mint, Pop!_OS RHEL, Fedora, CentOS, AlmaLinux, Rocky Linux
Risolutore di Dipendenze Interno (robusto, ben testato) YUM: Interno (più lento); DNF: libsolv (più veloce, moderno)
Evoluzione apt-get -> apt yum -> dnf
Modularità Non integrata direttamente (PPA per flessibilità) DNF offre stream module per versioni multiple
  • APT è ideale per utenti e amministratori che danno priorità a una stabilità incrollabile, un ampio supporto della community e un vasto repository software. È la scelta per i sistemi basati su Debian, che sono popolari sia per server che per desktop.
  • YUM ha svolto bene il suo scopo in ambienti enterprise per anni, fornendo un metodo stabile e collaudato per la gestione del software. Sebbene ancora presente come alias, il suo utilizzo diretto sta venendo gradualmente eliminato.
  • DNF è lo standard moderno per i sistemi basati su Red Hat. È la scelta per chi utilizza RHEL contemporaneo, Fedora o i loro derivati, offrendo prestazioni, risoluzione avanzata delle dipendenze e funzionalità come la modularità, rendendolo eccellente per ambienti di sviluppo e produzione che richiedono versioni software specifiche.

Migliori Pratiche per la Gestione dei Pacchetti

Indipendentemente dal gestore di pacchetti che stai utilizzando, seguire le migliori pratiche garantisce un sistema sano e sicuro:

  • Aggiornamenti Regolari: Esegui periodicamente sudo apt update && sudo apt upgrade o sudo dnf update per applicare patch di sicurezza e correzioni di bug.
  • Comprendere Prima di Installare: Controlla sempre cosa fa un pacchetto e la sua reputazione prima di installarlo, specialmente da repository di terze parti.
  • Verificare le Fonti dei Repository: Assicurati che eventuali repository aggiunti siano affidabili per prevenire l'installazione di software dannoso o instabile.
  • Pulire: Usa sudo apt autoremove o sudo dnf autoremove per rimuovere le dipendenze orfane e liberare spazio su disco.
  • Rivedere apt show o dnf info: Prima di installare, usa questi comandi per ottenere dettagli sul pacchetto, incluse le sue dipendenze e dimensioni.
  • Eseguire il Backup dei Sistemi Critici: Prima di eseguire aggiornamenti importanti (ad esempio, apt full-upgrade o aggiornamenti di distribuzione), assicurati di avere un backup dei dati critici e delle configurazioni.

Risoluzione dei Problemi del Gestore di Pacchetti

La maggior parte dei fallimenti del gestore di pacchetti non sono misteriosi una volta che li separi in tre categorie: metadati del repository, conflitti di dipendenze e stato del database locale dei pacchetti.

Se APT dice che non riesce a trovare un pacchetto, inizia con sudo apt update. APT non interroga ogni repository remoto fresco per ogni installazione. Utilizza metadati locali. Se il pacchetto è stato aggiunto di recente, o se la macchina non ha aggiornato le sue liste per un po', l'installazione può fallire anche se il repository è corretto. Se apt update stesso fallisce, leggi la riga del repository nell'errore. Un PPA obsoleto, una chiave di firma scaduta, un mirror rotto o un nome in codice di distribuzione non supportato sono spesso il vero problema.

Su sistemi DNF o YUM, la prima mossa equivalente è solitamente:

sudo dnf makecache
sudo dnf repolist

Su sistemi più vecchi:

sudo yum makecache
sudo yum repolist

repolist è utile perché conferma se il repository è abilitato. Un pacchetto può essere disponibile da EPEL, CodeReady Builder, PowerTools, CRB o un repository del fornitore, ma non dai repository del sistema operativo di base. In tal caso, la soluzione non è scaricare un RPM casuale dal web. La soluzione più pulita è abilitare il repository corretto e lasciare che il gestore di pacchetti gestisca le dipendenze.

I conflitti di dipendenze richiedono più attenzione. Se APT propone di rimuovere una grande parte del sistema, fermati e leggi la transazione. Lo stesso vale per dnf remove. Rimuovere un pacchetto può rimuovere servizi che dipendono da esso. Sui server, mi piace copiare la transazione proposta nelle note dell'incidente prima di accettarla. Questo ti dà una registrazione di ciò che è cambiato se un servizio si rompe successivamente.

Per installazioni interrotte, usa il comando di riparazione nativo prima di provare la pulizia manuale:

# Debian/Ubuntu
sudo dpkg --configure -a
sudo apt -f install

# Fedora/RHEL-family
sudo dnf check
sudo dnf history

La cancellazione manuale sotto /var/lib/dpkg, /var/lib/rpm, /var/cache/apt o /var/cache/dnf dovrebbe essere l'ultima risorsa. Quelle directory sono lo stato del gestore di pacchetti, non disordine ordinario.

Un Pratico Foglio di Traduzione

Quando segui una documentazione scritta per una diversa famiglia Linux, traduci l'intento, non solo il comando.

Compito Debian/Ubuntu Fedora/RHEL-family
Aggiornare i metadati del repository sudo apt update sudo dnf makecache
Aggiornare i pacchetti installati sudo apt upgrade sudo dnf upgrade o sudo dnf update
Installare un pacchetto sudo apt install nginx sudo dnf install nginx
Rimuovere un pacchetto sudo apt remove nginx sudo dnf remove nginx
Rimuovere pacchetto e configurazione sudo apt purge nginx Nessun equivalente esatto; gli script del pacchetto possono lasciare configurazioni/dati
Cercare pacchetti apt search nginx dnf search nginx
Mostrare info pacchetto apt show nginx dnf info nginx
Elencare pacchetti installati apt list --installed dnf list installed
Vedere file del pacchetto dpkg -L nginx rpm -ql nginx
Trovare il pacchetto proprietario di un file dpkg -S /percorso/file rpm -qf /percorso/file

L'ultima coppia è sottovalutata. Se trovi un binario o un file di configurazione strano su un host, dpkg -S o rpm -qf ti dice quale pacchetto lo possiede. Se nessun pacchetto lo possiede, il file potrebbe essere stato creato da un'applicazione, uno script di deployment, un amministratore o un attaccante. Questo non prova nulla da solo, ma ti dà una domanda migliore successiva.

Il modo più sicuro di pensare alla gestione dei pacchetti è semplice: rimani all'interno dello strumento che la tua distribuzione si aspetta, leggi le transazioni prima di accettarle e tratta i repository di terze parti come dipendenze di produzione. Una volta che sai dove vivono i file del repository e come ispezionare la proprietà dei pacchetti, APT, YUM e DNF sembrano molto meno mondi diversi.