Aggiornamenti automatici · 8 min read · Jan 14, 2026

Aggiornamenti automatici con unattended-upgrades su Debian e Ubuntu

Le versioni di Linux ricevono aggiornamenti frequentemente e gli aggiornamenti di sicurezza dovrebbero essere installati prontamente. Debian e Ubuntu utilizzano il sistema APT e, sebbene sia relativamente facile installare manualmente tutti gli aggiornamenti in sospeso, l’amministratore potrebbe non ricordarsi di farlo o preferire dormire la notte piuttosto che controllare gli aggiornamenti. Questo articolo è principalmente per installazioni server.

Aggiornare e installare pacchetti manualmente utilizzando apt upgrade è ancora possibile quando si utilizza unattended-upgrades. Se un aggiornamento avviato da unattended-upgrades è in esecuzione quando apt viene utilizzato dalla riga di comando, il sistema apt informa l’utente che un’operazione è già in corso e l’utente deve attendere fino al termine prima di continuare con i comandi apt.

Un modo semplice per amministratori occupati

Installa unattended-upgrades, verifica che sia abilitato e monitora il loro funzionamento dai file di log.

apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades

Il comando dpkg-reconfigure mostra una finestra di dialogo che chiede sì o no per scaricare e installare automaticamente gli aggiornamenti di sicurezza stabili. Verifica che sia stato risposto sì.

unattended-upgrades controlla gli aggiornamenti due volte al giorno a orari casuali e installa aggiornamenti di sicurezza stabili.

Monitora cosa sta succedendo leggendo i file di log nella directory /var/log/unattended-upgrades/ e nel file /var/log/dpkg.log.

Dove trovare la documentazione

Il file di configurazione /etc/apt/apt.conf.d/50unattended-upgrades ha documentazione nei commenti. Questo documento si riferisce a quel file d’ora in poi come 50unattended-upgrades.

Il file readme /usr/share/doc/unattended-upgrades/README.md.gz ha istruzioni utili. Può essere letto con il comando zless (disponibile dal pacchetto gzip). Questo documento si riferisce a quel file d’ora in poi come README.

Il wiki di Debian ha una pagina https://wiki.debian.org/UnattendedUpgrades.

La pagina della documentazione del server Ubuntu ha un capitolo “Aggiornamenti automatici” su unattended-upgrades.

La pagina man di unattended-upgrade, man unattended-upgrade.

Configurazione avanzata

Utilizzando il modo semplice noterai che non tutti gli aggiornamenti vengono installati automaticamente. Potresti anche voler avere più controllo su ciò che accade automaticamente oltre all’installazione degli aggiornamenti.

Il file di configurazione /etc/apt/apt.conf.d/50unattended-upgrades ha documentazione inclusa nei commenti, quindi leggi il file per esaminare quali configurazioni sono disponibili. Molto utile è configurare unattended-upgrades per inviare e-mail quando accade qualcosa.

È importante sapere che il file di configurazione viene creato dall’installazione o dall’aggiornamento del pacchetto unattended-upgrades, quindi quando unattended-upgrades stesso viene aggiornato o quando si passa alla versione successiva del sistema operativo, le modifiche apportate a questo file causano conflitti che devono essere risolti manualmente. Il file di documentazione README suggerisce di creare il file 52unattended-upgrades-local invece di modificare il file di configurazione originale.

Se vuoi, puoi controllare il file /etc/apt/apt.conf.d/20auto-upgrades che contiene queste righe:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

Se hai eseguito il comando dpkg-reconfigure e hai risposto sì, le righe dovrebbero essere presenti. Le righe controllano l’abilitazione di unattended-upgrades.

Inviare e-mail

Per far funzionare l’invio di e-mail, l’host deve avere un sistema di e-mail funzionante in grado di inviare e-mail. Verifica prima questo.

Abilita l’invio di e-mail da unattended-upgrades modificando il file di configurazione 52unattended-upgrades-local (crea il file se non esiste nella directory /etc/apt/apt.conf/). Copia la riga

//Unattended-Upgrade::Mail "";

da 50unattended-upgrades, decommentala e aggiungi l’indirizzo e-mail di destinazione tra le virgolette.

C’è anche un’impostazione per configurare se l’e-mail viene sempre inviata quando unattended-upgrades esegue un aggiornamento, o solo in caso di errori.

// Imposta questo valore su "true" per ricevere e-mail solo in caso di errori. Il valore predefinito
// è sempre inviare una mail se Unattended-Upgrade::Mail è impostato
//Unattended-Upgrade::MailOnlyOnError "false";

Se vuoi cambiare l’impostazione, copia le righe in 52unattended-upgrades-local, decommenta la riga di impostazione e cambia “false” in “true”.

Controllare con

unattended-upgrade --dry-run -d

è una buona idea dopo aver modificato il file di configurazione.

Almeno su Debian 10, 11 e Ubuntu 22.04, l’installazione di unattended-upgrades crea un collegamento simbolico unattended-upgrades a unattended-upgrade nella directory /usr/bin/ e/o /bin/, quindi entrambi i comandi funzionano allo stesso modo.

$ ls -lhi /bin/unattended-upgrade*
11404505 -rwxr-xr-x 1 root root 98K tammi  15  2022 /bin/unattended-upgrade
11407087 lrwxrwxrwx 1 root root  18 tammi  15  2022 /bin/unattended-upgrades -> unattended-upgrade

Aggiungere un repository

Aggiungere un repository da cui aggiornare automaticamente viene fatto aggiungendo righe a Unattended-Upgrade::Origins-Pattern. Ci sono documentazioni su questo nel file di configurazione.

Il README istruisce le impostazioni nel file di configurazione successivo 52unattended-upgrades-local per sovrascrivere le impostazioni predefinite. Ho provato e ho scoperto che impostare Unattended-Upgfade::Origins-Pattern non sovrascrive completamente ciò che è stato impostato nel file predefinito, invece, viene aggiunto ai predefiniti. Quindi non è necessario copiare l’intero Unattended-Upgrade::Origins-Pattern predefinito, può essere aggiunto.

Ad esempio, il pacchetto goaccess non si aggiorna automaticamente quando è installato dal Repository Ufficiale di GoAccess. Si aggiornerebbe automaticamente se fosse installato dal solito repository Debian (è disponibile da entrambi). Aggiungere il repository GoAccess a Origins-Pattern fa sì che unattended-upgrades esegua l’aggiornamento.

Esamina la situazione con apt list –upgradable:

root@posti:~# LANG=C apt list --upgradable 
Listing... Done
goaccess/unknown 2:1.6.3-buster amd64 [upgradable from: 2:1.6.2-buster]
php-tcpdf/buster-backports 6.5.0+dfsg1-1~bpo10+1 all [upgradable from: 6.3.5+dfsg1-1~bpo10+1]
root@posti:~#

Quindi ci sono due pacchetti che non sono stati aggiornati automaticamente da unattended-upgrades. Esaminando goaccess si vede che proviene dal Repository Ufficiale di GoAccess (e una versione precedente dal solito repository Debian).

root@posti:~# LANG=C apt policy goaccess
goaccess:
  Installed: 2:1.6.2-buster
  Candidate: 2:1.6.3-buster
  Version table:
     2:1.6.3-buster 500
        500 https://deb.goaccess.io buster/main amd64 Packages
 *** 2:1.6.2-buster 100
        100 /var/lib/dpkg/status
     1:1.2-4+b10 500
        500 http://mirror.hetzner.de/debian/packages buster/main amd64 Packages
        500 http://deb.debian.org/debian buster/main amd64 Packages
    root@posti:~#

Eseguire unattended-upgrade –dry-run -d mostra quali origini hanno i pacchetti non installati. Questo può aiutare a capire cosa deve essere aggiunto a Origins-Pattern.

Esaminando il log dell’ultima esecuzione di unattended upgrades mostra quali origini sono considerate durante l’aggiornamento automatico:

2022-09-05 08:28:08,955 INFO Controllo se il sistema è in esecuzione a batteria è saltato. Si prega di installare
    il pacchetto powermgmt-base per controllare lo stato dell'alimentazione e saltare l'installazione degli aggiornamenti quando il sistema
    è in esecuzione a batteria.
2022-09-05 08:28:08,960 INFO Blacklist iniziale : 
2022-09-05 08:28:08,960 INFO Whitelist iniziale: 
2022-09-05 08:28:08,960 INFO Avvio dello script di aggiornamenti automatici
2022-09-05 08:28:08,960 INFO Le origini consentite sono: 
origin=Debian,codename=buster,label=Debian, 
origin=Debian,codename=buster,label=Debian-Security

Il repository GoAccess non è ancora presente, quindi ora lo aggiungo a /etc/apt/apt.conf.d/52unattended-upgrades-local.

A margine, se hai installato unattended-upgrades su un laptop, considera di installare powermgmt-base. Utilizzando questo, unattended-upgrades non avvia aggiornamenti quando è in esecuzione a batteria, come informa il messaggio nel log. Se eseguito su un server che è sempre alimentato, quel messaggio informativo non viene più mostrato con Unattended-Upgrade::OnlyOnACPower “false”; aggiunto alla configurazione.

Unattended-Upgrade::Origins-Pattern {
// Taleman aggiunto GoAccess 2022-09-05
        "o=GoAccess Repository, n=buster, l=Official GoAccess Repository";
};
Unattended-Upgrade::OnlyOnACPower "false";

apt policy non ha mostrato il campo a per GoAccess, quindi ho usato o, n e l. Trova informazioni su questi campi nel README.

La sostituzione delle variabili è supportata per ${distro_id} che contiene l’output di lsb_release -i e ${distro_codename} che contiene l’output di lsb_release -c. Quindi invece di n=buster avrei potuto scrivere n=${distro_codename}.

Ci sono stati due pacchetti non aggiornati automaticamente, l’altro che non è ancora aggiornato è php-tcpdf. Può ovviamente essere aggiornato con apt upgrade, ma può essere aggiunto a unattended-upgrades per essere aggiornato automaticamente. La procedura è la stessa di goaccess.

Prima esamina la situazione con apt policy php-tcpdf. Questo mostra che è installato dalla sezione del repository Debian buster-backports.

Dal log di unattended-upgrades si può vedere che buster-backports non è tra le origini consentite. È nel file 50unattended-upgrades ma commentato. Per abilitarlo, copia la riga

// "o=Debian Backports,a=${distro_codename}-backports,l=Debian Backports";

in 52unattended-upgrades-local all’interno dell’impostazione Origins-Pattern e decommenta.

Dopo aver modificato il file, controlla con unattended-upgrades –dry-run -d che il repository aggiunto ora sia tra le “Origini consentite” e php-tcpdf sia tra i pacchetti che verranno aggiornati.

Controllare i tempi

Unattended-upgrades viene eseguito a orari casuali per alleviare il carico sui server dei repository. Questo è per evitare picchi di carico elevati che si verificherebbero se tutti gli host iniziassero a fare aggiornamenti contemporaneamente. Pensa attentamente se decidi di cambiare questo comportamento. Se gestisci il tuo repository o un mirror del repository, allora i picchi di carico colpiscono il tuo server di repository e eviti di infastidire gli amministratori dei repository su Internet.

È systemd che controlla a quali orari unattended-upgrades inizia. Il file /lib/systemd/system/apt-daily.timer ha una sezione Timer che avvia le attività di download di apt due volte al giorno con un ritardo casuale di 12 ore. Ti consiglio di non modificare questo, o avere motivi molto validi per farlo.

Il resto delle configurazioni temporali viene fatto nei file 50unattended-upgrades e 52unattended-upgrades-local.

L’impostazione Unattended-Upgrade::Update-Days controlla i giorni della settimana in cui unattended-upgrades viene eseguito. Il valore predefinito è vuoto, il che significa eseguirlo ogni giorno. Può essere configurato per essere eseguito, ad esempio, solo il sabato e la domenica.

Riavvio automatico

Unattended-upgrades può essere impostato per riavviarsi quando gli aggiornamenti installati richiedono un riavvio. Questo può essere configurato per avvenire immediatamente o a un orario desiderato. Queste configurazioni utilizzano le impostazioni

//Unattended-Upgrade::Automatic-Reboot "false";
//Unattended-Upgrade::Automatic-Reboot-WithUsers "true";
//Unattended-Upgrade::Automatic-Reboot-Time "02:00";

Il valore predefinito è nessun riavvio automatico. Se cambi l’impostazione in “true”, il riavvio avviene immediatamente dopo l’installazione dell’aggiornamento. Automatic-Reboot-Time può essere impostato per effettuare il riavvio a un orario desiderato se ci sono aggiornamenti installati che richiedono un riavvio.

Blacklist, Whitelist

Una blacklist impedisce a un pacchetto, che altrimenti verrebbe aggiornato da unattended-upgrades, di essere aggiornato. L’impostazione Package-Blacklist contiene espressioni regolari. Se il nome del pacchetto corrisponde, viene escluso dall’aggiornamento automatico.

Non ho utilizzato questa funzione, penso che possa essere più utile se si esegue una versione di sviluppo dove ha senso impedire l’aggiornamento automatico di pacchetti critici. Il file di configurazione 50unattended-upgrades fornisce esempi di pacchetti in blacklist.

Il README parla dell’impostazione Package-Whitelist. La descrizione dice “Solo i pacchetti che corrispondono alle espressioni regolari in questo elenco saranno contrassegnati per l’aggiornamento.” Non offre esempi per chiarire in quali casi sarebbe desiderabile impostare la whitelist. Dalle mie esperienze, sembra che aggiungere pacchetti alla whitelist significhi che solo quei pacchetti vengono aggiornati automaticamente, nient’altro.

Conclusione

Ora sai cosa può fare unattended-upgrades e come farlo fare secondo le tue esigenze.

Ci sono casi in cui unattended-upgrades non esegue l’aggiornamento perché il comando apt upgrade tiene indietro un pacchetto. Questo accade quando l’aggiornamento comporterebbe la rimozione di un pacchetto o l’installazione di un pacchetto precedentemente non installato. Per far avvenire l’aggiornamento, fallo tu stesso con il comando apt full-upgrade che può rimuovere pacchetti o installare nuovi pacchetti precedentemente non installati. Se unattended upgrades è configurato per inviare e-mail, l’e-mail contiene la riga

Pacchetti con origine aggiornabile ma tenuti indietro:

Un esempio finale di 52unattended-upgrades-local da uno dei miei host:

Unattended-Upgrade::Origins-Pattern {
// Taleman aggiunto 2022-09-05
        "o=GoAccess Repository, n=buster, l=Official GoAccess Repository";
        "o=Debian Backports,a=${distro_codename}-backports,l=Debian Backports";
    "origin=deb.sury.org,archive=${distro_codename}";
};

Unattended-Upgrade::Mail "[email protected]";
Unattended-Upgrade::OnlyOnACPower "false";
Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.