Gestire Azure pacchetti Linux con DNF5

Questo articolo illustra le attività comuni di gestione dei pacchetti in Azure Linux, tra cui:

  • Posizione in cui risiede la configurazione del repository.
  • Come i comandi precedenti del gestore di pacchetti corrispondono a DNF5.
  • Come DNF memorizza nella cache i metadati e risolve i pacchetti.
  • Modalità di gestione dei kernel e di altri pacchetti di sola installazione.
  • Come abilitare gli aggiornamenti automatici.
  • I comandi DNF più comunemente usati.

Annotazioni

Azure Linux 4.0 è ora disponibile in preview ed è strettamente limitato a scopi di valutazione e test. Non è adatto per l'uso in produzione.

Configurazione del repository

DNF5 legge le definizioni dei repository da /etc/yum.repos.d/. Il nome della directory viene mantenuto da YUM per la compatibilità; DNF5 legge da questa directory.

Ogni .repo file in tale directory è un file di configurazione di testo normale che indica a DNF dove trovare i pacchetti, se verificarli con GpG e se il repository è abilitato per impostazione predefinita. Il file di configurazione DNF principale è /etc/dnf/dnf.conf, che controlla il comportamento globale, ad esempio le impostazioni della cache, il limite di sola installazione e la configurazione del proxy.

Azure Linux fornisce collegamenti simbolici di compatibilità in modo che i comandi legacy (yum, dnf (DNF4), microdnf e tdnf) rimandino tutti a DNF5:

lrwxrwxrwx.  1 root root       4  yum -> dnf5
lrwxrwxrwx.  1 root root       4  microdnf -> dnf5
-rwxr-xr-x.  1 root root 1614408  dnf5
lrwxrwxrwx.  1 root root       4  dnf -> dnf5
lrwxrwxrwx.  1 root root       4  tdnf -> dnf5

I sottocomandi comuni funzionano tutti tramite i collegamenti simbolici. I casi limite che dipendevano dagli elementi interni di DNF4 o da comportamenti specifici di microdnf potrebbero non funzionare. Per informazioni dettagliate sulle modifiche, vedere le risorse seguenti:

Come DNF5 risolve i pacchetti

Quando si esegue un comando DNF, DNF5 esegue i passaggi seguenti per determinare quali pacchetti installare, aggiornare o rimuovere:

  1. Carica ogni .repo file in /etc/yum.repos.d/ e seleziona i repository contrassegnati come abilitati.
  2. Aggiorna i metadati del repository, memorizzandolo nella cache in locale in /var/cache/libdnf5. I metadati memorizzati nella cache includono l'elenco di pacchetti, le informazioni sulla versione e sulle dipendenze, i checksum e le firme.
  3. Risolve l'installazione, la rimozione o l'aggiornamento richiesti nei repository abilitati, seleziona le versioni dei pacchetti e verifica l'integrità e le firme prima di applicare la transazione.

I repository disabilitati vengono ignorati a meno che non vengano abilitati in modo esplicito con --enablerepo=<repo-id> per un singolo comando.

La /var/cache/libdnf5 cache esiste, pertanto DNF non deve scaricare nuovamente i metadati in ogni chiamata. Eseguire dnf clean all per svuotarlo (vedere Comandi DNF usati di frequente).

Pacchetti di sola installazione e più versioni installate

Alcuni pacchetti, in particolare il kernel, vengono installati side-by-side anziché aggiornati sul posto. DNF5 controlla questa impostazione tramite due impostazioni in /etc/dnf/dnf.conf:

  • installonlypkgs: elenco dei nomi dei pacchetti che non vengono mai aggiornati direttamente. I pacchetti kernel rappresentano il punto di accesso predefinito.
  • installonly_limit: numero massimo di versioni di un pacchetto di sola installazione che possono coesistere nel sistema. Il valore predefinito è 3.

Quando viene installata una nuova versione e viene superato il limite, DNF rimuove automaticamente la versione meno recente.

Per il kernel, si ottiene quanto segue:

  • Fallback: se l'avvio di un nuovo kernel non riesce, GRUB può comunque avviare un kernel precedente e funzionante.
  • Convalida: è possibile installare e testare un nuovo kernel senza rimuovere quello in esecuzione.
  • Coesistenza varianti: è possibile installare compilazioni del kernel diverse (ad esempio, con set di funzionalità diversi) contemporaneamente.

Ogni versione del kernel è un RPM separato, quindi DNF tiene traccia e li rimuove come qualsiasi altro pacchetto.

Aggiornamenti automatici con dnf-automatic

dnf-automatic è un servizio che verifica periodicamente la disponibilità di aggiornamenti dei pacchetti, li scarica e, facoltativamente, li applica. È guidato da un timer di sistema anziché da un daemon di lunga durata.

Installazione di dnf-automatic

Eseguire l'installazione dnf-automatic usando il comando seguente:

sudo dnf install -y dnf-automatic

Abilitare il dnf-automatic timer

Abilitare il dnf-automatic timer immediatamente e tra i riavvii usando il comando seguente:

sudo systemctl enable --now dnf-automatic.timer
  • enable configura il timer per avviarsi all'avvio del sistema.
  • --now avvia il timer nella sessione corrente.

Controllare lo stato del dnf-automatic timer

Verificare che il timer sia attivo e vedere quando è stato eseguito per l'ultima volta usando il comando seguente:

systemctl status dnf-automatic.timer

L'output tipico è simile all'esempio seguente:

● dnf5-automatic.timer - dnf-automatic timer
     Loaded: loaded (/usr/lib/systemd/system/dnf5-automatic.timer; enabled; preset: disabled)
     Active: active (waiting) since Thu 2026-03-26 14:36:54 UTC; 13min ago
 Invocation: f6984eeceb7c40df99bca243f3da728c
    Trigger: Fri 2026-03-27 06:34:18 UTC; 15h left
   Triggers: ● dnf5-automatic.service

Active: active (waiting) è previsto: il servizio sottostante è un servizio singolo eseguito solo quando il timer scatta, quindi termina. La riga Trigger: mostra la prossima esecuzione pianificata.

Elenca la prossima esecuzione pianificata del timer dnf-automatic

Elencare l'esecuzione successiva insieme a qualsiasi altro timer usando il comando seguente:

systemctl list-timers dnf-automatic.timer

Output di esempio:

NEXT                        LEFT LAST PASSED UNIT                 ACTIVATES
Fri 2026-03-27 06:34:18 UTC  15h -         - dnf5-automatic.timer dnf5-automatic.service

1 timers listed.
Pass --all to see loaded but inactive timers, too.

Configurazione facoltativa di dnf-automatic

È possibile configurare il comportamento di aggiornamento automatico aggiungendo il /etc/dnf/automatic.conf file. Questo file controlla se gli aggiornamenti vengono scaricati, applicati automaticamente o limitati solo agli aggiornamenti di sola sicurezza. Per informazioni dettagliate sulla configurazione, vedere la documentazione dnf5-automatic

Annotazioni

Gli aggiornamenti automatici vengono installati tramite dnf-automatic, ma il sistema non viene riavviato automaticamente. Se viene aggiornato un kernel (o un altro pacchetto necessario per il riavvio), la nuova versione non avrà effetto fino al successivo riavvio. Dopo gli aggiornamenti, verificare se è necessario un riavvio e pianificare uno in base alle esigenze.

Comandi DNF usati di frequente

I comandi seguenti illustrano la gestione quotidiana dei pacchetti in Azure Linux.

dnf clean all

dnf clean all rimuove tutti gli elementi memorizzati nella cache DNF in /var/cache/libdnf5. Usarlo per:

  • Eseguire il ripristino da metadati danneggiati o non aggiornati che causano errori di transazione.
  • Ridurre le immagini del container rimuovendo la cache dei pacchetti dopo le installazioni nello stesso layer RUN.
  • Recuperare spazio su disco.

Esempio di contenitore:

RUN dnf install -y package1 package2 \
    && dnf clean all

dnf search corrisponde alle parole chiave rispetto ai nomi dei pacchetti e ai riepiloghi. Per esempio:

dnf search lsof

Output di esempio:

Updating and loading repositories:
 Azure Linux 4.0 - x86_64 - Microsoft                        100% |   7.6 KiB/s |   4.8 KiB |  00m01s
Repositories loaded.
Matched fields: name (exact)
 lsof.x86_64   A utility which lists open files on a Linux/UNIX system

dnf provides

dnf provides trova il pacchetto proprietario di un determinato file, comando o funzionalità. Per esempio:

dnf provides lsof

Output di esempio:

Updating and loading repositories:
Repositories loaded.
lsof-4.98.0-8.azl4.20260303.x86_64 : A utility which lists open files on a Linux/UNIX system
Repo         : @System
Matched From :
Provide      : lsof = 4.98.0-8.azl4.20260303

dnf install

dnf install installa uno o più pacchetti insieme alle relative dipendenze di runtime:

sudo dnf install lsof

Output di esempio:

Updating and loading repositories:
Repositories loaded.
Package           Arch     Version                  Repository    Size
Installing:
 lsof             x86_64   4.98.0-8.azl4.20260303   azurelinux  578.5 KiB

Transaction Summary:
 Installing:         1 package

Total size of inbound packages is 226 KiB. Need to download 226 KiB.
After this operation, 579 KiB extra will be used (install 579 KiB, remove 0 B).
Is this ok [y/N]: y
[1/1] lsof-0:4.98.0-8.azl4.20260303.x86_64                100% | 641.9 KiB/s | 226.0 KiB |  00m00s
[1/1] Total                                               100% | 640.1 KiB/s | 226.0 KiB |  00m00s
Running transaction
[1/3] Verify package files                                100% | 500.0   B/s |   1.0   B |  00m00s
[2/3] Prepare transaction                                 100% |  23.0   B/s |   1.0   B |  00m00s
[3/3] Installing lsof-0:4.98.0-8.azl4.20260303.x86_64     100% |   3.0 MiB/s | 580.2 KiB |  00m00s
Complete!

dnf remove

dnf remove disinstalla un pacchetto insieme a tutte le dipendenze installate unicamente per quel pacchetto:

sudo dnf remove -y lsof

Output di esempio:

Package           Arch     Version                  Repository    Size
Removing:
 lsof             x86_64   4.98.0-8.azl4.20260303   azurelinux  578.5 KiB

Transaction Summary:
 Removing:           1 package

After this operation, 579 KiB will be freed (install 0 B, remove 579 KiB).
Is this ok [y/N]: y
Running transaction
[1/2] Prepare transaction                                 100% |  27.0   B/s |   1.0   B |  00m00s
[2/2] Removing lsof-0:4.98.0-8.azl4.20260303.x86_64       100% |  72.0   B/s |  11.0   B |  00m00s
Complete!

dnf upgrade

dnf upgrade aggiorna i pacchetti installati alle versioni più recenti disponibili.

sudo dnf upgrade

Quando tutto è aggiornato, l'output è breve. Per esempio:

Updating and loading repositories:
Repositories loaded.
Nothing to do.

Tip

Passa -y a install, remove o upgrade in contesti non interattivi, come negli script, nelle pipeline CI e nelle build di container. Qualsiasi operazione DNF che modifica il sistema richiede i privilegi di root, quindi eseguila con sudo o come root.