Ricerca nel sito web

Aggiornamenti automatici con aggiornamenti automatici su Debian e Ubuntu


Su questa pagina

  1. Un modo semplice per gli amministratori impegnati
  2. Dove trovare la documentazione
  3. Configurazione avanzata
    1. Invia e-mail
    2. Aggiungi repository
    3. Tempi di controllo
      1. Riavvio automatico

      Le versioni di Linux ricevono spesso aggiornamenti e gli aggiornamenti di sicurezza devono essere installati tempestivamente. 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 invece di controllare gli aggiornamenti. Questo articolo riguarda principalmente le installazioni del server.

      L'aggiornamento e l'installazione manuale dei pacchetti tramite apt upgrade è ancora possibile quando si utilizzano gli aggiornamenti non presidiati. Se un aggiornamento avviato da aggiornamenti automatici risulta essere 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 l'emissione dei comandi apt.

      Un modo semplice per gli amministratori impegnati

      Installa gli aggiornamenti automatici, verifica che sia abilitato e monitora il loro funzionamento dai file di registro.

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

      Il dpkg-reconfigure -command mostra la finestra di dialogo che chiede sì o no per scaricare e installare automaticamente gli aggiornamenti di sicurezza stabili. Verifica che la risposta sia sì.

      aggiornamenti automatici verifica la presenza di aggiornamenti due volte al giorno a orari casuali e installa aggiornamenti di sicurezza stabili.

      Monitorare ciò che sta accadendo leggendo i file di registro 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 la documentazione nei commenti. Questo documento fa riferimento a quel file d'ora in poi come 50unattended-upgrades.

      Il file readme /usr/share/doc/unattended-upgrades/README.md.gz contiene istruzioni utili. Può essere letto con il comando zless (disponibile nel pacchetto gzip). Questo documento fa riferimento a quel file d'ora in poi come README.

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

      La pagina dei documenti del server Ubuntu ha un capitolo \Aggiornamenti automatici\ sugli aggiornamenti non presidiati.

      Pagina man di aggiornamento automatico, aggiornamento automatico man.

      Configurazione avanzata

      Utilizzando il modo semplice noterai che non tutti gli aggiornamenti vengono installati automaticamente. Potresti anche desiderare un maggiore controllo su ciò che accade automaticamente oltre all'installazione degli aggiornamenti.

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

      È importante sapere che il file di configurazione viene creato dall'installazione o dall'aggiornamento del pacchetto di aggiornamenti automatici, quindi quando gli aggiornamenti automatici stessi vengono aggiornati 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 lo desideri, puoi verificare che il file /etc/apt/apt.conf.d/20auto-upgrades contenga queste righe:

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

      Se hai eseguito il dpkg-reconfigure -command e hai risposto sì, le righe dovrebbero essere lì. Le linee controllano l'abilitazione degli aggiornamenti non presidiati.

      Invia una email

      Affinché l'invio di e-mail funzioni, l'host deve disporre di un sistema di posta elettronica funzionante in grado di inviare e-mail. Verificalo prima.

      Abilitare l'invio di e-mail da aggiornamenti automatici modificando il file di configurazione 52unattended-upgrades-local (creare il file se non esiste nella directory /etc/apt/apt.conf/). Copia la riga

      //Unattended-Upgrade::Mail "";

      da 50unattended-upgrades, decommentarlo e aggiungere l'indirizzo e-mail di destinazione tra \-virgolette.

      C'è anche un'impostazione per configurare se l'e-mail viene sempre inviata quando gli aggiornamenti automatici eseguono un aggiornamento o solo in caso di errori.

      // Set this value to "true" to get emails only on errors. Default
      // is to always send a mail if Unattended-Upgrade::Mail is set
      //Unattended-Upgrade::MailOnlyOnError "false";

      Se vuoi cambiare l'impostazione, copia le righe in 52unattended-upgrades-local, decommenta la riga dell'impostazione e cambia \false\ in \true\.

      Controllo 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 degli aggiornamenti automatici crea un collegamento simbolico aggiornamenti automatici a aggiornamenti automatici 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

      Aggiungi deposito

      L'aggiunta di un repository da cui aggiornare automaticamente viene eseguita aggiungendo righe a Unattended-Upgrade::Origins-Pattern. C'è documentazione su questo nel file di configurazione.

      Il README istruisce le impostazioni nel successivo file di configurazione 52unattended-upgrades-local per sovrascrivere le impostazioni predefinite. Ho provato e ho scoperto che l'impostazione Unattended-Upgfade::Origins-Pattern non sovrascrive completamente ciò che è stato impostato nel file predefinito, ma viene aggiunto ai valori predefiniti. Quindi non è necessario copiare il modello predefinito completo Unattended-Upgrade::Origins-Pattern, a cui può essere aggiunto.

      Ad esempio, il pacchetto goaccess non si aggiorna automaticamente quando viene installato dall'Official GoAccess Repository. Si aggiornerebbe automaticamente se fosse installato dal solito repository Debian (è disponibile da entrambi). L'aggiunta del repository GoAccess a Origins-Pattern consente agli aggiornamenti automatici di eseguire l'aggiornamento.

      Esaminare la situazione con apt list --upgradable:

      :~# 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]
      :~#

      Quindi ci sono due pacchetti che non sono stati aggiornati automaticamente da aggiornamenti non presidiati. L'esame di goaccess mostra che proviene dal repository ufficiale di GoAccess (e una versione precedente dal solito repository Debian).

      :~# 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
          :~#

      L'esecuzione di unttended-upgrade --dry-run -d mostra quali origini hanno i pacchetti non installati. Questo può aiutare a capire cosa deve essere aggiunto a Origins-Pattern.

      L'esame del registro dell'ultima esecuzione degli aggiornamenti automatici mostra quali origini vengono considerate durante l'aggiornamento automatico:

      2022-09-05 08:28:08,955 INFO Checking if system is running on battery is skipped. Please install
          powermgmt-base package to check power status and skip installing updates when the system
          is running on battery.
      2022-09-05 08:28:08,960 INFO Initial blacklist : 
      2022-09-05 08:28:08,960 INFO Initial whitelist: 
      2022-09-05 08:28:08,960 INFO Starting unattended upgrades script
      2022-09-05 08:28:08,960 INFO Allowed origins are: 
      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.

      Per inciso, se hai installato aggiornamenti automatici su un laptop, considera l'installazione di powermgmt-base. L'utilizzo di tali aggiornamenti automatici non avvia gli aggiornamenti quando si utilizza l'alimentazione a batteria, come il messaggio informativo nel registro informa. Se in esecuzione su un server sempre alimentato dalla rete, il messaggio informativo non viene più visualizzato con Aggiornamento automatico::OnlyOnACPower \false\; aggiunto alla configurazione.

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

      La politica apt non mostrava il campo a per GoAccess, quindi ho usato o, n e l. Trovi informazioni su questi campi in 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}.

      C'erano due pacchetti non aggiornati automaticamente, l'altro che non è ancora aggiornato è php-tcpdf. Ovviamente può essere aggiornato con apt upgrade ma può essere aggiunto agli aggiornamenti non presidiati per essere aggiornato automaticamente. La procedura è la stessa di goaccess.

      Per prima cosa esaminare la situazione con apt policy php-tcpdf. Ciò mostra che è installato dalla sezione del repository Debian buster-backports.

      Da unattended-upgrades.log 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";

      a 52unattended-upgrades-local all'interno dell'impostazione Origins-Pattern e decommentare.

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

      Tempi di controllo

      Gli aggiornamenti automatici vengono eseguiti in momenti casuali per alleggerire il carico sui server di repository. Questo per evitare grandi picchi di carico che si verificherebbero se tutti gli host iniziassero a eseguire gli aggiornamenti contemporaneamente. Pensaci bene se decidi di cambiare questo comportamento. Se esegui il tuo repository o repository mirror, i picchi di carico colpiscono il tuo server di repository ed eviti di infastidire gli amministratori dei repository su Internet.

      È systemd che controlla a che ora iniziano gli aggiornamenti automatici. 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 suggerisco di non modificarlo o di avere ottime ragioni per modificare.

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

      L'impostazione Aggiornamento automatico::Giorni di aggiornamento controlla i giorni della settimana in cui vengono eseguiti gli aggiornamenti automatici. Il valore predefinito è vuoto, il che significa che viene eseguito ogni giorno. Può essere configurato per essere eseguito, ad esempio, solo il sabato e la domenica.

      Riavvio automatico

      Gli aggiornamenti automatici possono essere impostati per il riavvio quando gli aggiornamenti installati richiedono un riavvio. Questo può essere configurato in modo che avvenga immediatamente o all'ora desiderata. Queste configurazioni utilizzano le impostazioni

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

      L'impostazione predefinita non è il riavvio automatico. Se modifichi l'impostazione in \true\, il riavvio avviene immediatamente dopo l'installazione dell'aggiornamento. Il tempo di riavvio automatico può essere impostato per eseguire il riavvio all'ora desiderata se sono presenti aggiornamenti installati che richiedono un riavvio.

      Lista nera, lista bianca

      Una lista nera impedisce l'aggiornamento di un pacchetto, che altrimenti verrebbe aggiornato da aggiornamenti non presidiati. L'impostazione Package-Blacklist contiene espressioni regolari. Se il nome del pacchetto corrisponde, viene escluso dall'aggiornamento automatico.

      Non ho utilizzato questa funzionalità, penso che potrebbe essere più utile se si esegue una versione di sviluppo in cui ha senso impedire l'aggiornamento automatico dei pacchetti critici. Il file di configurazione 50unattended-upgrades fornisce esempi di pacchetti inseriti nella lista nera.

      Il README descrive l'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 auspicabile impostare la whitelist. Dai miei esperimenti, sembra che l'aggiunta di pacchetti alla whitelist significhi che solo quei pacchetti vengono aggiornati automaticamente, nient'altro.

      Conclusione

      Ora sai cosa possono fare gli aggiornamenti non presidiati e come farli fare quello che vuoi.

      Ci sono casi in cui gli aggiornamenti automatici non eseguono l'aggiornamento perché il comando apt upgrade trattiene un pacchetto. Ciò accade quando l'aggiornamento rimuove un pacchetto o installa un pacchetto precedentemente disinstallato. Per eseguire l'aggiornamento, fallo da solo con il comando apt full-upgrade che può rimuovere pacchetti o installare nuovi pacchetti precedentemente disinstallati. Se gli aggiornamenti automatici sono configurati per l'invio di e-mail, l'e-mail contiene la riga

      Packages with upgradable origin but kept back:

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

      Unattended-Upgrade::Origins-Pattern {
      // Taleman added 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 "";
      Unattended-Upgrade::OnlyOnACPower "false";