Movable Typeをローカル環境にインストールしようとした時に躓いたのでメモ。
※私のはMac OS10.5.6にMAMPをインストールした環境です。
DBD::mysqlがインストールされてない
ローカルにMovable Typeを解凍&設置し、mt-check.cgiを走らせたところ、
サーバーにDBD::mysqlがインストールされていないか、DBD::mysqlに必要なモジュールがインストールされていません DBIとDBD::mysqlは、MySQLを使ってブログのデータを管理するために必要です。 DBD::mysqlをインストールする場合は、インストール手順を参照してください。
なエラーが。MAMPはデフォでMySQLをインストールしてくれるので、DBD::mysqlとはperlとMySQLをつないでくれる便利なモノと予想。まあ、それはどうでもよくて、DBD::mysqlをインストールすることに。
DBD::mysqlをインストール
MySQLとDBD::mysqlが必要となるのでダウンロードし解凍しとく。
以下を実行
1. mysql_configを探す。(私の場合は /Applications/MAMP/Library/bin/ にある)
2. MAMPと同じバージョンのMySQLをダウンロードして、解凍する。
(訳注.mySQLのサイトからでもよし、MAMPのサイトでソース版をダウンロードしてもよし)
3. includeディレクトリを /Applications/MAMP/Library/ディレクトリの下に移動する。
4. libディレクトリの内容を /Applications/MAMP/Library/lib/mysql/ディレクトリにコピーする。
5. ターミナルを起動し、DBD::mysqlを解凍したディレクトリに移動
6. make file を作る:
sudo Perl Makefile.PL --mysql_config=/Applications/MAMP/Library/bin/mysql_config
(訳注.mysql_configを指定することによって、この環境用のコンパイル引数を調べて設定してくれる)
※自分の場合、このままでは無理でした。当エントリの下の方参照
7. sudo make
8. sudo make install
※
Macが主流になってきました様より引用
ここで make コマンドが使えない
-bash: make: command not found
とハマる。
makeコマンドを使用できるようDeveloper Toolをインスト
appleのADC member siteより、Xcode (最新ver) Developer ToolsをDL&インストール
※DLにメンバー登録が必要です。(無料)
Device Centralが起動するか心配
Xcodeがあると、Device Central CS3が起動しないという症状があり、以前Xcodeをアンインストールしました。→Device Central CS3起動するようになった。
で、今回、Xcode 3.1.2をインストールしたところ、Device Central CS3も無事起動!!
makeコマンドも無事使用可能に
ということで、makeコマンドが通り、無事にDBD::mysqlがインストールされ、かつMac0S 10.5.6 & Movable Type + MySQL環境が構築できました。おわり。
嘘です。MySQLを選ぶところでこんなエラーが。(apache_error_logより)
[Thu Apr 23 23:40:17 2009] [notice] Digest: generating secret for digest authentication ...
[Thu Apr 23 23:40:17 2009] [notice] Digest: done
[Thu Apr 23 23:40:17 2009] [notice] Apache/2.0.59 (Unix) PHP/5.2.6 DAV/2 configured -- resuming normal operations
[Thu Apr 23 23:40:26 2009] [error] [client ::1] dyld: lazy symbol binding failed: Symbol not found: _mysql_init, referer: http://localhost/mt/mt-wizard.cgi
[Thu Apr 23 23:40:26 2009] [error] [client ::1] Referenced from: /Library/Perl/5.8.8/darwin-thread-multi-2level/auto/DBD/mysql/mysql.bundle, referer: http://localhost/mt/mt-wizard.cgi
[Thu Apr 23 23:40:26 2009] [error] [client ::1] Expected in: dynamic lookup, referer: http://localhost/mt/mt-wizard.cgi
[Thu Apr 23 23:40:26 2009] [error] [client ::1] , referer: http://localhost/mt/mt-wizard.cgi
[Thu Apr 23 23:40:26 2009] [error] [client ::1] dyld: Symbol not found: _mysql_init, referer: http://localhost/mt/mt-wizard.cgi
[Thu Apr 23 23:40:26 2009] [error] [client ::1] Referenced from: /Library/Perl/5.8.8/darwin-thread-multi-2level/auto/DBD/mysql/mysql.bundle, referer: http://localhost/mt/mt-wizard.cgi
[Thu Apr 23 23:40:26 2009] [error] [client ::1] Expected in: dynamic lookup, referer: http://localhost/mt/mt-wizard.cgi
[Thu Apr 23 23:40:26 2009] [error] [client ::1] , referer: http://localhost/mt/mt-wizard.cgi
[Thu Apr 23 23:40:26 2009] [error] [client ::1] Premature end of script headers: mt-wizard.cgi, referer: http://localhost/mt/mt-wizard.cgi
perlからMySQLへアクセスするスクリプトを試す
※mt425っていうデータベースとユーザはphpMyadminより作成してあります。
use DBI;
$user = 'hoge';
$passwd = 'hoge';
#$db = DBI->connect('DBI:mysql:hoge:localhost', $user, $passwd);
$db = DBI->connect('DBI:mysql:mt425:localhost:mysql_socket=/Applications/MAMP/tmp/mysql/mysql.sock', $user, $passwd);
$sth = $db->prepare("SELECT cd, nm FROM test");
$sth->execute;
$num_rows = $sth->rows;
print "該当 $num_rows 件\n";
for ($i=0; $i<$num_rows; $i++) {
@a = $sth->fetchrow_array;
print "cd=$a[0], nm=$a[1] \n";
}
$sth->finish;
$db->disconnect;
結果
dyld: lazy symbol binding failed: Symbol not found: _mysql_init
Referenced from: /Library/Perl/5.8.8/darwin-thread-multi-2level/auto/DBD/mysql/mysql.bundle
Expected in: dynamic lookup
dyld: Symbol not found: _mysql_init
Referenced from: /Library/Perl/5.8.8/darwin-thread-multi-2level/auto/DBD/mysql/mysql.bundle
Expected in: dynamic lookup
Trace/BPT trap
同じようなエラーが出たんで、Movable Typeはひとまず置いといて、perl&MySQLを解決しなくては。
追加(次の日) 寝て頭すっきりさせたらエラーがなくなった。
弄くりまわしてごちゃごちゃしたらエラーがなくなった。その過程を覚えてる範囲で記載しておきます。
1、用意するMySQLのバージョン
MAMPにはすでにMySQLが入っているのだけど、どうも完全体ではないみたいなので、MySQLをDLしてきて、おいしいところだけチョイスする。その時に「Mac OS X 10.5 (x86)」と「Mac OS X 10.5 (x86_64)」があるわけだが、x86の方を選んだ。※最初はx86_64を選んでいてエラーでてた。ただし、結果的にエラーがなくなっただけで、これが原因かどうかは分かりません。
perl Makefile.PLの設定
perl Makefile.PL --libs="-L/Applications/MAMP/Library/lib/mysql/lib -lmysqlclient" --mysql_config=/Applications/MAMP/Library/bin/mysql_config --testdb=mt425 --testhost=localhost -testuser=mt425 -testpassword=admin
※一行で
※mt425っていうデータベースとユーザはphpMyadminより作成してあります。
自分の場合、
/Applications/MAMP/Library/lib/mysql/lib
にDLしてきたMySQL(Mac OS X 10.5 (x86))のlibファイルをコピペして、Makefile.PL時に設定しました。
後は、
sudo make
sudo make test
sudo make install
です。
make test時にエラーが
/tmp/mysql.sockが無いYO!みたいなエラーが出たけど、これは無視!
※perlでのアクセス時や、movable typeインストール時にmysql.sockの位置を指定できため。
export PATH=$PATH:/Applications/MAMP/Library/bin
あと上記のようなコマンドを打ったけど、意味は全然わかっていなかったりする。
OS10.5.6 & Movable Type & MySQL完了
データベースソケットのところにmysql.sockの位置を指定。データベースポートは無視。
これで多分完了。ローカルにmt環境作るだけなんて簡単よ!とか思ってたけど全くそんなことなかった。サーバー弄くれる人尊敬します。