全文検索システムNamazu on Debian GNU/Linux wheezy

テキストファイルなどの全文検索システムNamazuDebian GNU/Linux Wheezyで使う。

環境

前提

  • /home/hogehoge/以下の *.html, *.txt, *.tex を検索対象にするとする。
  • インデックス格納ディレクトリは /var/namazu/index とする
  • CGIディレクトリ /var/namazu/www とする
  • サブディレクトリ 192.168.11.1〜254 でのみアクセスできるとする

インストール

パッケージでインストールする。なお、以下では不十分な可能性があるので注意。

% sudo aptitude install namazu2 namazu2-index-tools kakasi libtext-kakasi-perl libnkf-perl

Debian ではnamazuのインストール場所が独特なので注意すること。

  • /usr/bin : namazu, mknmz コマンド
  • /etc/namazu/: mknmzrc (インデックス作成時設定ファイル)、namazurc(namazu.cgi 設定ファイル)
  • /usr/lib/cgi-bin : namazu.cgiCGIファイル)
  • /usr/share/namazu/template : テンプレートファイル

インデックス格納ディレクトリおよびCGIディレクトリの作成

% mkdir -p /var/namazu/index
% mkdir -p /var/namazu/www

インデックス作成時設定ファイルの編集

% cd /etc/namazu
% sudo cp -p mknmzrc mknmzrc.org
% sudo vi mknmzrc

差分は以下のとおり。なお、メールファイル(.eml)も検索対象にはいっているが最後のセミコロンが欲しかったのでコメントアウトしただけ。

% diff mknmzrc.org mknmzrc
10a11,12
>  $ADDRESS = '自分のメールアドレス';
> 
21a24
>  $HTML_SUFFIX = "html?|[ps]html|html\\.[a-z]{2}";
29,32c32,35
< # $ALLOW_FILE =	".*\\.(?:$HTML_SUFFIX)|.*\\.txt" . # HTML, plain text
< # 		"|.*\\.gz|.*\\.Z|.*\\.bz2" .       # Compressed files
< # 		"|.*\\.pdf|.*\\.ps" . 		   # PDF, PostScript
< # 		"|.*\\.tex|.*\\.dvi" .   	   # TeX, DVI
---
>  $ALLOW_FILE =	".*\\.(?:$HTML_SUFFIX)|.*\\.txt" . # HTML, plain text
>  		"|.*\\.gz|.*\\.Z|.*\\.bz2" .       # Compressed files
>  		"|.*\\.pdf|.*\\.ps" . 		   # PDF, PostScript
>  		"|.*\\.tex|.*\\.dvi" .   	   # TeX, DVI
46c49
< # 		"|.*\\.eml|\\d+|[-\\w]+\\.[1-9n]"; # Mail/News, man
---
>  		"|.*\\.eml|\\d+|[-\\w]+\\.[1-9n]"; # Mail/News, man
54a58
>  $DENY_FILE = ".*\\.(gif|png|jpg|jpeg)|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\..*|\x23.*";

namazu および namazu.cgi の設定ファイルの編集

% sudo cp -p namazurc namazurc.org
% sudo vi namazurc

差分は以下のとおり

% diff namazurc.org namazurc
15a16
> Index         /var/namazu/index
22a24
> Template      /usr/share/namazu/template
49a52
> Replace       /var/namazu/www/  http://hogehoge.jp/namazu/
56a60
> Logging       on
70a75
> Lang          ja
112c117
< #ContentType	"text/html; charset=EUC-JP"
---
> ContentType	"text/html; charset=EUC-JP"
130c135
< #Charset "ja" "EUC-JP"
---
> Charset "ja" "EUC-JP"

Debianの場合、設定ファイルを /etc/namazu に置いたままで、namazuコマンドが参照してくれる。

インデックスの作成

事前に mknmz コマンドでインデックスを作成し、そのインデックスをnamazuコマンドが検索する。nkmnzの標準出力や標準エラー出力は、EUC-JPなので、nkf を使って UTF-8 に変換する。

% cd /var/namazu/index
% sudo mknmz /home/hogehoge/ -O /var/namazu/index |& nkf -w

そのインデックスを使って検索できるか確かめる。以下の例では「test」という文字列を検索している。

% namazu test /var/namazu/index |& nkf -w

CGIの設置

事前に Apache のインストールは終わっているものとする。まず、CGIプログラムを設置する。

% cd /var/namazu/www
% sudo ln -s /usr/lib/cgi-bin/namazu.cgi .
% sudo touch .htaccess

.htaccessの中身は以下のとおり。

% more .htaccess 
AddHandler cgi-script .cgi

ヘッダーファイルを修正する

% cd /var/namazu/index
% sudo cp -p NMZ.head.ja NMZ.head.ja.org
% sudo vi NMZ.head.ja

差分は以下のとおり。ヘッダ部分に文字コードの指定を追加するのと、検索CGIへのリンクにパラメーター「idxname=index」を追加する。

% diff NMZ.head.ja.org NMZ.head.ja
6a7
> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=euc-jp">
42c43,45
< <a href="{cgi}">[<日本語部分なので文字化けする>]</a>
---
> <input type="hidden" name="idxname" value="index">
> <!-- <a href="{cgi}">[<日本語部分なので文字化けする>]</a> //-->
> <a href="{cgi}?idxname=index">[<日本語部分なので文字化けする>]</a>

/etc/apache2/sites-available/default などに以下を追記する。

        Alias /namazu /var/namazu/www
	<Directory /var/namazu/www>
		Options ExecCGI FollowSymLinks MultiViews Includes
		AllowOverride All
		Order allow,deny
		allow from 192.168.11.
	</Directory>

そして、Apacheを再起動する。

% sudo /etc/init.d/apache2 restart

http://hogehoge.jp/namazu/namazu.cgi?idxname=index にアクセスしてみる。

インデックスの定期更新

CentOSで自宅サーバー構築: サイト内検索システム構築(Namazu)にあるスクリプトをcrontabで動かす。なお、私の環境では、ロケールの設定部分をコメントアウトする必要があった。

上記のスクリプトを mknmz.sh としたとき以下のように設置する。

% sudo mv mknmz.sh /etc/namazu
% sudo chmod 700 /etc/namazu/mknmz.sh
% sudo crontab -u root -e

以下を加える。毎日午前3時にインデックスを作り直すという設定。

0 3 * * * /etc/namazu/mknmz.sh /home/hogehoge/ /var/namazu/index/ > /dev/null 2>&1