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 JcodeDB_File モジュール
cpan> install DB_File
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.
念のため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.cgiでmysql以外の設定をコメントアウトしていなかった
ああ・・・疲れた