Movable Type 4のインストール

テキストファイルを編集する必要がなくなり、とても簡単になりました

前置き
 管理人はそれまでMovable Type 3.32を利用していましたが、ハードディスクエラーが発生したためにその環境は完全に破壊されてしまい、静的なコンテンツだけが残された状態になりました(別の言い方をすれば、CGIの部分のバックアップが存在せず、HTMLの部分のバックアップのみが存在した)。Movable Typeには過去のバージョンからのアップグレードパスもあるのですが、CGIの部分が失われているのでそれは難しそうです。
 ということで、今回は全く新規に導入するイメージで作業をすることにしました。静的なコンテンツについては、別ディレクトリを利用するような形にすることにします。

 

事前準備
 今回の導入対象は、現在管理人が利用しているCent OS 5です。必要となる環境については、ちょっとわかりにくいですがhttp://www.movabletype.jp/documentation/system_requirements.htmlに書かれています。ポイントとなるのは、今回からはRDBMSが必須となっていることです。Linux的にいえばPostgreSQL / MySQL / SQLiteの選択になりますが、今回は使い慣れているMySQLを利用してみることにします。

 MySQL関連のパッケージはたくさんありますが、最低限必要になるのは、MySQLの本体であるmysql-serverと、そこに接続するために必要となるクライアントプログラム + ライブラリが収められたmysqlなので、この2パッケージをyumで導入します。
[root@www ryu]# yum install mysql-server mysql

(中略)

Installing: mysql ######################### [1/3]
Installing: perl-DBD-MySQL ######################### [2/3]
Installing: mysql-server ######################### [3/3]

Installed: mysql.i386 0:5.0.22-2.1 mysql-server.i386 0:5.0.22-2.1
Dependency Installed: perl-DBD-MySQL.i386 0:3.0007-1.fc6
Complete!

 結果的に関連パッケージを含めて3パッケージが導入されました。続いて、必要とされているPerlモジュールの導入を行います。おなじみのCPAN経由で行います。CPANを知らない人は、WikipediaのCPANのページでも参照してください。
[root@www ryu]# perl -MCPAN -e shell

(初期設定は省略)

cpan> install CGI
cpan> install HTML::Template
cpan> install Image::Size

(中略)

Can't locate Module/Build/Compat.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at Makefile.PL line 3.
BEGIN failed--compilation aborted at Makefile.PL line 3.
Running make test
Make had some problems, maybe interrupted? Won't test
Running make install
Make had some problems, maybe interrupted? Won't install

 指定されているImage::Sizeを導入しようとしたら、Module::Build::Compatがないと怒られたので、こちらを導入してから再度Image::Sizeの導入を行います。再導入をそのまま行うとうまくいきませんでしたが、ダウンロード済みのファイルを削除してから再度実行したらうまくいきました。
cpan> install Module::Build::Compat
[root@www ryu]# rm -r /root/.cpan/build/Image-Size-3.01
cpan> install Image::Size
cpan> install File::Spec
cpan> install CGI::Cookie
cpan> install DBI
cpan> install DBD::mysql

(中略)

dbdimp.c:20 から include されたファイル中:
dbdimp.h:22:49: error: mysql.h: そのようなファイルやディレクトリはありません
dbdimp.h:23:45: error: mysqld_error.h: そのようなファイルやディレクトリはありません
dbdimp.h:24:49: error: errmsg.h: そのようなファイルやディレクトリはありません

 どうやら、DBD::mysqlを導入するにはMySQLのヘッダファイルが必要なようです。対応するパッケージはmysql-devel.i386になるので、こちらをyumで導入してから再度実行すれば正常に導入されるはずです。パッケージの導入を続けます。
cpan> install HTML::Entities
cpan> install LWP::UserAgent
cpan> install SOAP::Lite
cpan> install File::Temp
cpan> install Image::Magick

(中略)

Magick.xs:64:31: error: magick/MagickCore.h: そのようなファイルやディレクトリはありません

 Image::Magickにもヘッダファイルが必要なようです。先ほどと同じく、対応するパッケージとなるImageMagick-devel.i386をyumで導入してから再実行すれば問題ないはず...と思ったのですが、上とは別のエラーが出てどうしようもなかったので、yumでインストールしてしまおう...と思ったら、ImageMagick-devel.i386を導入した際に依存関係で導入済みでした。更にPerlから呼び出すためのImageMagick-perl.i386を導入すれば、Movable Typeから認識できるようなので、CPANでの導入は放棄しました。続けます。
cpan> install Storable
cpan> install Crypt::DSA
cpan> install MIME::Base64
cpan> install XML::Atom

(中略)

looking for -lxml2... no
looking for -llibxml2... no
libxml2 not found
Try setting LIBS and INC values on the command line
Or get libxml2 from
http://xmlsoft.org/
If you install via RPMs, make sure you also install the -devel
RPMs, as this is where the headers (.h files) are.

 依存関係でいろいろなモジュールを突っ込まれる過程で、上記のエラーで失敗している模様。yumでlibxml2-devel.i386を導入してから再挑戦するも、本命のXML::Atomのインストールでエラーが出て停止。エラーを眺めてみると、テストの80%弱が成功しているにも関わらず、20%今日のエラーが出ているためインストールに失敗していました。
Failed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------------
t/04-person.t 2 512 9 2 22.22% 8-9
t/19-ext.t 1 256 9 1 11.11% 4
t/23-category.t 2 512 17 2 11.76% 16-17
t/25-utf8-create.t 1 256 1 1 100.00% 1
Failed 4/19 test scripts, 78.95% okay. 6/262 subtests failed, 97.71% okay.
make: *** [test_dynamic] エラー 255
/usr/bin/make test -- NOT OK
Running make install
make test had returned bad status, won't install without force

 こんな微妙な状況は自力では解決できないので放棄しましたが、結果的にMovable Typeからは認識されるようなので、よしとします。続けます。
cpan> install Archive::Tar
cpan> install Archive::Zip
cpan> install IO::Compress::Gzip
cpan> install IO::Uncompress::Gunzip

 先に紹介したページに掲載されているモジュールの導入はこれで終了のはず...ですが、後でMail::Sendmailが必要になることが判明するので、ついでにここで入れてくといいでしょう。

MySQLの設定
 続いて、MySQLの設定を行います。MySQLはRDBMS(Relational Data Base Management System)ですが、RDBMSが何かを説明すると一冊の本になってしまうので、ここでは書きません。RDBMSが何たるかが分からない方にとっては、以下の作業は呪文のように思えるかもしれませんが、とりあえずここに書いてある通りに作業をすれば大丈夫です。
 まずは、MySQLの設定ファイルである/etc/my.cnfに、文字コードの設定を追加します。CentOSのデフォルトの文字コードはUTF-8なので、ここではUTF-8でデータを格納するように設定します。当然ですが、Movable TypeとApacheが利用する文字コードも基本的にUTF-8で統一する必要がありますので注意してください。編集後の/etc/my.cnfは以下のようになります。
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
default-character-set=utf8

[client]
default-character-set=utf8

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

 続いて、データベースの作成を行います。MySQLが起動していない場合は手動で起動します。ちなみに、yumで導入した場合は、再起動をすれば自動的に起動するようになっているはずです。手動で起動した場合、以下のようなメッセージが出力されるはずです。
[root@www init.d]# ps -ef | grep mysql
root 26979 26904 0 14:59 pts/7 00:00:00 grep mysql
[root@www init.d]# /etc/rc.d/init.d/mysqld start
MySQL データベースを初期化中: Installing all prepared tables
Fill help tables

To start mysqld at boot time you have to copy support-files/mysql.server
to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h www.bflets.dyndns.org password 'new-password'
See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:
cd sql-bench ; perl run-all-tests

Please report any problems with the /usr/bin/mysqlbug script!

The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
[ OK ]
MySQL を起動中: [ OK ]
[root@www init.d]# ps -ef | grep mysql
root 27070 1 0 14:59 pts/7 00:00:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/etc/my.cnf --pid-file=/var/run/mysqld/mysqld.pid --log-error=/var/log/mysqld.log
mysql 27106 27070 1 14:59 pts/7 00:00:00 /usr/libexec/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-locking --socket=/var/lib/mysql/mysql.sock
root 27127 26904 0 15:00 pts/7 00:00:00 grep mysql

 途中に出力されているメッセージは、MySQLに組み込まれているデフォルトの管理者アカウントであるrootのパスワードが設定されていない、と言っています。MySQLのおけるrootは、Linuxにおけるrootと同じで、どのような操作でも許可されています。簡単にいえば、データベースの削除も可能なので、パスワードは必ず設定しておくようにしましょう。メッセージにも出ていますが、以下のコマンドで設定できます。XXXXXXXXの部分を、自分の設定したいパスワードに置き換えて実行してください(シングルクォーテーションはそのまま残す)。
[root@www init.d]# /usr/bin/mysqladmin -u root password 'XXXXXXXX'
[root@www init.d]# /usr/bin/mysqladmin -u root -h www.bflets.dyndns.org password 'XXXXXXXX'

 MySQLではユーザは"ユーザ名@ホスト名"という形で認識されます。このため、アクセスされる可能性があるホスト名別にパスワードの設定を行う必要があるということになります。1行目は"root@localhost"のパスワード設定を行っており、2行目は"root@www.bflets.dyndns.org"というユーザのパスワードを設定しています。
 続いて、Movable Typeが利用するデータベースの作成を行います。作成するデータベースの名前は、既存のものと重なりさえしなければどのような名前でも問題はありません。
[root@www init.d]# /usr/bin/mysqladmin -u root -p create MT4
Enter password:
[root@www init.d]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13 to server version: 5.0.22

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| MT4 |
| mysql |
| test |
+--------------------+
4 rows in set (0.01 sec)

 1行目のmysqladminというコマンドで、MT4という名前のデータベースを作成しています。-uはユーザ名を指定するオプション、-pはパスワードを利用することを指定するオプションです。パスワードそのものが引数に含まれていないため、コマンド実行後にパスワードの入力を求められます。
 2行目のmysqlというコマンドは、mysqld(MySQLのデーモン)に接続するためのクライアントプログラムを起動します。パスワードを入力するとmysql独自のプロンプトに入りますが、そこで"show databases"と入力すると、現存するデータベースの一覧が表示されます。先ほど作成したMT4というデータベースが存在していることが確認できます。最後にセミコロンが付いていますが、基本的にSQLのコマンドは必ず最後にセミコロンがつくので、忘れないようにしてください。
 続いて、Movable Typeが利用するユーザを作成します。
mysql> grant select,insert,update,delete,create,index,alter on MT4.* to MT4@localhost identified by 'XXXXXXXX';
Query OK, 0 rows affected (0.14 sec)

 grantとは"授ける"という意味を持つコマンドで、onの次に指定されているテーブル(ここではMT4.*、つまりMT4というデータベースに存在するすべてのテーブル)に対して、指定した権限を与えます。ここで与えているのはselect(データを選択する), insert(データを追加する), update(データを更新する), delete(データを削除する), index(索引を付ける), alter(データベースにかかわる設定変更を行う)という権限です。
 toの次に指定しているのがユーザで、ここではMT4@localhostというユーザです。MySQLの場合、ユーザを作成/削除するというコマンドはなく、任意のオブジェクトに対する権限を持つユーザとして未知のユーザを指定すると、その時点でその名前のユーザが作成されます。identified byの後には、MT4@localhostというユーザに対応するパスワードを指定します。
 作成したユーザを確認しておきます。
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select host, user, password from user;
+-----------------------+------+------------------+
| host | user | password |
+-----------------------+------+------------------+
| localhost | root | 6e4d238750f48f3e |
| www.bflets.dyndns.org | root | 6e4d238750f48f3e |
| www.bflets.dyndns.org | | |
| localhost | | |
| localhost | MT4 | 6e4d238750f48f3e |
+-----------------------+------+------------------+
5 rows in set (0.00 sec)
mysql> select host,db,user,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Index_priv,Alter_priv from db where db='MT4';
+-----------+-----+------+-------------+-------------+-------------+-------------+-------------+------------+------------+
| host | db | user | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Index_priv | Alter_priv |
+-----------+-----+------+-------------+-------------+-------------+-------------+-------------+------------+------------+
| localhost | MT4 | MT4 | Y | Y | Y | Y | Y | Y | Y |
+-----------+-----+------+-------------+-------------+-------------+-------------+-------------+------------+------------+
1 row in set (0.02 sec)

 use mysqlというコマンドは、mysqlという名前のデータベースをこれから利用するというコマンドです。その次の2つのコマンドについてはは書きませんが、MT4@localhostというユーザが存在すること、そのユーザがMT4というテーブルに対していくつかの権限を持っていることが確認できます。

Movable Type 4の展開と導入
 Movable Type 4の入手については特にここでは書きませんが、Six ApartのWebサイトで個人向けの無償ライセンスを入手することができます。ダウンロードして展開したファイルを、CGIが動作するディレクトリの下にコピーします。普通に展開しただけですが権限設定が適切にされているようだったので、cpの-pオプションを利用しています。
[ryu@www MT-4_0-ja]$ cd MT-4.0-ja/
[ryu@www MT-4.0-ja]$ cp -p -r ./* /var/www/cgi-bin/MT4/

 ただし、静的ファイルが収められているmt-staticというディレクトリだけは、CGIとして動作しません。httpd.confの設定を変更すれば静的なコンテンツをCGIのディレクトリに置くこともできますが、普通にHTMLのコンテンツが置かれているディレクトリに移動したほうが簡単でしょう。管理人のサーバには過去のバージョンのMovable Typeがある関係で、ちょっと名前を変更してコピーしています。
[ryu@www MT4]$ cp -r /var/www/cgi-bin/MT4/mt-static /var/www/html/mt4-static
[ryu@www MT4]$ rm -r /var/www/cgi-bin/MT4/mt-static

 ここまでの作業が終了したら、ブラウザを起動してMovable Typeを展開したディレクトリにあるmt.cgiにアクセスします。以下のようなページが表示されるはずです。



 管理人のmt-staticは先に書いたとおりhttp://www.bflets.dyndns.org/mt4-static/に置かれているので、そのパスを入力して"開始"を押下します。システムチェックの画面に遷移し、Perlモジュールの導入状況の確認が行われます。先に解説した事前作業を行った管理人の環境では、以下のようになりました。



 DBD::SQLiteなど3つのモジュールが未導入ということになっていますが、利用するのはMySQLなので問題ありません。"次へ"をクリックします。



 データベース名、ユーザ名、パスワードは、先にMySQLの設定の時に設定した内容を入力します。入力ができたら、"接続テスト"をクリックします。



 正常にテストが終了すると、上記のような画面になります。"次へ"をクリックします。



 メールの設定ですが、本音を言えば外部のアドレスに通知メールを送りたいのですが、ISPの制約上それができないので、Movable Typeが動作しているサーバ上にいるMTAに送るようにします。管理人はCentOSでPostfixを利用していますので、上記のような設定になっています。sendmail.postfixというのは、postfixがsendmailとの互換性を保つために用意されているラッパーで、sendmailと同じ引数を利用することができるものです。"テストメールを送信"をクリックして、ちゃんとメールが送信されるかどうかを確認します。



 指定したメールアドレスにメールが届いていることを確認したら、"次へ"をクリックします。



 ここまでの設定内容がmt-config.cgiというファイルに書き込まれました。"次へ"をクリックします。



 いきなり初期ユーザアカウントの作成画面になります。必要項目を入力したら"次へ"をクリックします。


 自宅サーバで導入する人の場合、最初のブログ = 唯一のブログになるのではないでしょうか。パスなどを間違えないように慎重に入力したら、"インストール"をクリックします。


 自動的にインストール処理が走るので、正常に終了したら終了です。