Movable Type 3.33 のインストールログ(アップグレード) 0. バージョンアップの動機  コメントスパムに気をとられ、油断していたらトラックバックスパムが 14万以上になっていた。SQL が使えれば delete するが、あいにく BerkeleyDB だったのでそれもできず、一括削除しようとしてもうまくいかない。  以下のアップグレード後に kazuho 氏のスクリプト (http://labs.cybozu.co.jp/blog/kazuho/archives/2006/07/mtspamclear.php) を試したがダメ。そこでやむを得ず「書き出し」でテキストファイルに内容を  書き出し、スパム部分をエディタで削除。Movabletype は新規インストールし、  そこに読み込んだ。  以下では別のバックアップサーバでのアップグレードの手順を記す。 1. ソースのダウンロード Movable Type はフリーソフトではないが個人の非営利使用の場合は無償で使える。 Movabletype のライセンスページ http://www.sixapart.jp/movabletype/mt3/license.html を見て必要な手続きを経てソースをダウンロードする (今回は MT-3.33-ja.zip である) 2. 展開 今回は windows マシンでダウンロードしたのでそのまま解凍し MT-3.33-ja フォルダができる 3. perl のパスの確認(変更) *.cgi ファイルの先頭の perl のパスを確認してシステムの perl のパスと 違う場合は修正する(今回は /usr/local/bin/perl に修正した) 4. バックアップ 必要ならデータベースのバックアップを取る  (または簡単に内容の「書き出し」でテキストファイルとして書き出して  おいてもよい) 5. 以前のバージョンの削除 以前のバージョンのファイルを削除  ただし、db(データベース)は削除しない。  また、3.01 の mt.cfg の内容は移行のために別のところに取っておく 6. 新しいバージョンの導入 アップグレードなので前のバージョン(3.01)と基本的に同じディレクトリ  配置で新しいバージョンのファイルを ftp mt-static などの新しいディレクトリは適宜設置 7. ファイルの設定 cgi ファイルのパーミッションを設定する chmod 755 my*.cgi mt-config.cgi ファイルを編集する。 基本的な url などの設定は前バージョンのとおり。  mt-config.cgi-original ではなくなっている設定を mt.cfg を参考に追加 今回は、 DefaultLanguage ja PublishCharset EUC-JP の2つの項目を追加した 8. 更新  Movabletype にログインすると自動的に最新バージョンへの更新が始まる  終了したらサイトの確認 A. 後からの付記  先日サーバを更新したら MT にログインできなくなった。ちょっと調べてみると  BerkeleyDB のバージョンが新しくなったせいらしい。MT を BerkeleyDB で使う  場合に必要な perl の DB_File モジュールが libdb に依存しており、これが  libdb4.2 にバージョンアップしたせいで以前のDBが読み込めなくなったらしい。  db_upgrade でアップグレードできる場合もあるらしいが試して見ると、 db_upgrade: author.db: unrecognized file type db_upgrade: DB->upgrade: author.db: Invalid argument  のように言われてダメだった。これでダメなら db_dump でダンプし db_load  でロードしろとあったが db_dump も同様にダメだった。仕方ないのでバック  アップ用に仕込んでいた別サーバの MT(内容は同じ)で db_dump し、その  ファイルを転送してから db_load したら何とかログインできるようになった。  *.db, *>idx ファイルの数が多いので実際には、 #!/bin/perl @list1 = <*.db>; @list2 = <*.idx>; @list = (@list1, @list2); foreach $filename (@list) { system( "db_dump -f $filename.data $filename"); }   (転送した後、同様のスクリプトで system 部分を system( "mv $filename $filename.old"); system( "db_load -f $filename.data $filename" );    のようにする)  のようなスクリプトで処理した。