Come sapere se sono disponibili aggiornamenti?


8

Sto eseguendo un server Ubuntu 12.04 LTS. E penso che sarebbe bello se potessi essere informato quando sono disponibili aggiornamenti. Ma non riesco a trovare come sapere ...

Ho provato a guardare la apt-getpagina man. Da esso sono stato in grado di utilizzare apt-get -s upgradeper ottenere l'output apt-get in uno script senza bloccare le domande.

Ora vedo chiaramente la differenza:

Sono disponibili aggiornamenti:

apt-get -s upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  dpkg dpkg-dev libdpkg-perl
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst dpkg [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [amd64])
Conf dpkg (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [amd64])
Inst dpkg-dev [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all]) []
Inst libdpkg-perl [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])
Conf libdpkg-perl (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])
Conf dpkg-dev (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])

Gli aggiornamenti non sono disponibili:

apt-get -s upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Ma non so come procedere da lì. Come posso dire, da uno script bash (o script php) che ci sono aggiornamenti disponibili o no?

Modificare :

Ecco il mio attuale codice bash. Non funziona.

updates_available=`/etc/update-motd.d/90-updates-available`

if [ "${updates_available}" = "0 packages can be updated. 0 updates are security updates." ];
then
   echo "No updates are available"
else
   echo "There are updates available"
fi

Beh, dirà solo 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.se non ci sono aggiornamenti.
Nattgew,

Risposte:


18

Leggere le pagine man per motd(5), pam_motd(8)e update-motd(5). Sul mio sistema, /etc/update-motd.d/90-updates-availableinvoca ciò /usr/lib/update-notifier/update-motd-updates-availableche viene visualizzato quando eseguo l'accesso:

19 packages can be updated.
12 updates are security updates.

Scavando un po 'più a fondo, lo script "...- updates-available" invoca /usr/lib/update-notifier/apt-check --human-readable. Se lo leggi (python), vedrai che se ometti la bandiera leggibile dall'uomo, verrà visualizzato "19; 12" su stderr. Possiamo afferrarlo con questo:

IFS=';' read updates security_updates < <(/usr/lib/update-notifier/apt-check 2>&1)
echo $updates
echo $security_updates 
19
12

Ora puoi dire:

if (( updates == 0 )); then
    echo "No updates are available"
else
    echo "There are updates available"
fi

Posso andare con quello e testare if [ / etc / update-motd.d / 90-updates-available` = "0 pacchetti possono essere aggiornati. 0 aggiornamenti sono aggiornamenti di sicurezza." ]; poi ... fi`
Adeline,

Sfortunatamente, il controllo non funziona (ho aggiunto le citazioni dimenticate nella mia precedente risposta.) Sospetto che qualcosa abbia a che fare con le nuove righe. Ho aggiornato il mio post con il codice che ho derivato dalla tua risposta.
Adeline,

risposta raffinata.
Glenn Jackman,

Risposta fantastica, @glennjackman. Stavo per rispondere con google.com/search?q=apt-get+check+if+updates+are+available #ImNotHelpfulToday =)
0xSheepdog
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.