インストールのメモ |
作成日:2008-05-17 最終更新日: |
以下、Namazu 2.0.18 をレンタルサーバ(FreeBSD 6.2)にインストールしたときのメモである。
./configure は正常終了する。
次に make したところ、次のエラーが表示された。
(前略) grep: /usr/local/lib/libiconv.la: No such file or directory sed: /usr/local/lib/libiconv.la: No such file or directory libtool: link: `/usr/local/lib/libiconv.la' is not a valid libtool archive *** Error code 1 (後略)
libiconv.la が見付からない、という。 この前のコンパイルのオプションから察するに、 ライブラリとして探しているのは /usr/local/lib だけである。 /usr/local/lib に、 libiconv.la というライブラリは確かになかった。
そこで、$HOME/lib というディレクトリを作り、 ここに libiconv.la をインストールしようと考えた。 ところが、気になって libiconv.la の正体を file コマンドで調べてみると、 これは ASCII ファイルである。何かおかしい。
そこで、別の考えが必要とわかったので、次を試してみた。
./configure --disable-shared --prefix=$HOME/namazuすると、make は正常完了した。 prefix を書き込み可のところに指定することで、 処理がうまくいったように見える。 しかし、namazu の検索結果で、検索結果と出るべきところ、 Results: と表示され、日本語が表示できない。
次にとった対策は、--with-libintl-prefix=/usr/local として、 gettext のライブラリを明示することであった。
./configure --disable-shared --prefix=$HOME/namazu --with-libintl-prefix=/usr/localしかし、この configure により作成された Makefile で make すると、先の libiconv.a と同じエラーでストップする。 レンタルサーバの /usr/local/lib に、 libiintl.a や libiconvl.a があることは確認している。
苦渋の策で、$HOME/local というディレクトリに自前で gettext をインストールして、ここをインストール時の prefix とみなすようにした。
./configure --disable-shared --prefix=$HOME/localすると、問題なく make も完了し、Namazu の検索結果も日本語が表示される。
c:\nmz2.0.18.0001-win32\ppm-inst
を行うと、次のようなエラーで異常終了する。
C:>\call ppm install http://www.akaneiro.jp/PPMPackages/800/NKF.ppd -force
Syncing site PPM database with .packlists...done
Downloading NKF-2.07.1...failed 500 Cannot write to 'C:\DOCUME~1\satosi\LOCALS~1
\Temp\ppm-Px80P1/NKF-2.07.1.tgz': No such file or directory
ppm install failed: 500 Cannot write to 'C:\DOCUME~1\satosi\LOCALS~1\Temp\ppm-Px
80P1/NKF-2.07.1.tgz': No such file or directory
Downloading File-MMagic-1.27...failed 500 Cannot write to 'C:\DOCUME~1\satosi\LO
CALS~1\Temp\ppm-K5IOn_/File-MMagic-1.27.tgz': No such file or directory
ppm install failed: 500 Cannot write to 'C:\DOCUME~1\satosi\LOCALS~1\Temp\ppm-K5
IOn_/File-MMagic-1.27.tgz': No such file or directory
Downloading Text-Kakasi-2.04.1...failed 500 Cannot write to 'C:\DOCUME~1\satosi\
LOCALS~1\Temp\ppm-3lbmr6/Text-Kakasi-2.04.1.tgz': No such file or directory
ppm install failed: 500 Cannot write to 'C:\DOCUME~1\satosi\LOCALS~1\Temp\ppm-3l
bmr6/Text-Kakasi-2.04.1.tgz': No such file or directory
Downloading Search-Namazu-0.96.2...failed 500 Cannot write to 'C:\DOCUME~1\
satosi\LOCALS~1\Temp\ppm-hzv77B/Search-Namazu-0.96.2.tgz': No such file or directory
ppm install failed: 500 Cannot write to 'C:\DOCUME~1\satosi\LOCALS~1\Temp\ppm-hz
v77B/Search-Namazu-0.96.2.tgz': No such file or directory
よくもこれだけのエラーが出たものだ。 原因は、環境変数 TEMP か TMP の指定が、ユーザー環境変数が優先され、 それがC:\Documents and Settings\satosi\Local Settings\Temp になっているからだと思われる。 実際には、satosi は別の名前のひらがなだった。 対策は、ユーザー環境変数の TEMP と TMP を削除することである。
今度は、以下、Namazu 2.0.20 をレンタルサーバ(FreeBSD 7.1)にインストールしたときのメモである。
まず、namazu-2.0.20.tar.gz を展開し、このディレクトリに cd する。 そのディレクトリで、まずこのコマンドを打つ。
% ./configure --prefix=$HOME/local次にmakeする。
% make
途中で warning が出るが、
最後は次のように表示される。
Making all in template
Making all in contrib
おそらく大丈夫だろう。最後にインストールする。
% make install特に問題はないように見えるがどうか。
% $HOME/local/bin/mknmz --help
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_ALL = "ja_JP.EUC",
LC_MESSAGES = "ja_JP.EUC",
LANG = "ja_JP.EUC"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
mknmz 2.0.20, an indexer of Namazu.
(以下省略)
日本語表示にならない。なぜだろう。嫌な予感がする。
いろいろ調べて、これは Perl の問題であるらしい。
具体的には、環境変数 PERL_BADLANG にゼロを設定すれば直る。
.cshrc に次を追加する。
setenv PERL_BADLANG 0
mknmz 2.0.20, an indexer of Namazu. (以下省略)
日本語にならない。理由は不明。
その後、理由を考えてみる。 レンタルサーバに組み込まれている namazu のライブラリは、 次のようになっている。
% ldd `which namazu`
/usr/local/bin/namazu:
libnmz.so.7 => /usr/local/lib/libnmz.so.7 (0x28089000)
libintl.so.8 => /usr/local/lib/libintl.so.8 (0x280b5000)
libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x280be000)
libm.so.5 => /lib/libm.so.5 (0x281b3000)
libc.so.7 => /lib/libc.so.7 (0x281c8000)
ところが、自分でコンパイルして得た namazu はこうなっている。
% ldd $HOME/local/bin/namazu
$HOME/local/bin/namazu:
libnmz.so.8.2 => $HOME/local/lib/libnmz.so.8.2 (0x28089000)
libm.so.5 => /lib/libm.so.5 (0x280b6000)
libc.so.7 => /lib/libc.so.7 (0x280cb000)
これについては、Namazu メーリングリスト
Re: FreeBSD上のgettextについて (www.namazu.org)
に同様の現象と指摘がある。私の環境では事実、config.h に
#define HAVE_GETTEXT 1
は定義されていなかった。
別の観点からも確認しよう。./configure --prefix=$HOME/local を実施したときのログも見てみる。
(前略) checking for GNU gettext in libc... no checking for iconv... no, consider installing GNU libiconv checking for GNU gettext in libintl... no checking whether to use NLS... no (後略)
では次のコマンドを実施したときのログも見てみよう。
% ./configure --prefix=$HOME/local --with-libintl-prefix=/usr/local (前略) checking for GNU gettext in libc... no checking for iconv... no, consider installing GNU libiconv checking for GNU gettext in libintl... yes checking whether to use NLS... yes checking where the gettext function comes from... external libintl checking how to link with libintl... /usr/local/lib/libintl.so -L/usr/local/lib /usr/local /lib/libiconv.so -Wl,-rpath -Wl,/usr/local/lib (後略)
gettext に関しては見つかったようだ。config.h にも次のように定義されている。
/* Define if the GNU gettext() function is already present or preinstalled. */ #define HAVE_GETTEXT 1
ただし、iconv に関しては見つかっていない。 これも ./configure のprefix で対応できるだろうか。
% ./configure --prefix=$HOME/local --with-libintl-prefix=/usr/local -with-libiconv-prefix=/usr/localchecking for GNU gettext in libc... no checking for iconv... yes checking how to link with libiconv... /usr/local/lib/libiconv.so -Wl,-rpath -Wl,/usr/local /lib checking for GNU gettext in libintl... yes checking whether to use NLS... yes checking where the gettext function comes from... external libintl checking how to link with libintl... /usr/local/lib/libintl.so -L/usr/local/lib /usr/local /lib/libiconv.so -Wl,-rpath -Wl,/usr/local/lib
どうやらよいようだ。もう一回やり直す。
$ make clean
$ make
$ make install
% ldd $HOME/local/bin/namazu
$HOME/local/bin/namazu:
libnmz.so.8.2 => $HOME/local/lib/libnmz.so.8.2 (0x28089000)
libintl.so.8 => /usr/local/lib/libintl.so.8 (0x280b6000)
libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x280bf000)
libm.so.5 => /lib/libm.so.5 (0x281b4000)
libc.so.7 => /lib/libc.so.7 (0x281c9000)
こちらはできたが、namazu のメッセージが日本語にならないことは同じだ。
そこで、FreeBSD 6.2 のときと同じように gettext を疑い、自前でインストールしようとした。 すると、make のときに次のメッセージが出る
./libxml/encoding.h:29:19: error: iconv.h: No such file or directoryiconv.h は /usr/local/include にあるが、configure で何も指定しないところ、 iconv_t がないとか、iconv.h がないとかで叱られた。 従って、configure で指定するしかない。
% ./configure --prefix=$HOME/local --with-libiconv-prefix=/usr/local % make (前略) $HOME/local/gettext/gettext-tools/gnulib-lib/.libs/libgettextlib.so: undefined reference to `str_cd_iconv' $HOME/local/gettext/gettext-tools/gnulib-lib/.libs/libgettextlib.so: undefined reference to `mem_cd_iconv' (後略)
ここで自前の gettext は諦めた。改めて、namazu の挙動を確認した。 すると、LANG 変数を fr (フランス語)にするとフランス語表示になる。 es (スペイン語)にすると、スペイン語表示になる。 つまり、メッセージがそれぞれの言語に応じて変わるではないか。 ということは、gettext は働いているが、言語の指定がおかしいと推測される。 試行錯誤の末、LANG を ja ではなく、ja_JP.eucJP にすればよいことがわかった。 Namazu の CGI の変数が長くなるが、仕方がない。
ここまでわかった上で、検索文字列を UTF-8 から EUC に変換するラッパープログラムを書くことにした。 これについてはUTF-8 への対応に譲る。
まりんきょ学問所 > 全文検索システム Namazu > インストールのメモ