※書いてあることの保障はしません。
自分のサイトにサイト内検索のフォームを入れたいと思ったことはありませんか?UNIX/LINUXサーバーでそれを手軽に実現できるのがnamazuです。当サイトの逆引きコマンド検索もnamazuを使っています。
yumが使える環境であれば
yum install namazu
yum install kakasi-dict
でインストールされます。kakasi-dictというのは、namazuで使用する辞書のことです。
また、他の方法については、
namazuの本家のページに
インストール手順が書かれています。
二つのコマンド
mknmz : インデックスを作る
namazu : インデックスから検索する
簡単にはこの二つのコマンドの組み合わせだと思って下さい。
まず、mknmzでインデックスを作成し、namazuでインデックスから探すのが基本です。すなわち、インデックスを作るのは一日一回とかページが更新されたらで良いわけですが、namazuは検索の度毎におこなわれます。
以上をHP上で動かすためにはさらに、
namazu.cgi
が必要になります。
インデックスとは、htmlなどの検索キーワード等が入っているところです。
検索したいHPのあるディレクトリ(/var/www/htmlとします)とインデックスをいれておくディレクトリ(/var/lib/namazu/index/とします)
mknmz -aO /var/lib/namazu/index/ /var/www/html/
でインデックスができます。
注意:引数-aはすべてのファイルを検索対象にするオプションです。デフォルトではhtmlのみになってしまいます。
namazu -a -s keyword /var/lib/namazu/index/
でインデックスの入ったディレクトリ(/var/lib/namazu/index/)からkeywordを検索できます。できましたか?
できなければ、インデックスの場所が違うか、インデックスが作られてない可能性があります。
まず、/etc/namazu/namazu.cgiにあるnamazu.cgiをwebが見えるところに移動するか、シンボリックリンクを貼りましょう。シンボリックリンクの場合、apacheの設定が必要なことがあるので注意しましょう。ここでは、/var/www/cgi-bin/namazu/namazu.cgiにおくとします。,
(※/etc/namazu/にない場合もあるでしょう。そのばあい、探しましょう。
find / -name namazu.cgi )
設定ファイルは/etc/namazu/namazurcです。このまま設定しても使えます。namazu.cgiと同じディレクトリにおいて使うには、いちおうセーブをとって
cp /etc/namazu/namazurc /etc/namazu/namazurc_save
動かします。このときドットをつけて.namazurcとします。
mv /etc/namazu/namazurc /var/www/cgi-bin/namazu/.namazurc
.namazurcのなかを
Index /var/lib/namazu/
Template /var/lib/namazu/index
Replace /var/www/html/ http://サーバー名/
Lang ja_JP.eucJP
にします。
Indexはインデックスのある位置を教えます。Templateは/var/lib/namazu/index/にあるNMZなんちゃらというのが、namazu.cgiの見えている部分をおしえます。Replaceはリンク先をローカルファイルではなく、アドレスで教えるためです。Langは言語です。
また、/var/lib/namazu/index/NMZ.head.ja内を
input type="hidden" name="idxname" value="index"
a href="{cgi}" →
a href="{cgi}?idxname=index"
とします。
http://サーバー名/cgi-bin/namazu/namazu.cgiが見えるでしょうか?見えない場合、通常のpermissionチェックを行ないましょう。ほかには、もしかするとSELinuxのせいかも知れません。
ls -Zをしてsystem_u:object_r:httpd_sys_script_exec_tというのがでますか? でなければ
chcon system_u:object_r:httpd_sys_script_exec_t namazu.cgi
をして変更します(
chcon)。 ls -Z /var/lib/namazu/index/はどうですか? こっちもsystem_u:object_r:httpd_sys_script_exec_tにしましょう。
ここのソースを見ましょう。formとかいうところがそうですね。
index.htmlや一覧(itiran.htmlとする)などは検索にかからないようにしたいものです。このようなときは
mknmz -a --deny='index.html|itiran.html' -O /var/lib/namazu/index/ /var/www/html/
のようにして、拒否します。
毎日決まった時間にインデックスを更新するためには、
crontabを用います。まず適当なファイル(make_index.sh)を作り、
vi /root/make_index.sh
例えば以下のようにシェルスクリプトを書きます。
#!/bin/sh
LANG=ja_JP.EUCJP
mknmz -a --deny='index.html|itiran.html' -O /var/lib/namazu/index/ /var/www/html/
そして、パーミッションを変更
chmod u+x make_index.sh
一度、試してみましょう。
/root/make_index.sh
うまくいっていれば
crontab -e
として
00 00 * * * /root/make_index.sh
を書き加えます。これは毎日00:00にインデックスを作る場合です。(くわしくは
crontabを参照)
MeCabはkakasiより分かち書きが強い。以下からダウンロード/インストールする
MeCab
mknmzrcに
$MECAB ="/usr/local/bin/mecab -O wakati";
を書き加える。また、
mknmzするときに-bを追加するとmecabでインデックスを作る。
mknmz -abO /var/lib/namazu/index/ /var/www/html/
mknmz --exclude="除外ディレクトリ"