思うこと
 OCNエコノミーとは
 DNSサーバの構築(WindowsNT BIND 4.9.7)
 メールサーバのインストール(WindowsNT+IMS)
 Webサーバのインストール(WindowsNT+IIS)
 セカンダリDNSサーバ(WindowsNT Bind)の構築
 ルータ(MN128-SOHO)の設定
 ちょっと一休み
 NATの導入
 NATの導入 その2
 NT+IISにPerlの導入
 namazuの導入
 namazuの導入 その2
 Windows版Apacheの導入
 10-2 namazuの導入 その2

Namazu for Win32の動作テスト

Namazu for Win32が動作するかどうかまずテストします。MS-DOSプロンプトで、Namazuのインデックスを作るコマンドmknmz(実際には、mknmz.batという名前のバッチファイルから、mknmzというperlスクリプトが実行される)を実行します。実行するときは、次のようにします。

mknmz -O <インデックスを保存するディレクトリ> <インデックスの対象となるディレクトリ>

たとえば、「C:\InetPub\wwwroot」ディレクトリ以下のファイルを検索の対象として、インデックスを作るなら、「C:\usr\local\namazu\index」ディレクトリに移動してから、

C:\>cd usr\local\namazu\index
C:\usr\local\namazu\index>mknmz C:\InetPub\wwwroot

とするか、「-O」オプションを付けて、

C:\>mknmz -O C:\usr\local\namazu\index C:\InetPub\wwwroot

とします。

C:\>mknmz -O C:\usr\local\namazu\index c:\inetpub\wwwroot

C:\>perl.exe "C:\usr\local\namazu\bin\mknmz" -O C:\usr\local\namazu\
index c:\inetpub\wwwroot
Index output directory: C:\usr\local\namazu\index
0 /c|/inetpub/wwwroot/WWW/Advanced/Grail/demo.html
1 /c|/inetpub/wwwroot/WWW/Advanced/Grail/iconentity.html
2 /c|/inetpub/wwwroot/WWW/Advanced/Grail/index.html
3 /c|/inetpub/wwwroot/WWW/Advanced/index.html
4 /c|/inetpub/wwwroot/WWW/Advanced/javacompiler.html
5 /c|/inetpub/wwwroot/WWW/Advanced/plugin.html

(中略)

246 /c|/inetpub/wwwroot/_vti_cnf/top.html
247 /c|/inetpub/wwwroot/_vti_inf.html
248 /c|/inetpub/wwwroot/default.htm
249 /c|/inetpub/wwwroot/postinfo.html

[Base]
Date: Mon Apr 12 19:59:57 1999
Added   Files: 250 files
Deleted Files: 0 files
Updated Files: 0 files
Total   Files: 250 files
Size: 1,014,186 bytes
Keywords: 20,730 words
Wakati: kakasi -ieuc -oeuc -w
Perl Version: 5.00502
Namazu Version: 1.3.0.6
System: MSWin32
Time: 131 sec.

mknmzのオプションは、mknmzを実行すると表示されます。

C:\usr\local\namazu\index>perl.exe "C:\usr\local\namazu\bin\mknmz"
  mknmz.pl v1.3.0.6 -  全文検索システム Namazu のインデックス作成プログラム
  Copyright (C) 1997-1999 Satoru Takabayashi  All rights reserved.

  使い方: C:\usr\local\namazu\bin\mknmz [options] [URL_PREFIX] <対象dir>
      -a: すべてのファイルを対象とする
      -c: 日本語の単語のわかち書きに ChaSen を用いる
      -e: ロボットよけされているファイルを除外する
      -h: Mail/News のヘッダ部分をそれなりに処理する
      -k: 日本語の単語のわかち書きに KAKASI を用いる
      -m: ChaSen の形態素解析の品詞情報を利用する (名詞のみ登録)
      -q: インデックス処理の最中にメッセージを表示しない
      -r: man のファイルを処理する
      -u: uuencode と BinHex の部分を無視する
      -x: HTML のヘディングによる要約作成を行わない (文書の先頭から作成)
      -D: Date:, From: といったヘッダを要約につけない (ディフォルトではつける)
      -E: 単語の両端の記号は削除する (ディフォルトでは含める)
      -G: 送り仮名を削除する (ディフォルトでは含める)
      -H: 平仮名のみの単語は登録しない (ディフォルトでは登録を行う)
      -K: 記号はすべて削除する (ディフォルトでは登録を行う)
      -L: 行頭・行末の調整処理を行わない (ディフォルトでは調整を行う)
      -M: MHonArc で作成された HTML の処理を行わない (ディフォルトでは行う)
      -P: フレーズ検索用のインデックスを作成しない (ディフォルトでは作成する)
      -R: 正規表現検索用のインデックスを作成しない (ディフォルトでは作成する)
      -U: URLのencodeを行わない (ディフォルトでは行う)
      -W: 日付によるソート用のインデックス作らない (ディフォルトでは作成する)
      -X: フィールド検索用のインデックスを作らない (ディフォルトでは作成する)
      -Y: 削除された文書の検出を行わない (ディフォルトでは行う)
      -Z: 文書の更新/削除を反映しない (ディフォルトでは行う)
      -A: .htaccess で制限されたファイルを除外する
      -l (lang): 言語を設定する ('en' or 'ja')
      -F (file): インデックス対象のファイルのリストを読み込む
      -I (file): ユーザ定義のファイルをインクルードする
      -O (dir) : インデックスファイルの出力先を指定する
      -T (dir) : NMZ.{head,foot,body}.* のディレクトリを指定する
      -t (regex): 対象ファイルの正規表現を指定する

Namazu for Win32をWebから利用する

Namazu for Win32をWebサーバから利用するには、WebサーバでCGIの実行が可能なディレクトリに「namazu.exe」をコピーします。たとえば、IISの場合には、「C:\InetPub\wwwroot\cgi-bin」にnamazu.exeをコピーします。このとき、ショートカットでは正常に動作しません。

その後、そのサーバのそのディレクトリのURLに「/namazu.exe」を付けて実行します。IISの場合には、「http://サーバのURL/cgi-bin/namazu.exe」となります。次の画面が表示されれば成功です。

ただ、いまのままでは、「検索式」欄にキーワードを入力して「Search!」ボタンをクリックすると、先に作成したインデックスにもとづいて検索されますが、リンクをクリックしても正しいドキュメントにジャンプしません。リンク先が「http://サーバのURL/C|/InetPub/wwwroot/xxxxxxx」というようにURLが正しくないからです。「C|/InetPub/wwwroot」は、mknmzを実行したときに「249 /c|/inetpub/wwwroot/postinfo.html」というように表示されたように、インデックス内では「C:\」が「C|」になって管理されています。そのため、これ以下のディレクトリ名も含めて、Webサーバ上で利用できるURLに変換する必要があります。変換は、「namazu.conf」で行ないます。

「C:\usr\local\namazu\lib」にある「namazu.conf-dist」が「namazu.conf」のもとになるファイルです。「namazu.conf-dist」ファイルをコピーしてからリネームします。

namazu.confファイルで修正するのは、

INDEX		C:\usr\local\namazu\index
#REPLACE	/home/foo/public_html/	http://www.hoge.jp/%7Efoo/
#BASE		file://localhost/home/foo/documents/
#LOGGING	OFF
#LANG		ja
#SCORING	TFIDF

のうち、

#REPLACE	/home/foo/public_html/	http://www.hoge.jp/%7Efoo/

の行です。

REPLACE	/C|InetPub/wwwroot/	http://hyperdyne.co.jp/

というように、REPLACEの前の「#」を削除し、置き換えたい文字列を対比させて記述します。左側が置きかえる前の文字列、右側が置き換えるURLです。それぞれの間は、半角スペースでなくタブであることに注意してください。namazu.confを書き換えたら、もう一度Webブラウザからnamazuを実行してみましょう。検索結果のドキュメントが正しくリンクされていれば、成功です。

また、namazu.confの修正では、

#LOGGING	OFF

を有効にし、「ON」にしておくと、「C:\usr\local\namazu\index」ディレクトリにある「NMZ.slog」ファイルに検索のログが記録されるようになります。

LOGGING         ON

perlスクリプトmknmzの修正

さて、以上で基本的な設定は終了ですが、検索結果ページの一番最後に表示されている次のようなメッセージが気になります。とくにメールアドレスは修正しなければなりません。

この全文検索システムは Namazu v1.3.0.6 によって構築されています。 
webmaster@foobar.jp 

これは、インデックスを作るときに実行したmknmzという名前のperlスクリプトを修正します。「C:\usr\local\namazu\bin」ディレクトリにあるmknmzを修正します。

メールアドレスを修正するところは、

my $LANGUAGE = "ja";  # language of messages
#$SYSTEM = "WIN32";     # UNIX/MSWin32/os2
my $ADMIN  = 'webmaster@foobar.jp'; # admin's email address
my $CGI_ACTION = '/cgi-bin/namazu.exe'; # 
's ACTION の指定

の「my $ADMIN = 'webmaster@foobar.jp'; # admin's email address」の個所です。「my $ADMIN = 'webmaster@hyperdyne.co.jp'; # admin's email address」のように修正します。

そのほか、

## Files can be omission in URL. e.g. index.html
my $DEFAULT_FILE = "_default";

で検索を省略するファイルを、

## Target files' regex
my $TARGET_FILE = '.*\.html?|.*\.txt|.*_default';

で検索の対象となるファイルの拡張子を、

## Non-Target files' regex
my $DENY_FILE = '.*\.gif|.*\.(jpg|jpeg)|.*\.tar\.gz|core|.*\.bak|.*~|\..*|
\x23.*|NMZ\..*';

で検索の対象としないファイルの拡張子を、

## HTML extentions like .htm, .html, .shtml, .phtml, .html.en, .html.ja, .asp
my $HTML_SUFFIX = 'html?|[ps]html|html\.[a-z]{2}|asp|cgi';

で、HTMLファイルの拡張子を、

## Place where CGI prgrams is in. e.g. /cgi-bin/, /htbin/
my $CGI_DIR = '/(cgi-bin|htbin)/';

CGIディレクトリを、それぞれ指定します。ほとんどデフォルトのままでかまいません。

「robots.txt」を記述してロボット対策をしている場合には、次の個所を修正します。

##
## robots.txt に関する設定
##

my $HTDOCUMENT_ROOT = "/usr/local/apache/share/htdocs";
my $HTDOCUMENT_ROOT_URL_PREFIX = "/usr/local/apache/share/htdocs";
my $ROBOTS_TXT = "$HTDOCUMENT_ROOT/robots.txt";
my $ROBOTS_EXCLUDE_URLS = "";

mknmzを自動実行させる

さて、基本的には以上の設定でNamazu for Win32が利用できますが、Namazuが検索しているインデックスは自動的に更新されません。ときどき「mknmz」を実行すれば、更新されますが、それもめんどうです。

UNIXには、「cron」や「at」といった自動実行環境が用意されていて、決められた時刻や曜日にコマンドを自動的に実行させることができます。WindowsNTにもじつは「at」コマンドが用意されています。MS-DOSプロンプトから実行するコマンドでGUI環境に慣れたユーザには使いこなすのが大変ですが、WindowsNTの標準ではこのコマンドを使う以外、コマンドを自動実行させる方法はありません。

さて、atコマンドを実行してみましょう。スタートメニューのプログラムから「コマンドプロンプト」を選んで、MS-DOSプロンプトを起動します。起動してプロンプトが表示されたら、「at -? | more」と入力してみます。ヘルプが表示されます

また、WindowsNTのヘルプの「WindowsNTコマンド」の「WindowsNTコマンドリファレンス」から「at」コマンドを選ぶと、atコマンドのもっと詳しいヘルプが表示されます

さて、atコマンドを実行して自動実行を設定する前に、スケジュール機能を有効にしておく必要があります。コントロールパネルの「サービス」をダブルクリックして開き、「Schedule」を選びます。

通常は、「手動」になっているはずですが、このScheduleサービスを「スタートアップの種類」を「自動」にしてから、

続いて「開始」ボタンをクリックしてサービスを開始しておきます。

コントロールパネルを閉じて、MS-DOSプロンプトから「at」コマンドを実行して、

C:\>at
一覧にエントリが存在しません。

と表示されたら、サービスは開始されています。

atコマンドでは、

at <実行時刻> <every:曜日または日にち> <"コマンド">

と入力します。mknmzの場合には、次のようにします。

C:\>at 01:00 /every:Su mknmz -O c:\usr\local\namazu\index c:\inetpub\wwwr
oot
新しいジョブをジョブ ID = 0 で追加しました。

ここでは、毎日曜日の午前0時に「mknmz -O c:\usr\local\namazu\index c:\inetpub\wwwroot」を実行するよう設定しました。「mknmz」には「"」を付けません。設定を確認するには、MS-DOSプロンプトで「at」と入力します。

C:\>at
 ステータス ID   日付                    時刻          コマントライン
-------------------------------------------------------------------------------
        0   毎 日曜日               午前 01:00    mknmz -O c:\usr\local\namazu\i
ndex c:\inetpub\wwwroot

atコマンドは、WindowsNTを再起動しても、設定したスケジュールが実行されないかぎり消えません(毎日曜日といった指定は、「/delete」しないかぎり消えません)。そのため、AUTOEXEC.BATなどに設定する必要はありません。

URLの変換は、namazu.confの「REPLACE」でできますが、複数のURLは変換することができません(複数行記述しても、最後に指定したものが有効になります。新しいバージョンでは複数URLの変換がサポートされるようです)。そのため、複数のURL変換をするには、mknmzを実行するときにあらかじめURLを変換しておき、namazu.conf側では指定しない(指定しても条件に該当しなければ、実行されません)ようにする必要があります。そのときの入力は、

mknmz -O c:\index "http://www.hyperdyne.co.jp/" "c:/inetpub/wwwroot" c:\inetpub\wwwroot\

のようにします。

mknmz (オプション指定) "変換先のURL" "実際のディレクトリ(c:/という指定になる)" (インデックス対象ディレクトリ)

です。このコマンドをATコマンドから実行する場合には、「"」の問題(ATコマンドでは特殊な意味を持っています)から、バッチファイルにして実行することになります。

バッチファイルでは、mknmz自体が「mknmz.bat」というバッチファイルであるため、バッチファイルからバッチファイルを起動することになり、うまくいきません(確認はしていません)。そのため、mknmz.bat内の「perl.exe "C:\usr\local\namazu\bin\mknmz"」という記述を取りこんだバッチファイルにします。たとえば、

perl.exe "C:\usr\local\namazu\bin\mknmz" -O c:\index "http://www.hyperdyne.co.jp/" "c:/inetpub/wwwroot" c:\inetpub\wwwroot\

というような内容にして、「hyperdyne.bat」といったような名前で保存し、

at 00:00 /every:Su "c:\hyperdyne.bat"

として登録します。このとき、バッチファイルの前後には、「"」を付けます。

(これがわかるのに3日間かかりました(^^) ただし、Perlのバージョンやnamazu自体のバージョンによっていくぶん異なるようです)

(C) 1998 HyperDyne Inc.