nDiki : 2005年03月08日

2005年3月8日 (火)

HDDが飛びました。しかも2基?

naney:6119319 朝会社につくと慌しい雰囲気。 スタッフのPCが起動しなくなったらしい。

久しぶりにきくHDDの軽やかなコロコロ音。死んだな。

2台ささっていたHDDを別のPCにさしてデータの復旧を試みていたようだが、両方とも駄目らしい。 CD-ROM ドライブ異音をたてるようになっている。

彼女が帰ってから次の日出社するまでに、いったい何があったのか。

スポンサード リンク

昨晩は今年最高の夜でした

って辛さが。

(天気予報で「今年一番の〜」とかしょっちゅう言うのがちょっと嫌。)

今日からがスギ花粉の飛散ピークらしいが、既に昨日からかなりきてる。 特に夜がつらい。鼻の通りが悪いわ、喉は痛くなるわ、寝付きが悪くて仕事の妄想が頭に浮かんで離れないわで。

悪寒

今日は4月並の暖かさになるはずなのに、オフィスがえらい寒い。 いやな感じ。

もしや。

帰って計ったらまた熱出てた。 ガクリ。

コレステロールGPTでC判定

2月21日健康診断の結果がきた。

去年はオールA(異常なし)だったのだが、今回はC判定(要観察)が2つついた。

前者は最近また太ったとか、油っこい弁当を食べたりとか心当りあり。 後者についてはGOTはいちおう基準値内でGPTの方が高くなっているから過栄養性脂肪肝傾向ということ?

どちらにせよ生活改善が必要。

「依存関係検査のしにくいモジュール」に依存するスクリプトをPARで実行形式化する

PAR を使うとPerlスクリプトを単独の実行可能形式ファイルに変換することができる。 この際、自動的に依存するモジュールも探し出して追加してくれるのだが、eval の中で use するものや lib 以下に配置された通常のファイル等は自分で追加する必要がある (pp の -a, -A, -M オプション等で)。

開発しているモジュールに含まれるスクリプトをexe化するルールは、Makefile.PL でいろいろ処理をしてこれらを指定するようにしておけば比較的簡単にビルドできる。

しかしそれが今開発対象となっているモジュール/スクリプトではなく、その依存モジュールがそのようになっていると面倒くさい。 ということで依存モジュール側で必要なモジュール・ファイル一式を PAR ファイル化し、それを作業中のモジュール/スクリプトで取り込むようにしてみた。

PAR の pp コマンドは(1つのPAR ファイルから実行形式ファイルを作る時以外)直接 par ファイルを取り込む事ができないようなので、展開してあらためて追加する必要があるのでちょっと面倒。

依存モジュールをまとめた par を作る

例えばそのモジュールに myscript.pl が含まれており、これをexe化するにはいくつか手動で追加するファイルを指定する必要があるとする。

またそれらのファイルは、現在作ろうとしているスクリプトをexe化する際にも必要だとする。

 pp -p -o all.par \
    -I blib/lib -I blib/arch \
    -A ... \
    -M ... \
    blib/script/myscript.pl

myscript.pl に必要なモジュールを含んだ PAR ファイル all.par ができる。

ちなみに parl -p でもモジュールからPAR ファイル化でき blib 以下をごっそりアーカイブできるのだが、そのモジュールが依存しているモジュールを含ませることができないので、今回の用途には×。

PAR ファイルを展開する

all.par を展開する。 ここでは c:\tmp\all 以下に展開するものとする。

作成したいスクリプトのPAR ファイルをいったん作る

スクリプトのあるモジュールのディレクトリに移動し、make。 その後

 pp -p -o newscript.par \
    -I blib/lib -I blib/arch -I c:\tmp\all\lib \
    -a c:\tmp\all\lib;lib \
    blib/script/newscript.pl

newscript.par が出来上がる。この中には -a オプションの指定と、newscript.pl の依存関係検査による抽出で c:\tmp\all\lib 以下のファイルが2回含まれているものがある(大抵)。 無駄なので除去する。

(面倒ならば重複するファイルを含んだままではあるが、ここで -p オプションを指定しないで直接 exe を作る事も可能である)

除去するスクリプト(例)

 #!/usr/bin/perl -w
 use strict;
 use Archive::Zip qw(:ERROR_CODES);
 my $zip_name = shift || die 'must provide a zip name';
 my $zip = Archive::Zip->new;
 $zip->read($zip_name) == AZ_OK || die "Can't read $zip_name:\n";

 my %names;
 for my $member ($zip->members) {
   my $file_name = $member->fileName;
   if (exists $names{$file_name}) {
     print "Remove $file_name ...";
     if (defined $zip->removeMember($member)) {
       print "OK.\n";
     }
     else {
       print "NG.\n";
     }
   }
   $names{$file_name}++;
 }

 exit($zip->overwrite);

PAR ファイルを実行可能形式ファイルに変換する

 pp -o newscript.exe newscript.par
[ 3月8日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.043565s / load averages: 0.68, 0.63, 0.60
nDiki by WATANABE Yoshimasa (Naney)
Powered by DiKicker