¿Cómo saber si hay actualizaciones disponibles?

8

Estoy ejecutando un servidor 12.04 LTS ubuntu. Y creo que sería bueno que me informaran cuando hay actualizaciones disponibles. Pero no puedo encontrar cómo saber ...

He intentado mirar la apt-getpágina del manual. Desde allí pude usar apt-get -s upgradepara obtener la salida de apt-get en un script sin bloquear preguntas.

Ahora, veo claramente la diferencia:

Hay actualizaciones disponibles:

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])

Las actualizaciones no están disponibles:

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.

Pero no sé cómo proceder desde allí. ¿Cómo puedo saber, desde un script bash (o script PHP) que hay actualizaciones disponibles o no?

Editar:

Aquí está mi código bash actual. No funciona.

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
Adeline
fuente
Bueno, solo va a decir 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.si no hay actualizaciones.
Nattgew

Respuestas:

18

Lea las páginas de manual para motd(5), pam_motd(8)y update-motd(5). En mi sistema, /etc/update-motd.d/90-updates-availableinvoca lo /usr/lib/update-notifier/update-motd-updates-availableque muestra esto cuando inicio sesión:

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

Profundizando un poco más, se invoca el script "...- actualizaciones disponibles" /usr/lib/update-notifier/apt-check --human-readable. Si lees eso (python), verás que si omites el indicador legible por humanos, generará "19; 12" en stderr. Podemos agarrar eso con esto:

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

Ahora puedes decir:

if (( updates == 0 )); then
    echo "No updates are available"
else
    echo "There are updates available"
fi
Glenn Jackman
fuente
Puedo ir con eso y probar if [ / etc / update-motd.d / 90-updates-available` = "0 paquetes se pueden actualizar. 0 actualizaciones son actualizaciones de seguridad". ]; entonces ... fi`
Adeline
Desafortunadamente, el cheque no funciona (agregué las citas olvidadas en mi respuesta anterior). Sospecho que algo tiene que ver con las nuevas líneas. He actualizado mi publicación con el código que obtuve de su respuesta.
Adeline
respuesta refinada
Glenn Jackman
Impresionante respuesta, @glennjackman. Iba a responder con google.com/search?q=apt-get+check+if+updates+are+available #ImNotHelpfulToday =)
0xSheepdog