Jak się dowiedzieć, czy są dostępne aktualizacje?

8

Korzystam z serwera Ubuntu 12.04 LTS. I myślę, że byłoby miło, gdybym mógł być informowany o dostępności aktualizacji. Ale nie mogę znaleźć, jak się dowiedzieć ...

Próbowałem spojrzeć na apt-getstronę podręcznika. Z tego byłem w stanie apt-get -s upgradeuzyskać wynik apt-get w skrypcie bez blokowania pytań.

Teraz wyraźnie widzę różnicę:

Dostępne są aktualizacje:

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

Aktualizacje nie są dostępne:

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.

Ale nie wiem, jak to zrobić. Jak mogę stwierdzić po skrypcie bash (lub skrypcie php), że dostępne są aktualizacje, czy nie?

Edytować :

Oto mój obecny kod bash. To nie działa.

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
źródło
Cóż, to powie tylko, 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.jeśli nie ma aktualizacji.
Nattgew

Odpowiedzi:

18

Przeczytaj strony podręcznika dla motd(5), pam_motd(8)i update-motd(5). W moim systemie /etc/update-motd.d/90-updates-availablewywołuje się, /usr/lib/update-notifier/update-motd-updates-availableco wyświetla to po zalogowaniu:

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

Zagłębiając się nieco głębiej, wywołuje skrypt „...- aktualizacje dostępne” /usr/lib/update-notifier/apt-check --human-readable. Jeśli to czytasz (python), zobaczysz, że jeśli pominiesz flagę czytelną dla człowieka, wyświetli „19; 12” do stderr. Możemy to złapać w ten sposób:

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

Teraz możesz powiedzieć:

if (( updates == 0 )); then
    echo "No updates are available"
else
    echo "There are updates available"
fi
Glenn Jackman
źródło
Mogę to zrobić i przetestować if [ / etc / update-motd.d / 90-updates-available` = "Można zaktualizować 0 pakietów. 0 aktualizacji to aktualizacje bezpieczeństwa." ]; potem ... fi`
Adeline
Niestety sprawdzenie nie działa (w poprzedniej odpowiedzi dodałem zapomniane cytaty). Podejrzewam, że ma to coś wspólnego z nowymi wierszami. Zaktualizowałem swój wpis kodem pochodzącym z twojej odpowiedzi.
Adeline
dopracowana odpowiedź.
glenn jackman
Niesamowita odpowiedź, @glennjackman. Zamierzałem odpowiedzieć z google.com/search?q=apt-get+check+if+updates+are+dostępny #ImNotHelpfulToday =)
0xSheepdog