正しいDBD::mysqlのインストール方法
某43がDBD::mysqlのインストールで苦しんでいるようだ。確かにMovabletypeを入れる時にcpanで入れようとすると絶対に入らなかった記憶がある。
インタプリタなperlの癖にモジュールがバイナリなのは如何なものかと思うが、perlモジュールのインストールを自力で解決したところで、ぜんぜん勉強にならないような気がする。
これに関してはさっさと解決して次のステップに進むべき問題やと思うので私なりのインストールの仕方を記事にしてみる。
43だけでなくDBD::mysqlのperlモジュールのインストールに頭を悩ませている方の役に立てば幸いである。
:mysqlの確認
which mysql でmysqlがどこから起動されているかを確認する。
solaris10でデフォルトで入ってくるmysqlはリモートのデーターベースにつなげられない、2バイト文字列を文字列として扱えない(たぶん)機能限定版なので、
自前でコンパイルした(もしくはパッケージで入れた)もの使うのが望ましい。
DBD::mysqlのインストールにはmysql関連のバイナリにパスが通っている必要があるので、
/usr/local/mysqlがprefixになっているのなら
$export PATH=/usr/local/mysql/bin:$PATH
としてmysqlコマンドが使えるようにしておく。
:cpanの起動
(依存モジュールのインストールとDBD::mysqlのダウンロードのため)
solarisに入っているperlを使うなら/usr/bin/perl -MCPAN -e shell で、
自前でコンパイルしたperlなら/usr/local/bin/cpanでcpanのコンソールを起動。
cpanのコンソールから
$install DBD::mysql
とする。本来ならここでBD::mysqlはインストールはされるはずだが、実は確実に失敗する。
失敗するのになぜ行うのかというと、DBD::mysqlのソースをダウンロードするためと、動作に必要な依存モジュールである、DBI をインストールするためである。
DBIがインストールされ、DBD::mysqlのmake test に失敗して止まったら、
$exit
でcpanを抜ける。
:DBD::mysqlのインストール
この段階でDBD::mysqlのコンパイルに必要なものはすべてそろっているので、cpanのbuildディレクトリに移動する。
(どこかわからない場合は~/.cpan/CPAN/MyConfig.pmのbuild_dirの行に書いてある。)
土偶の場合は/root/cpan/buildなのでそこに移動し、cpanが作ったDBD-mysql-3*というディレクトリがあるはずなので、そのディレクトリにcdする。
cpanはこのディレクトリでコンパイルオプションなしのmake testに失敗しているので
$make clean
で出来損ないのバイナリを消しておき、これを適切なオプションをつけたmake でコンパイルしなおす。
コンパイルオプションを調べるために、
$perl Makefile.PL –help
の出力をよく検討する。
いろいろなオプションがあるが、まともにmysqlがインストールされていれば、–testdb=<db>と–testuser=<user>、–testpassword=<pwd>が絶対に必要なる。
cpanでmakeが失敗したのはこのオプションが渡されていない事によるので、自前でオプションをつけてコンパイルしてやる。
Makefileの作成
$perl Makefile.PL –testdb=test –testuser=root –testpassword=MYSQLのユーザーrootのパスワード
(ローカルホストのtestデータベースにユーザー名root、指定したパスワードで接続テストをする)
コンパイル
$make (またはgmake、 dmake)
作成されたDBD::mysqlのテスト(cpanではここで失敗する)
$make test (またはgmake test、dmake test)
土偶サーバーの場合は
Failed 3/20 test scripts, 85.00% okay. 4/903 subtests failed, 99.56% okay.
と合計7つのテストが失敗しているがこれでちゃんと動作する。
モジュールのインストール
#make install
これでちゃんとDBD::mysqlがインストールされるはずです。
ちゃんと入ったらコメントなりトラックバック下されよ >43
DBD::mysqlの憂鬱
深夜に帰宅しcpanのインストールを再トライじゃいとやってみたらあっさりインストールしちゃった。?何が前にやった時と異なるのだ?わからんなぁ。
とにかく無…