WWWOFFLE とEstraier で過去に見たWeb ページを全文検索

WWWOFFLE とは、プロキシソフトです。ダイアルアップで頻繁に切断することが主流だった頃、オフライン時でも前に見たことのあるページを表示したり、オンラインになった際に特定のページを自動的に見に行くようにしたり、という利用方法を想定していたようです。
いまどきの常時接続時代には無用のものと思いきや、見たページを全てローカルにキャッシュした上で全文検索エンジンにかけることにより、「あのページどこだったっけ?」 みたいな時に役立つ自分専用記憶補完装置になります。
今回のWWWOFFLE + Estraier 以外にも、WWWOFFLE + namazu(mknmz-wwwoffle) や、あるいはSquid + namazu というやりかたもあります。
ちなみに、色々試して、PC - (WWWOFFLE) - (Squid) - The Net という多段プロキシ構成にしています。Squid では可能な、「特定のURL からのリファラをカットする」 という設定がWWWOFFLE にはない(特定のURL には送らない、しか出来ないっぽい) のと、WWWOFFLE はHTTP 1.1 に対応してなくてあからさまにプロキシ判定されたりしたので。
逆に、特定のURL の画像は取得しないようにする、などの広告フィルタ機能とかが結構使える感じです。2段にすることで色々ムダもありそうですが自分専用のシステムならまあいいかなと。キャッシュをHDD に貯める関係上、明らかにもっさりになった気もしますが、ま、それはそれ。

WWWOFFLE のインストール

まず、オフィシャルサイトの「The WWWOFFLE Version 2.8 Download Page」 から"wwwoffle-2.8e.tgz" をダウンロードします。
当初ぷらいべーとRPM置場 から"wwwoffle-2.7h-1.nosrc.rpm" を流用し、中のSPEC ファイルをちょこちょこと変えたらいけるんじゃないかな、と甘い見通しを立ててたのですが、「error: Package already exists: %package debuginfo」 というエラーが出たり。これはrpm-4.2 以下で出るエラーらしく(ウチのはまさしくrpm-4.2-1)、ひとまず、"%install" という文字列を削除するなり変更するなりで回避できたものの、やっぱり最後までビルドが通らず。
どうしたものかと"wwwoffle-2.8e.tgz" の中身を見ていたところ、"contrib/redhat3/wwwoffle.spec" がRHL9 用であることが分かったのでこいつでビルドしてみたところ、無事出来ました。
結構高機能なので出来る事も多く把握しきれないのですが、とにもかくにも"/etc/wwwoffle/wwwoffle.conf" をひたすらカスタマイズすることになります。設定ファイルの中では、"DontCache" と"DontGet" の使い分けが重要です。"DontCache" は普通に読み込むけどキャッシュはしないので、Google などの検索結果や、ファイルサイズの大きくなりがちな画像などはここで指定。"DontGet" は広告カットや危険なサイトなどを指定し、全くアクセスできないようにします。"wwwoffle-dontget.conf" を丸ごとインクルードして必要なサイトだけ除外指定したり追加したりするのがラクチンかも。
変更した設定は"/etc/rc.d/init.d/wwwoffled restart" で再起動させれば反映されます。ただし起動直後はオフラインモードになるようなので、ブラウザでコントロールページに行き、"Online" ボタンを押すか、コマンドラインから"wwwoffle -online -c /etc/wwwoffle/wwwoffle.conf" でオンラインモードに移ります。あとは何も考えずにあちこち見て回れば自動的にざくざくキャッシュされていきます。

Estraier のインストール

オフィシャルページの説明が大変優れているので、この通りにやれば問題ないと思います。
libiconv はSamba 3.1.0 を入れた時 に"libiconv-1.8-1.src.rpm" を一緒にいれましたが、「1.9.1より前のバージョンにはメモリリークの問題がある」 とのことなので入れなおすことにしました。前にSRPM から作った時のSPEC ファイルを流用したのですがどうにもうまく行かないのでさっくり諦め、"libiconv-1.10.tar.gz" に"libiconv-1.10-ja-patch" をあてて普通にソースからインストール。

最初は何もconfigure オプションを付けずに作ってインデックスを作って検索もして感動したのですが、標準の機能ではたとえば「はてな」 などがインデックスされないので、別途解析用のプログラムを組み込むことにしました。ということで選んだのはMeCab。

インストールには「ipadic-2.4.4/2.5.0/2.5.1のいずれか1つ」 が必要とのことなので、"mecab-0.81.tar.gz" と一緒に"ipadic-2.5.1.tar.gz" を拾ってきて手順どおりにインストール。特にconfigure オプションは付けず。
最終的にEstraier のconfigure オプションは"./configure --enable-mecab --enable-regex --enable-dlfilter" のようにしてみた。
あとはWWWOFFLE のキャッシュのインデックスを作るだけ。まずはブラウザでアクセス可能な場所にフォルダを作り、そこで以下のコマンドを実行。"estsearch.cgi" は"index.cgi" 等にリネームしても大丈夫です。

cp /usr/local/libexec/estsearch.cgi /usr/local/share/estraier/locale/ja/estsearch.* .

以下のようなスクリプトを組み、1日1回、真夜中に回すようにしてみた。


cd 上記で作ったフォルダ
estwolels /var/cache/wwwoffle/ | estindex register -list - -tsuf "" -hsuf "" -msuf "*" -mn -iz casket
estindex relate casket

インデックスされたものは全て"casket" フォルダ以下に入るので、ここのアクセス制限は厳密にやっておいたほうがよいと思います。
これで検索できるようになったわけですがひとつ気になる点が。WWWOFFLE でキャッシュされるファイルのtimezone がGMT になっていて、Estraier での検索結果もGMT のまま。インデックス作成時のオプションとかにもそういった指定はなさそうだし、考え方としてはたぶんWWWOFFLE ではなくてEstraier のソースファイルのどこかをどうにかすればいいのだろうけど、どこをどうしたらいいのやら。どうにかできんもんかなぁ。