Wie finde ich die Anzahl der zu aktualisierenden Pakete über die Befehlszeile?

34

Ich arbeite an einer Systemadministrationsautomatisierung mit Fabric und möchte die Anzahl der Pakete überwachen können, die auf einem bestimmten Computer aktualisiert werden müssen. Dies sind die gleichen Informationen, die ich sehen kann, wenn ich mich zum ersten Mal bei einem Computer anmelde, dh dieser Teil:

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

Gibt es einen Befehl, den ich ausführen kann (am besten ohne sudo), der genau diese Informationen liefert?

Ich habe mir die Apt-Python-Bindungen angeschaut, aber sie scheinen eine hohe Lernkurve zu haben und sie scheinen sich auch sehr zu verändern - ich hätte gerne etwas, das zumindest so weit wie klar funktioniert, ohne es zu müssen verschiedene Dinge auf verschiedenen Ubuntu-Versionen tun.

KayEss
quelle

Antworten:

33

Um diese Ausgabe zu erhalten, können Sie den Befehl verwenden

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

oder, wenn Sie nicht verwenden möchten sudo,

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

Erläuterung

Die loginAnwendung zeigt die in der Datei gefundene Ausgabe an /etc/motd, die eine symbolische Verknüpfung zu ist /var/run/motd.

Diese letzte Datei wird vom mounted-varrunDienst (siehe /etc/init/mounted-varrun.conf) aktualisiert, der /etc/update-motd.d/insbesondere alle Skripte aufruft

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

das ruft wiederum das Skript auf

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

Dieses Skript führt verschiedene Aktionen aus und schreibt die Ausgabe zuletzt in die Textdatei

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

BEARBEITEN

Führen Sie in Bezug auf den Neustart-Teil der Frage diesen Befehl aus

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

Es wird keine Ausgabe ausgegeben, wenn kein Neustart erforderlich ist.

Enzotib
quelle
Ich überprüfe nur eine Maschine, auf der 11.04 läuft und byobu zeigt, dass 44 Updates erforderlich sind. catDie Datei, die Sie vorschlagen, ist leer, und das Skript, auf das Sie zuerst verweisen, ist auf diesem Computer nicht vorhanden. Muss es in einem Paket installiert werden? Ich habe /usr/lib/update-manageraber kein update-notifierVerzeichnis.
KayEss
Getestet auf 11.04 Desktop. Diese Dateien gehören dazu, update-notifier-commondass sie bei einer Neuinstallation automatisch installiert wurden (kein Upgrade von 10.10).
enzotib
Ich habe mir noch ein paar Maschinen angesehen. Für diejenigen, die /var/lib/update-notifier/apt-checkdies haben, sieht es so aus, als würden die beiden Zahlen zurückgegeben, dh 43; 24 (43 Aktualisierungen, 24 sind Sicherheitsnummern), aber selbst das wird nicht auf allen meinen Computern angezeigt. Ich nehme an, dass diese Datei möglicherweise zwischen Paketen in verschiedenen Versionen verschoben wurde.
KayEss
21

Warum kannst du das nicht einfach ausführen?

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

Das macht / usr / lib / update-notifier / update-motd-updates-available, um die Informationen zu sammeln, zumindest in der von mir verwendeten Ubuntu-Version (12.10).

Tom Barron
quelle
Nur auf Lucid überprüft und es funktioniert auch dort
KayEss
2
Es schreibt seine Ausgabe nach stderr. Wer würde das machen?
KayEss
2
Bevorzugen Sie diesen Ansatz, da er das gesamte update-motdPaket und sein Denken vollständig umgeht. Vielen Dank, dass Sie nur den Direktbefehl gegeben haben.
Jefflunt
3

Ich suche auch nach einer Scripred-Methode für eine Update-Überprüfung in minimalen Docker-Containern, als ich einen Kommentar in /usr/lib/update-notifier/apt-check:

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

Dies ermöglicht eine Überprüfung von Updates per Skript, ohne dass das update-notifier-commonPaket installiert werden muss

Simon Sudler
quelle
0

Sie können das check_aptPlugin von monitoring-plugins-basic( Nagios ) verwenden, mit dem Vorteil, dass Sie unterschiedliche Rückkehrcodes erhalten, je nachdem, ob Aktualisierungen verfügbar sind:

$ /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

Rückkehrcodes haben folgende Bedeutung:

  • 0 -> Keine Pakete für ein Upgrade verfügbar
  • 1 -> Nicht kritische Pakete für das Upgrade verfügbar
  • 2 -> kritische Updates verfügbar

Verweise:

Clauz
quelle