CPAN::Mini と glastree をつかって CPAN のデイリースナップショットを作ろう!

| 0 Comments | 0 TrackBacks | このエントリーをはてなブックマークに追加 このエントリーのはてなブックマーク件数

CPAN::Mini って便利ですね。

CPAN::Mini って何をするモジュールかというと、CPAN に登録されているモジュールの最新版をまるごと取ってくる便利なモジュールです。(CPAN::Mini について詳しくは、富田さんの use CPAN::Mini; - 今日のCPANモジュール をごらんください)

CPAN のデイリースナップショットがほしい

日頃使っている CPAN モジュール群に大きな変更が入るとしたら、確実に動くことが分かっている現時点でのアーカイブがほしいです。欲しいと思ったときにミラーを取るのでもいいのですが、できれば、デイリースナップショットを自動的に生成したいですね。Debian Linux の場合は、snapshot.debian.net という神サイトがあります。今回は CPAN の配布物で同じようなものを作りたいと思います。

デイリースナップショットを作るソフトウェア

こういうデイリースナップショットを作る場合、まず思い浮かぶのが ruby で書かれた pdumpfs というバックアップソフトではないでしょうか。pdumpfs は、まず、初回動作時に丸ごとコピーを取ります。次回からは増加分のみをコピーし、変更のない部分はハードリンクをはるという素晴らしいソフトウェアです。snapshot.debian.net では pdumpfs を使っているようですね。

今回は、pdumpfs と同趣旨で、perl でかかれたバックアップソフト glastree (配布先) を少し hack してデイリーアーカイブを作ることにします。

glastree を hack

基本的に、minicpan で取ってきたファイルをさらにコピーしてバックアップする必要ないと思います。というのも、毎日のスナップショットに /archive/200806/09/CPAN/ などというディレクトリでアクセスできることが今回の目的だからです。この目的に合うように glastree の初回動作を少し変更したいと思います。

glastree は、初回動作時にコピー動作をしていますが、これをハードリンク動作に変更します。

glastree の変更点は以下のようになります。ハードリンクを作ってみて、だめならコピーという動作にします。

--- glastree.orig       2003-01-27 09:26:26.000000000 +0900
+++ glastree    2008-06-09 00:54:56.980871566 +0900
@@ -193,7 +193,10 @@
 {
     my ($frompath, $topath, $stat) = @_;

-    copy  ($frompath, $topath);
+    my $res = link ($frompath, $topath);
+    unless ($res) {
+        copy ($frompath, $topath);
+    }
     chown ($stat->uid, $stat->gid, $topath) if $EUID == 0;
     chmod ($stat->mode, $topath);
     utime ($stat->mtime, $stat->mtime, $topath);

cron に登録しての運用

glastree にパッチを当てたら、以下のようにスクリプトを書いておいて、一日一回実行されるように cron に登録しておきましょう。

cd ~/cpanmirror
minicpan -r http://your/favorite/mirror/of/CPAN/ -l CPAN
mkdir -p archive
glastree CPAN archive

これで、~/cpanmirror/archive/200806/09/CPAN/ などの日付ディレクトリで過去の CPAN にアクセスできるようになります。

会社の LAN 内サーバなどで apache から見える場所に置いておくといいかもしれませんね!

ディスク消費量

初回実行分で 850MB 消費していました。

次回実行時からは、日々追加されるモジュールの分程度の消費なので、ディスクが CPAN のミラーでいっぱいであたまを抱えるようなこともなくていいですね!


デイリースナップショットを作っておけば、備えあれば憂いなしですね!

No TrackBacks

TrackBack URL: http://perl-mongers.org/MT/mt-tb.cgi/54

Leave a comment

About this Entry

This page contains a single entry by woremacx published on June 9, 2008 1:01 AM.

レンタルサーバーでhello world! was the previous entry in this blog.

フォームを使ってデータをPOSTしてみよう! is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Categories

Pages

Creative Commons License
This blog is licensed under a Creative Commons License.
Powered by Movable Type 4.21-en