« This is not a training. | メイン | 人間の目と機械の目 »

2011年3月26日 (土)

MT5.1 発進!

ようやくMovable Typeのアップグレードが完了した。

MovableTypeも結構前にVer5となり、いろいろと機能が増えた。
新しい機能が増えたら触ってみなくてはと思うわけで、昨年の夏休みにやろう、年末年始にやろう、と思っているうちに5.1のbeta版が出てきてしまった。

MovableTypeを個人ライセンスで自家設置している人は結構多い。エラー等で躓いても自力で解決してその情報を残してくれる人達のおかげで、私もどうにかMovableTypeを使うことができた。

Movable Type(以下MT)を導入してかれこれ5年になるが、バージョンアップ作業はこれで4回目だ。
MTは動作にwebサーバのアプリケーションやモジュールを利用する。
このblogがあるレンタルスペース、導入当初からほとんど環境が変わってなかったため、今のバージョンを動かそうとすると推奨のバージョンに満たないものが色々出てきていた。
既に最初の前々回MT4の時から*1あれこれごまかして一部機能を諦めて苦労して何とか動作させていたのだが、ついに決定的な問題に直面してしまう。

MT5が動作するPerlのバージョンが5.8.1以上となってしまったためだ。

サーバのPerlのバージョンは5.8.0で、その差はたった0.0.1だがあれこれ調べていると日本語の処理回りで不具合が出るとのこと。バージョンのチェックも掛かっているらしくアップグレードの画面すら出てくれない。

サーバを管理するプロバイダに連絡してバージョンを上げてもらう手もあるのだが、個人の領域(ローカル)にPerlをインストールしてそれを使うという最後の手段を最初から使う。
やってみないとできるかどうかわからないのに腹括って突き進む。
これぞ趣味の道。

Perlのバージョンは5.8.1以上であれば何でもよかったのだが、インストールの容易さからActivePerlの5.12.3となった。
インストールと設定は適当にやってたらできた。

これでmt-checkが動くようになる。
チェックの出力結果を見るとMySQL用のDBIドライバが無いと言われる。MySQLのDBを利用しているのでこれが使えるようにしなければならない。
ローカルへのモジュールのインストールは難儀した。makeはできてもインストール先が個人領域外なので、そこをうまく書き換えてやらなければならない。
設定を書き換えながら何日も粘ったがどうにもならずついに原始的な手段、コンパイル後のDBI/Mysql.soとMysql.pmをコピーしてインストール済ませた。
今回はついでにImage Magickもインストールできた。こっちはこっちでmakeで認識されるようになったもののライブラリのリンク先が固定になってしまい、認識後の設置場所から動かせなくなってしまった。しょうがないので消せるものを消して構造だけ維持させるという情けない対応。
動きさえすればあとはなんとかできると言い聞かせて突っ走る。

ようやくmt-upgradeを起動できるところまで到達。

アップグレード開始のボタンを押すと、あっさりエラー。

アップグレード中にエラーが発生しました failed to execute statement CREATE INDEX mt_blog_meta_type_vint ON mt_blog_meta (blog_meta_type,blog_meta_vinteger_idx): Duplicate key name 'mt_blog_meta_type_vint' at lib/MT/Upgrade.pm line 835.

理由をはINDEXがCREATEできないとのこと。既に同じnameのkeyあって被ってるから。
なんでこんなエラーで止まるのかまで調べたいが、とりあえず既にあるINDEXを削除して通してやる。

ここで回り道。テーブルの構造とか一覧で見たかったため、PHPMyAdminをインストールとセットアップ。これはMySQLのDB管理をwebブラウザからできる便利なアプリケーション。DBサーバの実体がwebサーバの向こう側、今風に言えばクラウドな環境で使うアプリだ。
そしてうまいことINDEXを削除して再度アップグレードを実行。

アップグレード中にエラーが発生しました failed to execute statement CREATE INDEX mt_blog_meta_type_vflt ON mt_blog_meta (blog_meta_type,blog_meta_vfloat_idx): Duplicate key name 'mt_blog_meta_type_vflt' at lib/MT/Upgrade.pm line 835.

別のINDEX重複エラーが出た。このテーブルのINDEXは全部削除しとかないとここは通らないらしい。
削除して通すやり方なので次にmt-upgradeを再実行させるときは既に作った同名のINDEXをまた作ろうとするので同じところでエラーになる。なんという賽の河原。

そしてせっせとINDEXを消しては次に引っかかるINDEXを探すということを繰り返してるとミスをやらかす。
PHPMyAdminは便利な反面、強力すぎてミスオペのペナルティもデカい。うっかりデータベースのインデックス項目を削除するつもりでテーブル項目を消してしまった。簡単に言えばテーブルをぶっ壊してしまった。
消した項目はentry_allow_comments。名前から察するにコメントを許可するかどうかのフラグのようだ。
バックアップを取っているので粛々と対応し何とか修復できたが項目の中身はNULLなんで全エントリでコメント送信ができなくなった。
中身もバックアップはしているので後で直すつもりで進める。

INDEXを消してCREATEするところを無理くり通したものの、どうやらUpgrade.pmに一度作成したINDEXをまた作ろうとする処理があるらしく、完全に賽の河原状態だと分かった。
MySQLが古すぎるからなんだろうか。
とにかく方針転換。INDEXの重複程度では落ちないようにUpdate.pmを書き換える。

# ignore drop errors; the table/sequence/constraint
# didn't exist
if (( ( $stmt !~ m/^drop /i )
&& ( $stmt !~ m/DROP CONSTRAINT /i ) )
&& (( $stmt !~ m/^create /i )
&& ( $stmt !~ m/CREATE INDEX /i ) ))
{
die "failed to execute statement $stmt: $err";
}

エラー出てもこの文の時は失敗扱いにするなよ。っていう条件を追加した。
これでスパーンとINDEXが通って・・・と思ったらその後でUNIQUEキーも作っててまた落ちる。ここは2件だけだったのでもう削除して切り抜けた。

これで・・・これだけで済んだのはラッキーとも言える状況でDBの再構築が通り、MTが起動した。
ちゃんと動くかどうかこのエントリを書きながら進めているが、ここまでくればもう勝ったも同然といってもいい頃かもしれない。

投稿者 Amayu : 2011年3月26日 16:05

トラックバック

このエントリーのトラックバックURL:
http://www.otto.to/~ada/cgi-bin/mt5/mt-tb.cgi/894

コメント一覧

Appreciation for this inforamtion is over 9000-thank you!

投稿者 Brayan : 2012年9月14日 22:08

CAPTCHAテスト

投稿者 あまゆ : 2011年3月29日 19:31

コメントを送る?



画像の中の文字を入力してね!!

名前を保存しますか?