インストールのメモ

作成日:2008-05-17
最終更新日:

FreeBSD へのインストールのメモ

以下、Namazu 2.0.18 をレンタルサーバ(FreeBSD 6.2)にインストールしたときのメモである。

configure と make

./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 の検索結果も日本語が表示される。

Windows XP へのインストールのメモ

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 を削除することである。

FreeBSD へのインストールのメモ(2)

今度は、以下、Namazu 2.0.20 をレンタルサーバ(FreeBSD 7.1)にインストールしたときのメモである。

まず、namazu-2.0.20.tar.gz を展開し、このディレクトリに cd する。 そのディレクトリで、configure したあと、 makeする。

$ tar zvxf namazu-2.0.20.tar.gz
$ cd namazu-2.0.20.tar.gz
$ ./configure --prefix=$HOME/local 
$ 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

% $HOME/local/bin/mknmz --help
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/local
checking 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 directory

iconv.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 への対応に譲る。

MMagic のインストール

Namazu 2.0.22 からは MMagic は同梱されなくなった。そのため、mknmz を実行すると次のエラーが出る。

Can't locate File/MMagic.pm in @INC (you may need to install the File::MMagic module) (@INC contains: . /usr/local/lib/perl5/site_perl/mach/5.26 /usr/local/lib/ perl5/site_perl /usr/local/lib/perl5/5.26/mach /usr/local/lib/perl5/5.26) at /home/**/*****/local/bin/mknmz line 35.

FILE:MMagic をインストールする。私が使っているのはレンタルサーバーなので、root 権限は使えない。 対策を講じる必要があると思ったが、cpan install moduleとすればよい。以下はその結果だ。

$ cpan install File::MMagic
Loading internal null logger. Install Log::Log4perl for logging messages

CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.

Would you like to configure as much as possible automatically? [yes]  (Enterを入力)
Use of uninitialized value $what in concatenation (.) or string at /usr/local/lib/perl5/5.26/App/Cpan.pm line 669, <STDIN> line 1.

Warning: You do not have write permission for Perl library directories.

To install modules, you need to configure a local Perl library directory or
escalate your privileges.  CPAN can help you by bootstrapping the local::lib
module or by configuring itself to use 'sudo' (if available).  You may also
resolve this problem manually if you need to customize your setup.

What approach do you want?  (Choose 'local::lib', 'sudo' or 'manual')
 [local::lib]  (Enterを入力)
Attempting to create directory ($HOME/perl5)

Checking if your kit is complete...
Looks good
Generating a Unix-style Makefile
Writing Makefile for local::lib
Writing MYMETA.yml and MYMETA.json
cp lib/lib/core/only.pm blib/lib/lib/core/only.pm
cp lib/POD2/DE/local/lib.pod blib/lib/POD2/DE/local/lib.pod
cp lib/local/lib.pm blib/lib/local/lib.pm
cp lib/POD2/PT_BR/local/lib.pod blib/lib/POD2/PT_BR/local/lib.pod
Manifying 4 pod documents
PERL_DL_NONLAZY=1 "/usr/local/bin/perl5" "-I$HOME/perl5/lib/perl5" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/bad_variables.t ...... ok   
t/carp-mismatch.t ...... ok   
t/classmethod.t ........ ok   
t/de-dup.t ............. ok   
t/lib-core-only.t ...... ok   
t/pipeline.t ........... ok   
t/shell.t .............. ok       
t/stackable.t .......... ok     
t/subroutine-in-inc.t .. ok   
t/taint-mode.t ......... ok   
All tests successful.
Files=10, Tests=196,  3 wallclock secs ( 0.05 usr  0.03 sys +  1.38 cusr  0.88 csys =  2.34 CPU)
Result: PASS
Manifying 4 pod documents
Installing $HOME/perl5/lib/perl5/local/lib.pm
Installing $HOME/perl5/lib/perl5/lib/core/only.pm
Installing $HOME/perl5/lib/perl5/POD2/DE/local/lib.pod
Installing $HOME/perl5/lib/perl5/POD2/PT_BR/local/lib.pod
Installing $HOME/perl5/man/man3/POD2::DE::local::lib.3
Installing $HOME/perl5/man/man3/POD2::PT_BR::local::lib.3
Installing $HOME/perl5/man/man3/lib::core::only.3
Installing $HOME/perl5/man/man3/local::lib.3
Appending installation info to $HOME/perl5/lib/perl5/i386-freebsd-thread-multi-64int/perllocal.pod

Would you like me to append that to $HOME/.bashrc now? [yes] 
Running install for module 'File::MMagic'
Fetching with LWP:
http://www.cpan.org/authors/id/K/KN/KNOK/File-MMagic-1.30.tar.gz
Fetching with LWP:
http://www.cpan.org/authors/id/K/KN/KNOK/CHECKSUMS
Checksum for /home/33/sma8800/.cpan/sources/authors/id/K/KN/KNOK/File-MMagic-1.30.tar.gz ok
Configuring K/KN/KNOK/File-MMagic-1.30.tar.gz with Makefile.PL
Checking if your kit is complete...
Looks good
Generating a Unix-style Makefile
Writing Makefile for File::MMagic
Writing MYMETA.yml and MYMETA.json
  KNOK/File-MMagic-1.30.tar.gz
  /usr/local/bin/perl5 Makefile.PL -- OK
Running make for K/KN/KNOK/File-MMagic-1.30.tar.gz
cp MMagic.pm blib/lib/File/MMagic.pm
Manifying 1 pod document
  KNOK/File-MMagic-1.30.tar.gz
  /usr/bin/make -- OK
Running make test
PERL_DL_NONLAZY=1 "/usr/local/bin/perl5" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/01-selfcheck.t ... ok   
t/02-extmagic.t .... ok   
t/03-typecheck.t ... ok   
t/04-string-mod.t .. ok   
t/05-subclass.t .... ok   
t/06-conthook.t .... ok   
t/07-contents.t .... ok   
All tests successful.
Files=7, Tests=11,  0 wallclock secs ( 0.03 usr  0.00 sys +  0.12 cusr  0.09 csys =  0.23 CPU)
Result: PASS
  KNOK/File-MMagic-1.30.tar.gz
  /usr/bin/make test -- OK
Running make install
Manifying 1 pod document
Installing /home/33/sma8800/perl5/lib/perl5/File/MMagic.pm
Installing /home/33/sma8800/perl5/man/man3/File::MMagic.3
Appending installation info to /home/33/sma8800/perl5/lib/perl5/i386-freebsd-thread-multi-64int/perllocal.pod
  KNOK/File-MMagic-1.30.tar.gz
  /usr/bin/make install  -- OK

hnf.pl の問題

mknmz でこのようなエラーが出た。

Unescaped left brace in regex is illegal here in regex; marked by >-- HERE in m/%{ >-- HERE ?([a-z]+)}?/ at $HOME/local/share/namazu/filter/hnf.pl line 247.
Compilation failed in require at $HOME/local/bin/mknmz line 412.

hnf はハイパー日記システム用のフィルターである。 hnf.pl は使っていないので、とりあえず対象外とする。

$ cd ~/local/share/namazu/filter
$ mv hnf.pl hnf.pl_exclude # 無効化

FreeBSD へのインストールのメモ(3)

今度は、以下、Namazu 2.0.22pre7 をレンタルサーバ(FreeBSD 11.2-RELEASE-p9)にインストールしたときのメモである。

まず、namazu-2.0.22pre7.tar.gz を展開し、このディレクトリの名前を namazu に rename したあと cd する。 そのディレクトリで、configure した。

$ tar zvxf namazu-2.0.20.pre7.tar.gz
$ mv namazu-2.0.22pre7
$ mv namazu
$ cd namazu

configure のときの prefix には注意が必要だ。

% ./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 -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/local

checking 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

% ./configure --prefix=$HOME/local --with-libintl-prefix=/usr/local -with-libiconv-prefix=/usr/local

どうやらよいようだ。

$ make
$ make install
$ ldd $HOME/local/bin/namazu
$HOME/local/bin/namazu: libintl.so.8 => /usr/local/lib/libintl.so.8 (0x800847000) libm.so.5 => /lib/libm.so.5 (0x800a52000) libc.so.7 => /lib/libc.so.7 (0x800c7f000)

以前と比べると、 libnmz.so.8.2 => $HOME/local/lib/libnmz.so.8.2
libiconv.so.3 => /usr/local/lib/libiconv.so.3
の行がないが大丈夫だろうか。

この状態で mknmz を動作させた。その結果、最初のファイルを読み取ったところで NMZ.lock2 が出力されていまい、 先に進まない。原因は不明である。そろそろ、namazu の使用をあきらめるしかないのだろうか。

わけもわからず試行錯誤した結果、次のようにして正常に動作するようになった。 まず、mknmz の行を、このレンタルサーバーで提供されている最新の perl で実行するよう置き換える。

#!/usr/local/bin/perl5.26.2 -w

この結果、mknmz は最後のファイルまで読み取るようになった。(2019-03-10)

まりんきょ学問所全文検索システム Namazu > インストールのメモ


MARUYAMA Satosi