複数ホスト(Ubuntu)のパッケージ管理でアップデートがあるかをリモートから把握する

非常に適当なので間違ってても知らん。

Ubuntuのみ (Debianにはない) 少なくとも 12.04 LTS には、 /usr/lib/update-notifier/apt-check というツールがあり、"(update);(sec-update)" という組を返す。--human-readableとかちょびちょびオプションがある

(追記: update-notifier-common というパッケージに収録されており、Debian Squeeze, Debian Wheezy, Ubuntu 12.04 LTS での存在は確認した)

すげー適当に書いたPython3で以下のような感じでリストアップできる。呼び出すところ自体よりはPython3自体にハマった。

#!/usr/bin/python3

import subprocess

# Must be Ubuntu machines.
hosts = ['hansode.example.com']

for host in hosts:
    p = subprocess.Popen(['ssh', host, '/usr/lib/update-notifier/apt-check'],
                         stderr=subprocess.PIPE,
                         stdout=subprocess.PIPE)
    (updates, sec_updates) = p.stderr.read().decode('utf-8').split(';')
    print('%s: %s updates, %s security updates' % (host, updates, sec_updates))
    pass

なお、pub_key を入れておかないともちろんパスワード聞かれる。cronから叩くのならこんなことはしないほうが良いような気がする。

apt系のツールで一発で出るもんだと思ったんだけど。

このブログの人気の投稿

LibreOfficeで表紙、目次、本体でフッターのページ番号のスタイルを変える

WiiUのコントローラが通信不良に陥った話

技術書典2 あ-03 『もわねっとのPythonの本』