Fedora29にMT5.2.2を導入

Fedora29とMySQLのセットアップが完了したので、旧サーバーで使っていたMovableType5.2.2を導入しました。最新のOSにこの古いMTを導入成功した貴重な資料かもしれません。(MT5.2をまだ動かしている人ははたしてどれぐらいいるのだろう?)内容としては旧サーバーデータのリストアや、動作させる上で必要だった変更点など、苦労した覚書です。

1.MySQL8.0.135.5.62の環境に合わせる

旧サーバーの文字コード関連パラメータ変数の値を参照。filesystem以外は全てutf8となっている。

mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

新サーバーのMySQL8.0.13では下記のとおり、system以外はutf8mb4だった。

mysql> show variables like "chara%";
+--------------------------+--------------------------------------+
| Variable_name            | Value                                |
+--------------------------+--------------------------------------+
| character_set_client     | utf8mb4                              |
| character_set_connection | utf8mb4                              |
| character_set_database   | utf8mb4                              |
| character_set_filesystem | binary                               |
| character_set_results    | utf8mb4                              |
| character_set_server     | utf8mb4                              |
| character_set_system     | utf8                                 |
| character_sets_dir       | /usr/share/community-mysql/charsets/ |
+--------------------------+--------------------------------------+
8 rows in set (0.01 sec)

mysqlのutf8は4バイト文字表現できないので最近このコード指定となったそうだが、ここでは旧サーバーに合わせておかないとたぶん文字化けするので、全てutf8に変更するために、まず、
/****/community-mysql-server.cnf
mysqldセクションの末尾に追加

character-set-server=utf8 #mysqldセクションの末尾に追加
さらに同ファイルのclientセクションを下記の通り追加
[client]
default-character-set=utf8

mysqldを再起動して、再度show variables like "chara%";全てutf8になっていることを確認した。

2.リストア

MySQL5.5.62から下記でdumpしたデータを、yumでインストールされたMySQL8.0.13 にrestoreした。下記は旧サーバーのcronで動かしているDumpスクリプト

service mysqld stop
service mysqld start
mysqldump --user=**** --password=**** (リストアテーブル名) > /****/BK$(date +%Y%m%d%H%M%S).mysql

下記が新サーバーrestoreしたコマンド

# mysql --user=**** --password=**** (リストアテーブル名) -f < BK****.mysql
mysql: [Warning] Using a password on the command line interface can be insecure.

なんかワーニングが出てるけど成功。CSEでアクセスして日本語が正しく読めることを確認。 

3.mt.cgiにアクセス成功するまで

httpd.confの設定を旧サーバーと同等にしてからhttpdが正常に起動する事を確認後、旧サーバーでバックアップしておいたホームディレクトリ以下のファイル群を全てコピー。パーミッションを整備し、ブログ等の静的ファイルにアクセス成功。その後一旦httpd.confのmt.psgiによるdaemonへのproxy設定をコメントアウトしてから、mt/mt.cgiにアクセスするも失敗する。

DBIが無い→cpanmでインストール。成功。
DBD::mysqlが無い→cpanmでインストールするとconfigureエラー。

ここでエラーログをみると、mysql_configが見当たらないとのこと。
https://qiita.com/renjikari/items/b4d0aad990f8caa488ed
によると、mysql-community-serverパッケージを使っていると、なんとこのファイルは無いらしい。yumでまずインストール済みバージョンなどを確認し、さらにインストールできるパッケージを表示。develパッケージに含まれるファイルらしいので、yumでこれをインストール。

# yum install community-mysql-devel.x86_64

pcre2-utf16-10.32-3.fc29.x86_64がダウングレードされたようだが全て成功。
次に下記のようにcpanmのlookオプションでモジュールのダウンロードと解凍まで行った後、
解凍ディレクトリ(DBD-mysql-4.050)に入って、mysql_configの場所を指定してMakefile.PLでコンパイル。

# cpanm --look DBD::mysql
--> Working on DBD::mysql
・・・・・・・・・・・・・・・・・・・
Checking if your kit is complete...
Looks good
Using DBI 1.642 (for perl 5.028001 on x86_64-linux-thread-multi) installed in /usr/local/lib64/perl5/auto/DBI/
Generating a Unix-style Makefile
Writing Makefile for DBD::mysql
Writing MYMETA.yml and MYMETA.json
#  make && make test
cp lib/DBD/mysql/INSTALL.pod blib/lib/DBD/mysql/INSTALL.pod
cp lib/DBD/mysql.pm blib/lib/DBD/mysql.pm
cp lib/DBD/mysql/GetInfo.pm blib/lib/DBD/mysql/GetInfo.pm
cp lib/Bundle/DBD/mysql.pm blib/lib/Bundle/DBD/mysql.pm
・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Installing /usr/local/share/man/man3/DBD::mysql.3pm
Installing /usr/local/share/man/man3/DBD::mysql::INSTALL.3pm
Appending installation info to /usr/lib64/perl5/perllocal.pod

これでmt.cgiにアクセスするとログイン画面が出てログイン成功。

4.mt.psgiが動作するまで

webkoza.comはmtをpsgiで動作させているので、httpd.confのmt.psgiへのproxy設定を復活させるも、やはりうまくいかないわけです。mt-config.cgiを一旦リネームしてindex.htmlからmt-check.cgiを実行してモジュール確認。どうやらpsgiに必要なXMLRPC::Transport::HTTP::Plackが無いらしい。これをインストールしたときSOAP関連以外はインストール成功していたはずなのに。。再度cpanmでインストールしてみると、全て成功した模様。ここでmt.psgiを動かしているwebkoza_mt.serviseのstatusを確認してみると、エラーが多数出ていた

systemctl status webkoza_mt.servise

●Escape.pmについてのエラー

\C no longer supported in regex; marked by <-- HERE in m/%s/
・・・・・・・・・・・・・・・・・・・・・・・・・・・・

use strictをやめてもだめ。調べてみるとどうもperl5.24から仕様が変わって、キャラクタークラス\Cは廃止されたため正規表現として使用できなくなったとのこと。5.23以前では警告扱いだった模様。旧サーバーのperlは5.18だった。perlの互換性の問題となると他にもまだまだ出てくる可能性があるか。。心が折れそうになるが、何とか継続。このファイルはmt/extlib/URI/にコピーされたperl標準モジュールのようなので、cpanmでインストールされている最新のEscape.pmをこの場所にコピーして、webkoza_mt.servise再起動したところ、statusでこのモジュールのエラーは無くなった!

●PSGI.pmについてのエラー

このモジュール関連のエラーも多数!
MT::PSGI.pmは、開いてみるとMT用にかなりモディファイされたオリジナル。perl標準のCGI::PSGIと比較修正するのは難しそうなので、GitHubから最新のMT用のファイルを落として来て規定のmt/lib/MT/に上書きコピー。
webkoza_mt.servise再起動したところ、status見てもワーニングは有るもののエラーは無くなった!

httpd.confでmtのPSGI用ポートのproxy設定を復活させてhttpd再起動。mtの管理ページに無事アクセスできた!動きが速い!

5.MultiCounterXが動くまで

mt.psgiが動作しても、オリジナルのMultiCounterXプラグインによる画像カウンターは表示されません。まずGDについて、yumでは成功したはずだが、cpanmでインストールするとエラーとなることが判明。ログファイルを見るとgdlibが無いと。。昔の記録を調べているとgd-develをインストールする必要があるようなので、

# yum install gd gd-devel

この後cpanmでGDをインストールしたら成功した。

それでもだめなので、apacheのエラーログを確認していると、下記URLと同じlib/MT/App/CMS.pmのエラーを発見。これもperlの互換性の問題のようだ。
http://www.hirno.net/~wind/blog/2018/04/movabletypeperl-526.html

Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/{{ <-- HERE support}}/?/ at lib/MT/App/CMS.pm line 4966.

最初の中カッコ2つをエスケープして解消。それでも表示されない状態継続。しかし4でwebkoza_mt.serviseが正常に動作するようになると、カウンターの枠だけは表示されるようになった。試しにクリックしてアクセス数グラフを表示してみるとタイトルの日本語が文字化けしていた。
ソースコードを見直してみて、フォントファイルが無い事に気づく。VLGothicファイルを落として /usr/share/fonts/ にコピー。ディレクトリ名をソースコードに合わせて変更
VLGothic→vlgothic
これでwebkoza_psgi2.serviceを再起動したら無事カウンターイメージ表示した!

再度mt.psgiを無効にしてみるとまたカウンター表示されなくなった。これも原因がわかるのに時間かかったが、生成されるカウント値ファイルのパーミッションの問題だった。psgiが生成したファイルにcgiがアクセスできない事が原因。cgiとpsgiでは動作権限が違うために起きる現象だった。これはパーミッションを適切に設定し直して解決した。