Namazuでマニュアル検索

ZaurusSL-C3000)で色々なマニュアルを持ち歩いて、暇な時や必要な時に気軽に読むことができる環境は快適である。
しかし、オンラインとは異なり、検索サイトを利用することができないのは不便である。
そこで、Namazuにより検索できる環境を作ろうと考えた。
なお、以下に記載するコマンド入力例の行頭が「#」で始まるものは、root権限で実行しなければならない。

インストール

Namazuを利用するために必要なパッケージと、そのインストール順番は以下の通りである。

  1. apache_1.3.33-2_arm.ipk
  2. perl_5.6.1-8.3-5_arm.ipk
  3. libfile-mmagic-perl_1.12-1_arm.ipk
  4. nkf_2.0.4_arm.ipk
  5. kakasi_2.3.4-2_arm.ipk
  6. namazu_2.0.14-1_arm.ipk

Apacheをインストールする前に、以下のコマンドを実行すると領域不足が緩和される。

# mkdir /hdd2/www
# ln -s /hdd2/www /home/


KAKASIのパッケージには不備があるため、インストール後に以下のコマンドを実行する。

# ln -s /usr/share/kakasi /opt/QtPalmtop/share/

環境設定

以下の条件を前提として各種設定を行う。

  • 検索結果はWebブラウザで閲覧する。
  • 検索対象はApacheのDocumentRoot設定以下のパスでアクセスできる。
  • 単一のマニュアルを選択して検索する。
  • 複数のマニュアルを複合して検索する。
mknmzrcの設定

/opt/QtPalmtop/etc/namazu/mknmzrc-sampleを同じディレクトリのmknmzrcにコピーし、同ファイル内の以下の設定項目を修正する。

  • $ADDRESSに適切な管理者のメールアドレスを念のため設定する。
namazurcの設定

/opt/QtPalmtop/etc/namazu/namazurc-sampleを同じディレクトリのnamazurcにコピーし、同ファイル内の以下の設定項目を修正する。

  • Indexに検索インデックスを保存するための基本ディレクトリを設定する。
    ⇒ /home/www/htdocs/namazu/index
  • Templateに検索結果を表示するためのテンプレートファイルの保存先ディレクトリを設定する。
    ⇒ /home/www/htdocs/namazu/index
  • Replaceに検索したファイルのパスをURLに変換するためのディレクトリ(DocumentRoot)と対応するURLを設定する。
    ⇒ /home/www/htdocs/ http://zaurus/
  • Langにデフォルトの言語として日本語を設定する。
    ⇒ ja
保存先ディレクトリの準備

これから作成する検索インデックスは大きくなる一方なので、予め余裕のあるパーティションを使用する。
SL-C3000では/hdd3(FAT32)を使用するために、以下のコマンドを実行する。

$ mkdir -p /hdd3/Documents/namazu/index
# ln -s /hdd3/Documents/namazu /home/www/htdocs/
CGIファイルの準備

Apacheの設定でCGIが実行可能なディレクトリに、/opt/QtPalmtop/libexec/namazu.cgiをコピーする。
以下はDocmentRootに設定したディレクトリのOptions設定にExecCGIを指定した場合の一例である。

$ cp /opt/QtPalmtop/libexec/namazu.cgi /home/www/htdocs/namazu/
表示用テンプレートの準備

/opt/QtPalmtop/share/namazu/template/には各種言語の表示用テンプレートファイル(HTMLフォーマット)が保存されている。
前述の前提条件にある単一や複数のマニュアルを選択して検索できるようにするには、これらのファイルを元に手作業で表示用テンプレートを作成しなければならない。
また、これらはmknmzによってインデックスファイルが作成されると同時に、インデックスファイルと同じディレクトリにコピーされ、その内容が規定のキーワードに対応する値で置き換えられるが、前述の同じ前提条件により、mknmzを実行するごとに作成されても無意味である。
そこで、先ずは以下のコマンドを実行して、表示用テンプレートの保存先ディレクトリに元となるファイルを用意し、mknmzによってテンプレートファイルが作成されないようにする。

$ cd /opt/QtPalmtop/share/namazu/template
$ cp *.ja /home/www/htdocs/namazu/index/
# mkdir orig
# mv NMZ.* orig/


表示用テンプレートの保存先ディレクトリに用意されたファイルは以下の通りである。

ファイル名 説明
NMZ.head.ja ページ先頭の内容、検索フォームを含む
NMZ.body.ja 初期ページ表示時の検索式の説明など
NMZ.tips.ja 検索結果が0件の時に表示するアドバイスなど
NMZ.result.normal.ja 検索結果1件ごとの表示内容(標準)
NMZ.result.short.ja 検索結果1件ごとの表示内容(簡潔)
NMZ.foot.ja ページ末尾の内容


次に表示用テンプレートファイルを好みに合わせて編集するが、最低でもNMZ.head.jaでコメント化されいる「検索対象」を例に、検索対象のマニュアルをidxnameに設定する必要があるので、これについてはインデックスファイルを作成した後で触れることにする。
参考までに、私が編集したテンプレートファイルをアップロードして置く。

download:namazu_custom_template_ja.tar.gz

インデックスファイルの作成

Rubyの日本語マニュアルをダウンロードして、/home/www/htdocs/manual/ruby/に展開している場合を例にしたインデックスファイルの作成手順を以下に記す。

保存先サブディレクトリの作成

以下のコマンドを実行し、インデックスファイルの保存先サブディレクトリを作成する。

$ mkdir /home/www/htdocs/namazu/index/ruby
シェルスクリプトの作成

保存先サブディレクトリに下記のシェルスクリプト「mkidx」を作成し、mknmz実行内容の記録と再利用を可能とする。

#!/bin/sh
mydir=`dirname $0`
mknmz -O $mydir \
/home/www/htdocs/manual/ruby/ \
>> $mydir/mknmz_log.txt


なお、検索対象のディレクトリが複数存在する場合は、「mknmz ...」の行と「>> ...」の行の間に、複数の行を記述すれば良い。
また、mkidxは前述の「保存先ディレクトリの準備」に記載した通り、結果的にFAT32パーティションの/hdd3以下に保存されることになるため、実行属性を付ける必要はない。

シェルスクリプトの実行

以下のコマンドを実行し、作成したシェルスクリプト「mkidx」を実行する。

$ /home/www/htdocs/namazu/index/ruby/mkidx


なお、mknmzが通常画面に出力する内容は保存先サブディレクトリのmknmz_log.txtに保存される。

検索対象の追加

NMZ.head.jaに検索対象を追加する。
初期のNMZ.head.jaでは以下のようにコメント化されている。

<!--
<p>
<strong>検索対象:</strong>
<ul>
<li><input type="checkbox" name="idxname" value="foo" checked>foo
<li><input type="checkbox" name="idxname" value="bar">bar
<li><input type="checkbox" name="idxname" value="baz">baz
</ul>
</p>
-->


上記を以下のように編集して、保存先サブディレクトリを登録する。

<p>
<strong>検索対象:</strong>
<ul>
<li><input type="checkbox" name="idxname" value="ruby">ruby
</ul>
</p>


なお、私が編集したテンプレートファイルでは検索式を入力する手前で、登録した保存先サブディレクトリが横並びに表示されるように記述されている。

検索の実行

NetFrontOperaw3mなどのブラウザで以下のURLを開いて検索を実行する。

http://zaurus/namazu/namazu.cgi



それにしてもNamazuの検索は速い。
これでさらに快適になった。