Comment trouver le nombre de paquets nécessitant une mise à jour à partir de la ligne de commande?

34

Je travaille sur une automatisation d'administrateur système à l'aide de fabric et j'aimerais pouvoir contrôler le nombre de paquets nécessitant une mise à niveau sur une machine donnée. Ce sont les mêmes informations que je peux voir lorsque je me connecte pour la première fois à une machine, à savoir cette partie:

35 packages can be updated.
22 updates are security updates.

Existe-t-il une commande que je peux exécuter (de préférence sans sudo) qui donne uniquement cette information?

J'ai examiné les liaisons apt-python, mais elles semblent avoir une longue courbe d'apprentissage et semblent également beaucoup changer - je voudrais quelque chose qui fonctionne au moins aussi loin que lucide sans avoir besoin de le faire. faire des choses différentes sur différentes versions d'Ubuntu.

KayEss
la source

Réponses:

33

Pour obtenir cette sortie, vous pouvez utiliser la commande

sudo /usr/lib/update-notifier/update-motd-updates-available

ou, si vous ne voulez pas utiliser sudo,

cat /var/lib/update-notifier/updates-available

Explication

L' loginapplication affiche la sortie trouvée dans le fichier /etc/motd, c'est-à-dire un lien symbolique vers /var/run/motd.

Ce dernier fichier est mis à jour par le mounted-varrunservice (voir /etc/init/mounted-varrun.conf) en appelant tous les scripts de /etc/update-motd.d/, et en particulier

/etc/update-motd.d/90-updates-available

qui à son tour appelle le script

/usr/lib/update-notifier/update-motd-updates-available

ce script exécute diverses actions et écrit enfin le résultat dans le fichier texte

/var/lib/update-notifier/updates-available

MODIFIER

En ce qui concerne la partie de redémarrage de la question, exécutez cette commande

/usr/lib/update-notifier/update-motd-reboot-required

il ne donnera aucun résultat si le redémarrage n'est pas requis.

enzotib
la source
Je vérifie simplement sur une machine exécutant 11.04 et byobu indique que 44 mises à jour sont requises. catLe fichier que vous suggérez est vide et le script que vous avez indiqué en premier n’existe pas sur cette machine - est-il inclus dans un paquet qui doit être installé? J'ai /usr/lib/update-manager, mais pas de update-notifierrépertoire.
KayEss
Testé sur le bureau 11.04. Ces fichiers appartiennent à ceux update-notifier-commonqui ont été installés automatiquement lors d'une nouvelle installation (pas mise à niveau à partir de 10.10).
enzotib
J'ai examiné d'autres machines. Pour ceux qui ont /var/lib/update-notifier/apt-checkceci, on dirait qu'il renvoie les deux nombres, soit 43; 24 (43 mises à jour, 24 sont des numéros de sécurité), mais même cela n'apparaît pas sur toutes mes machines. Je suppose que ce fichier a peut-être été déplacé entre des packages de versions différentes.
KayEss
21

Pourquoi tu ne peux pas juste courir ça?

/usr/lib/update-notifier/apt-check --human-readable

C'est ce que fait / usr / lib / update-notifier / update-motd-updates-available pour collecter les informations, au moins dans la version d'Ubuntu que j'utilise (12.10).

Tom Barron
la source
Je
viens de regarder
2
Il écrit sa sortie sur stderr. Qui ferait ça?
KayEss
2
Préférez cette approche car elle met complètement à l’écart l’ensemble du update-motdpaquet et sa pensée. Merci de donner juste la commande directe.
Jefflunt
3

Je recherche également une méthode scripred pour une vérification de la mise à jour dans des conteneurs Docker minimaux, lorsque j'ai trouvé un commentaire dans /usr/lib/update-notifier/apt-check:

apt-get -s -o Debug::NoLocking=true upgrade | grep ^Inst

Cela permet une vérification de mise à jour par script, sans qu'il soit nécessaire d'installer le update-notifier-commonpackage.

Simon Sudler
la source
0

Vous pouvez utiliser le check_aptplugin de monitoring-plugins-basic( Nagios ), avec l’avantage d’obtenir différents codes de retour en fonction de la disponibilité des mises à jour:

$ /usr/lib/nagios/plugins/check_apt
APT WARNING: 18 packages available for upgrade (0 critical updates). |available_upgrades=18;;;0 critical_updates=0;;;0
$ echo $?
1

Les codes de retour ont les significations suivantes:

  • 0 -> aucun paquet disponible pour la mise à niveau
  • 1 -> packages non critiques disponibles pour la mise à niveau
  • 2 -> mises à jour critiques disponibles

Les références:

Clauz
la source