Comment savoir si des mises à jour sont disponibles?

8

J'utilise un serveur Ubuntu 12.04 LTS. Et je pense que ce serait bien si je pouvais être informé des mises à jour disponibles. Mais je ne trouve pas comment savoir ...

J'ai essayé de regarder la apt-getpage de manuel. De là, j'ai pu utiliser apt-get -s upgradepour obtenir la sortie apt-get dans un script sans bloquer les questions.

Maintenant, je vois clairement la différence:

Des mises à jour sont 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])

Les mises à jour ne sont pas 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.

Mais je ne sais pas comment procéder à partir de là. Comment puis-je savoir, à partir d'un script bash (ou script php), que des mises à jour sont disponibles ou non?

Éditer :

Voici mon code bash actuel. Ça ne marche pas.

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
la source
Eh bien, cela ne dira que 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.s'il n'y a pas de mises à jour.
Nattgew

Réponses:

18

Lisez les pages de manuel pour motd(5), pam_motd(8)et update-motd(5). Sur mon système, /etc/update-motd.d/90-updates-availableinvoque /usr/lib/update-notifier/update-motd-updates-availablece qui s'affiche lorsque je me connecte:

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

En creusant un peu plus, le script "...- updates-available" invoque /usr/lib/update-notifier/apt-check --human-readable. Si vous lisez cela (python), vous verrez que si vous omettez l'indicateur lisible par l'homme, il affichera "19; 12" vers stderr. Nous pouvons saisir cela avec ceci:

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

Vous pouvez maintenant dire:

if (( updates == 0 )); then
    echo "No updates are available"
else
    echo "There are updates available"
fi
glenn jackman
la source
Je peux continuer et tester if [ / etc / update-motd.d / 90-updates-available` = "0 paquets peuvent être mis à jour. 0 mises à jour sont des mises à jour de sécurité." ]; alors ... fi`
Adeline
Malheureusement, le chèque ne fonctionne pas (j'ai ajouté les guillemets oubliés dans ma réponse précédente.) Je soupçonne quelque chose à voir avec les nouvelles lignes. J'ai mis à jour mon message avec le code que j'ai dérivé de votre réponse.
Adeline
réponse raffinée.
glenn jackman
Réponse impressionnante, @glennjackman. J'allais répondre avec google.com/search?q=apt-get+check+if+updates+are+available #ImNotHelpfulToday =)
0xSheepdog