2005年01月02日 (日)

CacheUpIt β配布

指定した URI に更新があったらダウンロードし、それを指定の URI にアップロードするプログラム CacheUpIt をβ配布します。

CacheUpIt とは

自分のサイトに外部サービスによる JavaScript や外部サイトの画像ファイルなど外部コンテンツを利用していると、その外部コンテンツを提供しているサーバがダウンしたりアクセス集中や保守などで応答が遅いと、自分のサイトの表示がとても遅くなったりします。

外部コンテンツの内容をファイルとして自分のサイトにアップロードしてそれを使えばそんなことはありませんが、随時更新されるものですとその更新について行けません。

そこで定期的に更新をチェックし、更新されていた場合だけダウンロードし、更にファイルとしてアップロードすれば、外部コンテンツのサーバに問題があっても自分のサイトの表示には影響せず、即時性はやや悪化するものの更新に付いて行けます。CacheUpIt はこれを行うプログラムです。

使用環境

Perl 5.6 以上が動作し、syslog が動作している OS で curl コマンドが存在する環境で CacheUpIt は動作します。UNIX 系の各種 OS および Mac OS X がターゲットです。

ダウンロード

CacheUpIt-1.1.tar.gz

インストール

特にインストールは必要ありません。ダウンロードして解凍してできるディレクトリの中の CacheUpIt を好きなところに移動またはコピーしてください。一応のお薦めの場所は /usr/local/bin/ です。

同梱されている CacheUpIt.html は CacheUpIt の pod マニュアルを HTML に変換したものです。このマニュアルは pod2html コマンドでいつでも作成することができます。TEXT バージョンは CacheUpIt --help とすることでいつでも参照できます。EUC-JP で書かれています。

設定

どこからダウンロードするのか、どこへアップロードするのかを CacheUpIt に教えるために設定ファイルを作成する必要があります。設定ファイルについては同梱のマニュアル CacheUpIt.html に記載してあります。ここでは例としてブログ「僕は見ていた」のための設定ファイルを掲載しておきます。

$Conf{cache} = [
    {
        # 名称 - ディレクトリとして有効な名前
        name => 'iSawIt/BlogPeople/LinkList',
        # 取得元の URI
        uri	 => 'http://www.blogpeople.net/display/usr/0f0d4b5254085016.js',
        # チェック間隔 - 全体のチェック間隔の何倍か
        interval => 6,	# 30 分
        # アップロード
        upload => {
            # アップロード場所の名称 - uploadPlace のキー
            place => 'iSawIt',
            # アップロード場所でのファイル名
            fname => 'BPLinkList.js',
        },
    },
    {
        name => 'iSawIt/HaloScan',
        uri	 => 'http://www.haloscan.com/load.php?user=yujiokamura',
        interval => 2,	# 10 分
        upload => {
            place => 'iSawIt',
            fname => 'HaloScan.js',
        },
    },
    {
        name => 'iSawIt/BlogPeople/TB00246',
        uri	 => 'http://www.blogpeople.net/display/TB_People/tbp00246_utf8.js',
        interval => 12,	# 60 分
        upload => {
            place => 'iSawIt',
            fname => 'TB00246.js',
        },
    },
    {
        name => 'iSawIt/BlogPeople/IB',
        uri	 => 'http://www.blogpeople.net/display/usr/ib/0f0d4b5254085016.js',
        interval => 24,	# 120 分
        upload => {
            place => 'iSawIt',
            fname => 'IB.js',
        },
    },
    {
        name => 'iSawIt/PiyoFeeds',
        uri	 => 'http://www.piyosystems.com/cgi-bin/WebObjects/PiyoFeeds.woa/wa/piyoFeeds?escIT=off&sp=2&isXml=off&ilIsAll=on&itIsAll=on&itBg=FFFFFF&pd=0&bd=1&idSize=10&url=http%3A%2F%2Fwww.haloscan.com%2Fmembers%2Frss.php%3Fuser%3Dyujiokamura&ctLen=-1&delIT=off&itColor=0000FF&ctBg=FFFFFF&showCT=off&wd=-1&escID=off&ctIsAll=off&itSize=10&itLen=-1&ctColor=000000&idLen=-1&idIsAll=off&ctSize=10&idColor=000000&delID=off&maxNum=-1&escCT=off&showLogo=off&delCT=off&isIt=on',
        interval => 12,	# 60 分
        upload => {
            place => 'iSawIt',
            fname => 'PiyoHalo.js',
        },
    },
];

# アップロード先定義の配列
$Conf{uploadPlace} = {
    iSawIt => {
        # アップロード先の URI
        uri => 'http://idisk.mac.com/yuji_okamura/Sites/iblog/iSawIt',
        # ユーザ名
        user => 'yuji_okamura',	# 不要のときは削除
        # パスワード
        passwd => 'XXXXXXXX',	# 不要のときは削除、undef だと起動時に入力
    },
};

このような内容でホームディレクトリに .CacheUpIt.conf としてファイルを作成してください。ファイル名の先頭が . の隠しファイルです。

curl コマンドはデフォルトでは /usr/bin/curl を使用するようになっています。もしあなたのシステムで別な場所に curl コマンドがあるのでしたら /etc/CacheUpIt.conf ファイルで curl のパスを設定してください。例えば /usr/local/bin/curl でしたら次のようにします。

$Conf{command} = {
    download => [
        '/usr/local/bin/curl',
        '-s',
        '-D', '%header%',
        '-o', '%body%',
        '-z', '%header%',
        '%uri%',
    ],
    upload => {
        noauth => [
            '/usr/local/bin/curl',
            '-s',
            '-o', '%response%',
            '-T', '%body%',
            '%uri%',
        ],
        user => [
            '/usr/local/bin/curl',
            '-s',
            '-o', '%response%',
            '-T', '%body%',
            '-u', '%user%:',
            '%uri%',
        ],
        passwd => [
            '/usr/local/bin/curl',
            '-s',
            '-o', '%response%',
            '-T', '%body%',
            '-u', ':%passwd%',
            '%uri%',
        ],
        userpasswd => [
            '/usr/local/bin/curl',
            '-s',
            '-o', '%response%',
            '-T', '%body%',
            '-u', '%user%:%passwd%',
            '%uri%',
        ],
    },
},

起動

設定ファイルの確認のためにまずは CacheUpIt をコマンドラインから実行して様子を見てください。実行の様子は syslog に出力されます。プライオリティを LOG_INFO でログファイルに書き込まれるようにしておいてください。(Mac OS X 10.3.7 はそうなっている)

特に問題がなければ Linux でしたら /etc/init.d に起動用スクリプトを作成したり、Mac OS X でしたら crontab に @reboot 指定で登録したりして、自動起動されるようにしましょう。

パスワードを undef に指定して起動時にインタラクティブにパスワードを指示する場合はコマンドラインから起動してください。この場合、そのままではフォアグランドで実行されるので、一旦 ctrl-z で一時停止させてから bg でバックグラウンドにするのがよいでしょう。

注意点

CacheUpIt の設定ファイルを作成するときに、アップロード先のパスワードを記載するケースがほとんどだと思います。このファイルが覗かれるとアップロード先のパスワードが漏洩してしまいます。必ず、自分以外は参照できないようにパーミッションを設定してください。例えばホームの .CacheUpIt.conf をそうするのでしたら次のようにします。

chmod go-rwx ~/.CacheUpIt.conf

また、CacheUpIt はメモリ上にパスワードを平文で保持します。メモリイメージをダンプするとパスワードが平文で盗まれる可能性があります。信頼のできるシステム上で実行してください。

その他

実はこれはリリース版のつもりです。私はこれを Linux 上で運用するつもりなのですが、今手元に Linux がありません。Mac OS X 上で仮運用しています。したがって本来のターゲット上で動作確認がされていないのでβ版として扱っています。現在のところ Mac OS X 10.3.7 でのみ動作が確認されています。本当のターゲットは Linux なので このサイトの訪問者の大多数を占める Mac OS X ユーザの方々には馴染みのない説明で申し訳ありません。

当然ですが、設定して期待通りにファイルがアップロードされることを確認したら、あなたのサイトで当該の外部コンテンツへの URI をアップロードされたファイルのものに差し替えてください。そうしないと意味がありません。

私がターゲットにしているマシン上で動作確認をしたらリリース版に昇格させるつもりです。Mac OS X で動いているので恐らく問題ないでしょう。


Posted: 01:56    | Comment | Trackback


以下、類似エントリです。