・Plamo Linux用更新パッケージチェック&ダウンロードツール
Plamo Linuxの場合、更新されたパッケージをチェックしたりダウンロードするようなツールが無かったので、 ふと思いついて書いてみた。
当初は、サーバ側にパッケージの更新時刻を記録しておいて、クライアント側にチェックした時刻を記録して、 その時刻以降に更新されたパッケージを表示するような形を考えていたものの、 それだとインストールしていないパッケージの情報も表示されてうっとうしそう。
そのため、更新された(=現役の)パッケージの一覧リストをサーバ側に用意しておき、 クライアントからそれをダウンロードしてローカルのパッケージと比較しようか、とも思ったけれど、 パッケージの一覧リストをテキストファイルでやりとりしているとクライアント側の処理が面倒くさそう。
何かいい方法はないかなぁ、、としばらく放置していた時、ふとPythonの pickle という機能を思いだし、 これを使えば異なるマシン間でもリストや辞書といった構造化されたデータをやりとりできることに気がついた。
そこでパッケージの情報をリストにしたデータを pickle してやりとりしようかとしたものの、 単純なリスト構造だけだと、インストール済みのパッケージと比較するのに時間がかかりそう。
もうひとひねり、、ということで、パッケージの basename は唯一だから、これをキーにして、 バージョンやビルド番号を結びつけた辞書型のデータ構造にしておけば、 クライアント側で必要なデータに直接アクセスできるだろう、と思いついた。
とりあえず、このアイデアをざっくりと実装してみたのが、添付の get_pkginfo.py というスクリプト。
オプションを指定せずに起動すると、サーバにあるパッケージとインストール済みのパッケージを比較して、 新しいのやローカルビルドなパッケージを表示する。
$ ./get_pkginfo.py local package:poppler_data-0.4.5-noarch-P1 new package:poppler_data-0.4.7-noarch-P1 ftp://plamo.linet.gr.jp/pub//Plamo-5.x/x86_64/plamo/04_xapps/poppler_data-0.4.7-noarch-P1.txz package: comix doesn't exit in FTP tree. local package:libindi-0.9.6-x86_64-P2 new package:libindi-0.9.9-x86_64-P1 ftp://plamo.linet.gr.jp/pub//Plamo-5.x/x86_64/plamo/07_kde/libindi-0.9.9-x86_64-P1.txz package: chardet doesn't exit in FTP tree. package: tamago doesn't exit in FTP tree.
オプションに -d を指定すると、それらのパッケージを(カレントディレクトリに)ダウンロードする。
$ ../get_pkginfo.py -d local package:mozo-1.8.0-x86_64-P1 new package:mozo-1.8.0-x86_64-P2 ftp://plamo.linet.gr.jp/pub//Plamo-5.x/x86_64/plamo/11_mate/mozo-1.8.0-x86_64-P2.txz downloading: ftp://plamo.linet.gr.jp/pub//Plamo-5.x/x86_64/plamo/11_mate/mozo-1.8.0-x86_64-P2.txz local package:sysvinit-2.88dsf-x86_64-P12 new package:sysvinit-2.88dsf-x86_64-P13 ftp://plamo.linet.gr.jp/pub//Plamo-5.x/x86_64/plamo/00_base/sysvinit-2.88dsf-x86_64-P13.txz downloading: ftp://plamo.linet.gr.jp/pub//Plamo-5.x/x86_64/plamo/00_base/sysvinit-2.88dsf-x86_64-P13.txz ...
ダウンロードしたパッケージを updatepkg で更新するような処理をオプションで追加してもいいんだけど、 HDD の中身が自分の知らないうちに変ってしまう自動更新機能はあまり好きになれないので、 とりあえずダウンロードするところまで。
Pythonの辞書型のデータを pickle 経由で直接やりとりする、というアイデアは結構気にいっているので、 興味ある人はこのページの下にある添付ファイルからダウンロードして試してみてくださいませ。