Aggiornamenti automatici su Ubuntu con unattended-upgrades
Mantenere aggiornato il sistema operativo e tutti i programmi dei PC è fondamentale per la sicurezza. E' importantissimo non sottovalutare questo aspetto e non fidarsi mai di sistemi operativi vecchi che non possono più essere aggiornati (vedi Windows XP). Per questo motivo in qualunque distribuzione Linux gli aggiornamenti di tutti i pacchetti sono centralizzati e facilmente gestibili.
Per chi utilizza Ubuntu gli aggiornamenti vengono proposti periodicamente in base alle proprie indicazioni. Però ci sono casi in cui può essere più utile fare in modo che gli aggiornamenti avvengano in modo automatico, ad esempio su un server o all'interno di una rete di PC in cui gli utenti abituali non hanno le autorizzazioni di amministratore, quindi qualunque rete all'interno di un'azienda o un laboratorio di informatica a scuola.
Configurare gli aggiornamenti automatici su Ubuntu Linux è abbastanza semplice, bisogna installare e configurare il pacchetto unattended-upgrades.
L'installazione avviene con il seguente comando:
sudo apt-get install unattended-upgrades
Terminata l'installazione bisogna configurare il servizio editando il file /etc/apt/apt.conf.d/50unattended-upgrades
sudo gedit /etc/apt/apt.conf.d/50unattended-upgrades
Innanzitutto bisogna specificare quali pacchetti o tipologie di pacchetti si vuole aggiornare in automatico indicando le relative origini nel parametro Unattended-Upgrade::Allowed-Origins, ad esempio:
Unattended-Upgrade::Allowed-Origins { "${distro_id}:${distro_codename}-security"; "${distro_id}:${distro_codename}-updates"; "${distro_id}:${distro_codename}-proposed"; "${distro_id}:${distro_codename}-backports"; "${distro_id}:${distro_codename}-partner"; "LP-PPA-app-review-board:trusty"; // Ubuntu extra "Google, Inc.:stable"; // Google Chrome "LP-PPA-thefanclub-grive-tools:trusty"; // Grive Tools "LP-PPA-sandromani-gimagereader:trusty"; // gimagereader (OCR) "Mega/MEGAsync/xUbuntu_14.04:xUbuntu_14.04"; // MEGA "LP-PPA-webupd8team-java:trusty"; // Oracle Java "LP-PPA-gencfsm:trusty"; // Gnome EncFS "LP-PPA-webupd8team-tor-browser:trusty"; // TOR browser "Oracle Corporation:"; // Oracle Virtual Box "Spotify LTD:stable"; // Spotify "videolan:stable"; // VLC e librerie per codec video };
come potete notare ogni origine va specificata nella forma origin:archive. Più avanti spiego come reperire queste informazioni.
Gli altri parametri presenti nel file non sono indispensabili per il funzionamento, però possono essere utili. Di seguito alcuni esempi.
Se si vuole ricevere una mail di avviso ad ogni aggiornamento specificare il seguente parametro:
Unattended-Upgrade::Mail "tua_mail@gmail.com";
ATTENZIONE: per inviare la mail bisogna anche installare e configurare il pacchetto mailx
Per fare in modo che gli aggiornamenti automatici rimuovano automaticamente i pacchetti obsoleti e non più utilizzati (sudo apt-get autoremove) bisogna attivare il seguente parametro:
Unattended-Upgrade::Remove-Unused-Dependencies "false";
Per evitare che il sistema si riavvii automaticamente quando gli aggiornamenti lo richiedono dovete specificare il seguente parametro:
Unattended-Upgrade::Automatic-Reboot "false";
A questo punto gli aggiornamenti automatici sono configurati, non resta che attivarli modificando il file /etc/apt/apt.conf.d/10periodic con i seguenti parametri:
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::AutocleanInterval "7"; APT::Periodic::Unattended-Upgrade "1";
Se si vuole testare il funzionamento è sufficiente dare il seguente comando:
sudo unattended-upgrade --dry-run --debug
il risultato sarà simile al seguente:
Pacchetti inizialmente in blacklist: Avvio script avanzamento senza controllo Origini consentite sono: ['o=Ubuntu,a=trusty-security', 'o=Ubuntu,a=trusty-updates', 'o=Ubuntu,a=trusty-proposed', 'o=Ubuntu,a=trusty-backports', 'o=Ubuntu,a=trusty-partner', 'o=LP-PPA-app-review-board,a=trusty', 'o=LP-PPA-noobslab-apps,a=trusty', 'o=Google\, Inc.,a=stable', 'o=LP-PPA-thefanclub-grive-tools,a=trusty', 'o=LP-PPA-sandromani-gimagereader,a=trusty', 'o=Mega/MEGAsync/xUbuntu_14.04,a=xUbuntu_14.04', 'o=LP-PPA-webupd8team-java,a=trusty', 'o=LP-PPA-gencfsm,a=trusty', 'o=LP-PPA-webupd8team-tor-browser,a=trusty', 'o=Oracle Corporation,a=', 'o=Spotify LTD,a=stable', 'o=videolan,a=stable'] pkgs that look like they should be upgraded: Fetched 0 B in 0s (0 B/s) fetch.run() result: 0 blacklist: [] Pacchetti rimossi automaticamente: "" InstCount=0 DelCount=0 BrokenCount=0 Non è stato trovato alcun pacchetto che può essere aggiornato senza controllo
l'opzione --dry-run indica che è solo una simulazione. Se viene eliminata il comando viene eseguito in effettivo.
Ogni attività viene registrata nel log: /var/log/unattended-upgrades/unattended-upgrades.log.
Per finire vediamo come individuare le coppie (origin:archive) di terze parti da inserire nel parametro Unattended-Upgrade::Allowed-Origins.
Per ogni repository di terze parti che avete aggiunto trovate una serie di file con le informazioni che vi servono nel percorso: /var/lib/apt/lists/.
Tra i vari files, quelli che ci interessano sono i file Release che contengono le informazioni che ci interessano:
- Origin: che rappresenta la prima parte della coppia
- Suite: che rappresenta la seconda parte della coppia, archive (a volte invece delle voce suite troverete la voce archive)
Ad esempio, se tra i repository che vi interessano c'è quello per gli aggiornamenti relativi a Java di Oracle, il file sarà simile al seguente:
/var/lib/apt/lists/ppa.launchpad.net_webupd8team_java_ubuntu_dists_trusty_Release
(il nome dipende anche dalla versione di Ubuntu che state utilizzando)
ed il suo contenuto sarà simile a:
**Origin**: LP-PPA-webupd8team-java Label: Oracle Java (JDK) 6 / 7 / 8 Installer PPA **Suite**: trusty Version: 14.04 Codename: trusty Date: Wed, 15 Oct 2014 14:47:39 UTC Architectures: amd64 arm64 armhf i386 powerpc ppc64el Components: main Description: Ubuntu Trusty 14.04 MD5Sum: bb38f0459eeffc4979b8ae55573ae740 148 main/binary-amd64/Release b49fb8cc5e41a96de38c80202e749d35 2557 main/binary-amd64/Packages.gz ...
quindi la coppia di informazioni sarà la seguente:
LP-PPA-webupd8team-java:trusty
A questo punto avete tutto per fare in modo che le vostre macchine restino sempre aggiornate senza richiedere l'intervento dell'operatore.
ATTENZIONE: impostare l'avviso per e-mail nel parametro precedentemente descritto (Unattended-Upgrade::Mail "tua_mail@gmail.com";) è conveniente ed importante soprattutto quando gli aggiornamenti automatici vengono configurati sul server. In questo modo veniamo informati quando un aggiornamento richiede un riavvio del server, infatti arriva una mail simile alla seguente:
Oggetto: [reboot required] unattended-upgrades result for 'my-server': True Unattended upgrade returned: True Warning: A reboot is required to complete this upgrade. Packages that were upgraded: libssl-dev libssl-doc libssl1.0.0 libssl1.0.0:i386 linux-generic linux-headers-generic linux-image-generic linux-libc-dev openssl Package installation log: Preconfiguring packages ...