perlモジュールのセットアップ

環境構築で予算がないので自分でやるしかないわけで



mt-check.cgiが途中で止まってしまう(Apacheのエラーログが出力される)場合は、どうもperlのモジュールがインストールされていないらしい


参考にするサイト、むしろ神サイト
http://y-kit.jp/saba/xp/cpan.htm


まず、「CPAN モジュール」というのをインストール?する

perl -MCPAN -e shell


基本的にはエンター連打だが
罠1:

Warning: ncftpget not found in PATH
Where is your ncftpget program?
Warning: ncftp not found in PATH
Where is your ncftp program?

といわれる・・・が無視してよいらしい
http://x68000.q-e-d.net/~68user/net/ext-module.html

罠2:
さらにenterを連打していくと、ftpに接続しようとしてリトライ祭りが発生する


ここで動揺して、停止してはいけないらしい

要は、さんざん思考繰り返したあげく、サイトの指定プロンプトが出てきますので、そこでしていしてやればOKです。

http://good-stream.com/goodstream/perl/tips/cpanerr.html


・・・そんなおばかなことがあるのか


以下のサイトを登録して終了

ftp://ftp.u-aizu.ac.jp/pub/CPAN
ftp://ftp.kddilabs.jp/CPAN/
http://ftp.nara.wide.ad.jp/pub/CPAN/
ftp://ftp.nara.wide.ad.jp/pub/CPAN/
ftp://ftp.dti.ad.jp/pub/lang/CPAN/
ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
http://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/
ftp://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/


罠3:
そして最大のトラップ
MTに必要なモジュールをインストールするのだが

Jcode.pm モジュール
cpan> install Jcode

DB_File モジュール
cpan> install DB_File

DBI モジュール
cpan> install DBI

DBD::mysql モジュール
cpan> install DBD::mysql


DBD::mysqlはみんなエラーになる・・・らしい

そこで回避策

 Can't exec "mysql_config": No such file or directory at Makefile.PL line 174.
 readline() on closed filehandle PIPE at Makefile.PL line 176.
これは、この辺 を参考に、mysql_config にシンボリックリンクを張って解決できます。
 ln -s /usr/local/mysql/bin/mysql_config /usr/local/bin/mysql_config
という感じです。
そして次に出てきたエラーは、
 Note (probably harmless): No library found for -lmysqlclient
これは解決に手間取りました。この辺 が参考になります。
まず、先ほどの「mysql_config」を使い、
 /usr/local/mysql/bin/mysql_config --libs
で、吐き出されたデータをメモ。次に、
 /usr/local/mysql/bin/mysql_config --cflags
で、吐き出されたデータをメモします。
CPANでインストール途中だったソースのあるディレクトリに移動します。
 cd /root/.cpan/build/DBD-mysql-2.9003/
メモしたパスをつなげて、
 perl Makefile.PL --cflags=-I/usr/local/mysql/include/mysql "--libs=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm"
とタイプします。(一行で。)
Makefile」ファイルが正常に生成されたらOKです。後は、
 make
 make test
 make install

http://y-kit.jp/saba/xp/cpan.htm



しかし、5年も放置されるこの問題は一体なんなんだ


罠4:

どうもパスがうまく通っていない
libmysqlclient.soあるいはlibmysqlclient.so.16が見つからないといわれる

t/42bindparam...............skipped
all skipped: ERROR: install_driver(mysql) failed: Can't load '/root/.cpan/build/DBD-mysql-4.007/blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: libmysqlclient.so.16: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません at /usr/lib/perl5/5.8.5/i386-linux-thread-multi/DynaLoader.pm line 230.


実際は存在しているのだが・・・


※ここから先は一気にやってしまったので、どこで解決したのかは不明


MySQLのマニュアルをチェック
「2.15.3. Perl DBI/DBD インターフェースを使用した際の問題」
http://dev.mysql.com/doc/refman/5.1/ja/perl-support-problems.html

・libmysqlclient.so を他の共有ライブラリがある (多分 /usr/lib あるいは /lib) ディレクトリにコピーします。
Linux 上で、libmysqlclient.so があるディレクトリのパス名を /etc/ld.so.conf ファイルに追加します。
・libmysqlclient.so があるディレクトリのパス名を LD_RUN_PATH 環境変数に追加します。システムの中には LD_LIBRARY_PATH を使用しているものもあります。


変更した後に、make realclean を必ず実行して次にインストールはじめから実施します。


あとはDBIモジュールを確認のためもう一度makeしたらこんなメッセージがでていた

Your LANG environment variable is set to 'ja_JP.UTF-8'
This is known to cause problems for some perl installations.
If you get test failures, please try again with LANG unset.
Please also email dbi-dev@perl.org and include the output of 'perl -V'


念のためLANGの設定を空にしてみる




この段階でも、DBD::mysqlのmake testではエラーになる

PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00base....................String found where operator expected at t/00base.t line 20, near "BAIL_OUT "Unable to load DBI""
(Do you need to predeclare BAIL_OUT?)
String found where operator expected at t/00base.t line 21, near "BAIL_OUT "Unable to load DBD::mysql""
(Do you need to predeclare BAIL_OUT?)
syntax error at t/00base.t line 20, near "BAIL_OUT "Unable to load DBI""
syntax error at t/00base.t line 21, near "BAIL_OUT "Unable to load DBD::mysql""
BEGIN not safe after errors--compilation aborted at t/00base.t line 22.
# Looks like your test died before it could output anything.
t/00base....................dubious
Test returned status 2 (wstat 512, 0x200)
DIED. FAILED tests 1-6
Failed 6/6 tests, 0.00% okay
t/10connect.................ok


・・・が、make installしてみると動いていたり


罠5:

まだあるのか・・・
ようやくmt-check.cgiが動いたものの、mt.cgiを叩くと500エラー


Apacheのログ

Premature end of script headers: mt.cgi

なんのこっちゃなのだが、実はmt-config.cgimysql以外の設定をコメントアウトしていなかった





ああ・・・疲れた