[[diary/Kojima]]
・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 経由で直接やりとりする、というアイデアは結構気にいっているので、
興味ある人はこのページの下にある添付ファイルからダウンロードして試してみてくださいませ。
- あー、そう言えば、パッケージによっては単純に updatepkg だけじゃうまく行かないのもあるのを忘れてたなぁ。。その手のパッケージは除外するようにした方が安全かな? -- [[kojima]] &new{2015-01-06 (火) 09:10:09};
- ちょっとブラックリスト的な機能を追加するんで、添付ファイルは一時削除。 -- [[kojima]] &new{2015-01-06 (火) 13:00:03};
- updtepkgじゃ更新すべきじゃないパッケージをデフォルトでは表示対象外にする機能と、パッケージ名が変更されても追跡するような機能を実装してみた > get_pkginfo.py -- [[kojima]] &new{2015-01-06 (火) 21:34:17};
- plamo.linet.gr.jp 以外を指しても動作することを確認できたので、とりあえずこれで一段落。FTPにはあるけどインストールしていないパッケージを探すような機能を追加したバージョンもあるのだけれど、コードがややこしくなった割にはあまりニーズはなさそうなので、お蔵入りしておくことにしよう。 -- [[kojima]] &new{2015-01-07 (水) 20:08:53};
#comment