[ロ] 仕事とはいかにマッシュアップするかである!

このエントリーをはてなブックマークに追加
はてなブックマーク - [ロ] 仕事とはいかにマッシュアップするかである!
Facebook にシェア
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]
[`tweetmeme` not found]

まぁ、なんというか大層な題名をつけてみたが、要は「やりたいことは、ネットで検索すればたいてい出てくるよね。それを組み合わせれば完成ジャン!」ということ。
centplus のファイル群をガッツリゲットしてきたものの、あれ〜、最新版だけじゃなくてごちゃごちゃ途中のバージョンもあるじゃん。ふるいのいらねーーー!というわけで、どうやって最新版だけを抜き出すかで悩んだ。
一つずつ手で持ってきた方がぶっちゃけは早いのだがファイル総数500個とか萎える。多分今後も最新RPMだけを抜き出すとかあるのでここはちょっくらスクリプトを組んでみようと。最近まったくプログラミングできてなくて、超ストレス!だったのさ♪
いろいろ試してみて、よさそうなのは「rpm -qp –qf “%{BUILDTIME}”」でビルド時間を取得して、一番新しい順番に並び替えるのがベストと判断。この方法はRPMの新旧比較して新しくなってたら取り込むっていうスクリプトを見て、ディストリビューションレベルでこれ使ってるんだったら、これで大丈夫か、と採用。
そして、今回はこのサイトを存分に活用!
ふが日記 UNIX分室: rpmパッケージに含まれるファイルをリストアップしておこう
akiyan.com: PHPのarray_multisort関数が激便利だったので紹介
でできた、スクリプトがこれ。満足。


<?php
/**
* バージョン違いの複数RPMパッケージから、もっとも新しいRPMを判別するスクリプト
* 2007/11/28 Create <yosiwo@lowtech.ne.jp>
*/
error_reporting(4);
if( $argc < 2 ) {
    echo "Usage: php getLatestRPM.php <DIR>\n";
    exit(0);
}
$dir= $argv[1];
$dirinfo = scandir($dir);
$list = NULL;
// 引数で渡されたディレクトリにあるRPMの情報(ファイル名、ビルド時間)を収集
foreach($dirinfo as $rpm) {
        if (ereg (".rpm$", $rpm, $regs)) {
                if (ereg("(^[a-zA-Z_\-]+)(.+)", $rpm, $regs2)) {
                        ereg("(.+)(-$)", $regs2[1], $regs3);
                        $packageName = $regs3[1];
                        $n = count($list["$regs3[1]"]);
                        $list["$regs3[1]"][$n]["filename"] = $regs3[1]."-".$regs2[2];
                        $buildtime = exec('rpm -qp --qf "%{BUILDTIME}" ' . $dir . $rpm);
                        $list["$regs3[1]"][$n]["createdate"] = $buildtime;
                }
        }
}
// 同一パッケージでビルド時間が新しい順に並び替えて、もっとも新しいパッケージのみを表示する
foreach($list AS $packages) {
        $date = array();
        foreach($packages as $p) {
                $date[] = $p['createdate'];
        }
        array_multisort($date, SORT_DESC, SORT_NUMERIC, $packages);
        echo $packages[0]['filename'] . "\n";
}
?>

もう、インターネット様々ですよ。こぴぺこぴぺ!

Popular Posts:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*