Woher wissen, ob Updates verfügbar sind?

8

Ich verwende einen 12.04 LTS-Ubuntu-Server. Und ich denke, es wäre schön, wenn ich informiert werden könnte, wenn Updates verfügbar sind. Aber ich kann nicht wissen, wie ich es wissen soll ...

Ich habe versucht, auf die apt-getManpage zu schauen . Daraus konnte ich apt-get -s upgradedie apt-get-Ausgabe in einem Skript abrufen, ohne Fragen zu blockieren.

Jetzt sehe ich deutlich den Unterschied:

Updates sind verfügbar:

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

Updates sind nicht verfügbar:

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.

Aber ich weiß nicht, wie ich von dort aus vorgehen soll. Wie kann ich anhand eines Bash-Skripts (oder PHP-Skripts) feststellen, ob Updates verfügbar sind oder nicht?

Bearbeiten:

Hier ist mein aktueller Bash-Code. Es funktioniert nicht.

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
quelle
Nun, es wird nur sagen, 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.wenn es keine Updates gibt.
Nattgew

Antworten:

18

Lesen Sie die man - Seiten motd(5), pam_motd(8)und update-motd(5). Ruft auf meinem System /etc/update-motd.d/90-updates-availableFolgendes auf, /usr/lib/update-notifier/update-motd-updates-availabledas beim Anmelden angezeigt wird:

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

Wenn Sie etwas tiefer gehen, wird das Skript "...- Updates verfügbar" aufgerufen /usr/lib/update-notifier/apt-check --human-readable. Wenn Sie das lesen (Python), werden Sie sehen, dass wenn Sie das vom Menschen lesbare Flag weglassen, "19; 12" an stderr ausgegeben wird. Das können wir uns damit schnappen:

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

Jetzt können Sie sagen:

if (( updates == 0 )); then
    echo "No updates are available"
else
    echo "There are updates available"
fi
Glenn Jackman
quelle
Ich kann damit if [ anfangen und / etc / update-motd.d / 90-updates-available` = "0 Pakete können aktualisiert werden. 0 Updates sind Sicherheitsupdates." ]; dann ... fi`
Adeline
Leider funktioniert die Prüfung nicht (ich habe die vergessenen Anführungszeichen in meiner vorherigen Antwort hinzugefügt.) Ich vermute, dass etwas mit den neuen Zeilen zu tun hat. Ich habe meinen Beitrag mit dem Code aktualisiert, den ich aus Ihrer Antwort abgeleitet habe.
Adeline
verfeinerte Antwort.
Glenn Jackman
Tolle Antwort, @glennjackman. Ich wollte mit google.com/search?q=apt-get+check+if+updates+are+available #ImNotHelpfulToday =)
0xSheepdog