PGNamazuインストール顛末 −修行が足りないバージョン−

以前書いた、PostgreSQLのデータとHTMLデータを対象に全文検索したいという要求という記事では、
PostgreSQLというデータベース製品(オープンソース)のデータと
HTMLデータの両方に検索をかけられるような仕掛けがないかなーってことで、
調べたツール類をあげていました。
その調べた中で、PGNamazuという、オープンソース検索エンジンで有名なnamazuのインデックスを
PostgreSQLから走査しちゃおうなんてツールをインストールしてみることにしたのです。

まず、PGNamazuのreadme.txtを読み、素直に make コマンドを叩きました。

 コンパイルエラー(笑)

そんなすぐには出来てたまるかって感じでしょーか。(違)
とりあえず、コンパイルエラーの元であった、足りないヘッダファイルを探し出し、
Makefileのインクルードオプションに加え、再度 make。

 コンパイルエラー(笑)

おいっ!w
今度は、オブジェクトファイルが足らん系のエラーです。

…ここで私は考えました。
オブジェクトファイルが足らん系のエラーは、
一つオブジェクトファイルが見つけられて追加しても、
もう一回コンパイルしなおしたらまた別のが…というパターンがたまにあります。
そして、ひょっとしたら他にもいろんなものが足りないかも…と、
ここでようやく検索エンジンで情報を集め始めます。(遅っ!)

 [pgsql-jp: 30833] [summary] namazu〜PostgreSQL 連携を試してみました
少し(だいぶ?)昔の投稿ですが、前田@nanet様の

[pgsql-jp 20023] namazuPostgreSQLの連携

に興味がありましたので、現行の環境で実行してみました。
その際の変更した点などについて、サマリとしてまとめて投稿します。

ということで、このMLにあった情報のとおり、
 ・Makefileにオブジェクトファイルを追加
 ・Makefileにインクルードファイルを追加
 ・ソースファイルの一部を変更

し、再度 make にてコンパイル

 コンパイル成功

やっと出来ました!

しかし、苦難(?)はまだ続いていました。(^^;)
つーか、こっからが本番?

PostgreSQLに、namazuのインデックスを使って検索するための関数を
登録しなければいけません。
上記のMLにも、この関数を登録するクエリがのっていましたので、
それを利用させてもらいました。

ところがその関数登録時に

ERROR: XX000: could not load library "/usr/local/pgsql/lib/pgnmz.so": /usr/local/pgsql/lib/pgnmz.so: undefined symbol: libiconv_open
LOCATION: load_external_function, dfmgr.c:136


というエラーが。
このエラー、私は
 /usr/local/pgsql/lib/pgnmz.so 自体が見当たらない
もしくは
 /usr/local/pgsql/lib/pgnmz.so 自体のコンパイルが失敗している
と判断し、それをベースに検索エンジンだよりで情報を集めたのですが…よくわからないでいました。

自分の力不足とはいえ、検索に時間ばかりかけているのももったいないので、
ここは詳しい人たちに訊ねることにしました。
日本PostgreSQLユーザ会メーリングリストに訊ねることにしました。→[詳細はここから]

ここから得られた回答は
 ・libiconv.soがそもそもないのではないか
 コンパイル時にlibiconvをリンクしなければいけないのではないか

の2点でした。
私の予想は、はずれ気味でした。orz

というわけで、助言に従い、まず、libiconvがインストールされているかを確認。
#ldconfig -p | grep libiconv
でライブラリにlibiconvがない事を確認し、
#find / -name libiconv.*
で全ファイル検索でライブラリ自体はみつかりませんでしたが、
ソースファイルは存在するので、ソースからコンパイルすることに。
コンパイル後、
#ldconfig -p | grep libiconv
で再度、ロードできる状態になっているか確認し、
CREATE FUNCTION実行!

ERROR: XX000: could not load library "/usr/local/pgsql/lib/pgnmz.so": /usr/local/pgsql/lib/pgnmz.so: undefined symbol: libiconv_open
LOCATION: load_external_function, dfmgr.c:136


(T_T)
まだ手はある。
libiconv.soをリンクしてコンパイル
CREATE FUNCTION実行!

CREATE FUNCTION

やった!やっとFUNCTIONの登録が出来たよ!(^^)v
これでHTMLのインデックス検索がPostgreSQL経由で出来る♪

だが、まだ問屋は卸さなかった。(爆)
実際に、FUNCTIONを動かしてみると、

db=# select pgnmz_score('help','/pathto/index.php','DOCUMENT');
pgnmz_score