neděle 21. září 2014

Jak zjistit počet dostupných aktualizací systému v terminálu i Conky

Již jsem tu zmiňoval, jak zjišťuju počet aktualizací systému pro své Conky. Používám k tomu aptitude, který ale na Ubuntu není ve výchozí instalaci. Před pár dny jsem narazil na další možnosti, buď přímo s využitím aptu (připadám si hloupě, že mě to dřív nenapadlo samotného), nebo pomocí specializované aplikace apt-check. ...





Přes apt se dá zjistit počet aktualizací + nově instalovaných balíků pomocí simulace dist-upgrade:
$ apt-get -s dist-upgrade | grep -c ^Inst

V Ubuntu ale máme i specializovaný skript napsaný v Pythonu, jehož výstupem je celkový počet aktualizací a počet bezpečnostních aktualizací oddělených středníkem. Ovšem výstup vypisuje do stderr, čili chybového výstupu, tudíž pro další zpracování je třeba výstup přesměrovat na standardní výstup stdout:
/usr/lib/update-notifier/apt-check 2>&1
0;0

Pouze celkový počet aktualizací tedy dostanete drobným ořezem:
$ /usr/lib/update-notifier/apt-check 2>&1 | sed 's/;.*//'

Případně z něj můžete dostat tyto údaje i s omáčkou, ty už sype na stdout sám:
$ /usr/lib/update-notifier/apt-check --human-readable
0 packages can be updated.
0 updates are security updates.

Také umí vypsat všechny balíky s dostupnou aktualizací:
$ /usr/lib/update-notifier/apt-check -p

Když jsem příkazy testoval na svém systému, zjistil jsem, že apt-check někdy dává nižší číslo, než apt dist-upgrade. Udělal jsem tedy diff seznamů aktualizovaných balíků obou příkazů a zjistil, že všechny chybějící obsahují řetězec upgrade v názvu. Koukal jsem do skriptu, ale nenašel jsem, kde to mizí.


Pro úplnost má dosavadní metoda přes aptitude:
aptitude search "~U" | wc -l



No a v conkyrc samozřejmě použijete některý z předchozích příkazů nejlépe pomocí:
${texeci 3600 příkaz}

texeci oproti execi spustí příkaz v separátním vláknu, takže dlouho trvající příkaz nebrzdí zpracování dalšího skriptu a 3600 je jedna hodina v sekundách.


Jisté je, že pokud se před tím neaktualizuje databáze aptu, bude to zjišťování  k ničemu, ale v tomto spoléhám na automatiku Ubuntu, která to jednou denně projede. Jinak bych si dal apt-get update do crontabu roota.


4 komentáře:

  1. Ahoj,

    dovolím si k tomu jeden postřeh, Ubuntu server 12.04 a asi i novější používají na tyto účely skript "/usr/lib/update-notifier/update-motd-updates-available" (součást balíku "update-notifier-common"), který je většinou mnohem rychlejší než apt-check (2s oproti 0.1s), protože cachuje odpovědi.

    OdpovědětVymazat
    Odpovědi
    1. No vidiš, to jsem minul úplně, díky. Je to i na 14.04.

      Vymazat
    2. hezké, update-motd-updates-available se mi bude hodit, jen se dívám, že v conky by se to asi mělo spouštět s parametrem --force, jinak to vyžaduje práva roota

      GdH: texeci taky vypadá zajímavě, musím to doma vyzkoušet na volání skriptu počasí, mohlo by mi to urychlit zobrazení conky při spuštění (jestli se nepletu)

      Vymazat
    3. Ten update-motd-updates-available potřebuje práva jen kvůli tomu, že si výsledek volání apt-check zapisuje do /var/lib/update-notifier/updates-available, kam uživatel zapisovat nemůže. Testuje změny ve /var/lib/apt/lists/ a /etc/apt/sources.list a volá apt-check jen tehdy, když se objeví nějaká změna a jinak plive jeho předchozí výstup ze souboru. Volba --force způsobí pouze to, že bude bude volat apt-check vždy, čímž pozbývá význam.

      Vymazat

Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.

Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.