macOS mojaveにMovable Typeをインストールする

# 前提条件

- anyenvが入っていて、anyenv install plenvは出来ている。
- あんまり丁寧に解説はしないので自分で調べる気持ちがある笑。

# perlのインストール

MTの現在のシステム要求はここ > https://www.sixapart.jp/movabletype/features/features.html
から確認できます。で、perlは、

> Perl 5.10.1 以上（5.18.x を推奨 / 5.26.x 以上は未検証です。）

との事なので、5.18系の最新のを入れることにする。で、今回は自分のユーザーディレクトリの下にSiteというディレクトリをつくりそこのローカルにperlを入れれば、、、と思ったんだけど、これ前にPerlのパスの問題で結局OSXのグローバルのperlを置き換えることするのが手っ取り早いことを思いだした。その辺は後々検証しつつ、まずPerlを入れる。

```bash
$ plenv install -list
````
で確認したところ、5.18.4が最新が5.18系の最新のようなのでそれを入れる。というところでなんとなくmojaveのperlのバージョンを確認したら5.18.4だった、、、うーん面倒だからシステムのperlを使うかな、cpanmでモジュール入れたりするのが嫌だなぁ、と思ってたんだけどperlの環境はどうせMTくらいしか使わないからなぁ、、、。というわけで、今回はシステムのPerlをそのまま使うことにする。そうすればperlのパスの問題で悩まされないで済むので環境を作るの自体は楽になる。まぁcpanモジュールを色々システムのperlに入れることになるんだけど、結局それも分けたところで同じだし。

というわけでココは完了。

# Siteディレクトリを有効にする

これについては「mojave php apache enable」あたりでググると大体やり方はでてくる。はいこれ > https://qiita.com/kanejun/items/4a94300c2e363f75dc29 (どうもありがとうございます)。なのでこのあたりを参考にして有効にする。解説じゃないな、これは。

あ。MTをローカルで使うので、perlを有効にして、AddHandlerで.cgiでCGIスクリプトが動くように下記のあたりのコメントを外しておく。

```httpd.conf
LoadModule perl_module libexec/apache2/mod_perl.so
LoadModule cgi_module libexec/apache2/mod_cgi.so
AddHandler cgi-script .cgi
```

user.confは以下。

```user.conf
DocumentRoot "/Users/<USERNAME>/Sites/"
<Directory "/Users/<USERNAME>/Sites/">
    AllowOverride All
    Options Indexes FollowSymLinks Multiviews ExecCGI
    Require all granted
</Directory>
```

※ SetHandler cgi-script を入れていたけど、これだとperlのcgiは動いてもphpや通常のhtmlがInternal Server Errorを吐く。たしかにhandlarはすでにhttpd.confで書かれているのでここでなにも上書きすることはないのかも。

ちなみにリンク先ではvimで編集してますが、最近はもう面倒なのでatomのコマンドでatomで開いて編集しちゃいます。vimの使いかたすっかり忘れました、、、。なのでsudo vi となってるところを僕はsudo atomとやってます。

で、リンク先ではhttp://localhost でアクセス出来るとなってますが、基本的にはこれはhttp://localhost/~USERNAME/ でアクセスしておくほうが無難です。MTの設定なんかはそういう書きかたしといたほうがいいと思います。localhostの直下になにか入るとそれで環境が崩れてしまう(はず)なので。

Apache2のスタートはapachectlからやります。当然ですがapache=ウェブサーバをスタートしなければサイトは見えません。でそのコマンドについてはリンク先にある通りです。apachectlについても調べておくといいかもです。

## 余談1：PHPが有効になってるか確認する

Sitesの下にphpinfo.phpとかのファイルを作って下記の内容を書く。

```phpinfo.php
<?php
var_dump( phpinfo() );
?>
```

で、chmod 755 phpinfo.phpとかして実行権を与えて、 http://localhost/~USERNAME/phpinfo.php とかにアクセスしてphpの情報が見れればPHPは動いています。

## 余談2：PerlのCGIが動くか確認する。

PHPのときと同じ。

```perltest.cgi
#!/usr/bin/perl
print "Content-Type: text/html\n\n";
print "<html>";
print "<head><title>perltest</title></head>";
print "<body>";
print "<p>perltest is OK</p>";
print "</body>";
print "</html>";
exit;
```

こんなのを作ってchmodで実行権を755であたえて http:// でアクセスしたときにperltest is OKが表示されればオッケー(ソースも観てちゃんとソースが出力されてるかも見ましょう)。

### さらに余談。

perlのパスを間違えているといつまでも動きません。そんなときは、、、

```bash
$ which perl
```
とかやると場所を教えてくれるので、cgiスクリプトの最初の行がまちがっていないか確認しましょうね(ハマった笑)。


# MTをインストールする

開発者登録をすると開発者ラインセンスが貰えるということなので、ここ > https://www.sixapart.jp/inquiry/movabletype/developer.html から申し込みましょう。

暫くするとメールが来るのでメールに従って[シックス・アパート ユーザーサイト](https://mtuser.sixapart.jp/Form/Login.aspx)でアカウントを作ったりして、ライセンスを送られてきた開発者用ラインセンスを登録する。

するとMT7とMT6.5がダウンロード出来るので、それをダウンロード。ダウンロード出来たら先程からCGIだのPHPだのの動作確認をしていたSitesの下にでも入れましょう。で、[http://localhost/~USERNAME/MT-6.5/](http://localhost/~USERNAME/MT-6.5/)にアクセスします(7の場合は7のディレクトリにアクセスします)。

とりあえずMT6.5の方で話はすすめていきます。

上記にアクセスすると「Movable Typeへサインイン」というボタンがありますが、その下にある「また、Movable Type システム・チェック (mt-check.cgi) を実行し、環境が整ったことを確認してください。」のところからmt-check.cgiにアクセスしてperlのモジュールなどが揃っているか確認します。

で。実は必須モジュールはmojaveのperlには揃っていてDBもSQLite使えばとりあえず動いちゃうんですが、そんな環境で実際に公開することはないので入れられるモジュールは全部入れてみたいと思います。

まずDBはmysqlを後でダウンロードしてきて使いたいと思うので、DBD::mysqlを入れます。perlのモジュールを入れるにはcpanmというコマンドを使うので、まずはcpanmを入れましょう。

先にperlのバージョン違いを管理する為にplenvをインストールしている、のがこの文章の前提条件になってるのでplenvでcpanmをインストールしたいと思います。で、plenvは有効になっている任意のバージョンのperlにそれぞれcpanmをインストールすることが出来る(そしてcpanmはそれぞれにモジュールをインストールする)ので、perlのバージョンを確認したいと思います。Sitesの下で、

```bash
$ plenv version
```

として、この時にsystemと出てくれば、mojaveに始めから入っているperlが有効になっています。ではcpanmをインストールします。このとき今回はSystemのperlを使うことに決めましたので、sudoをつけて下記のコマンドを実行します。このあとのDBD::mysqlとかもsudoを付けて行います。plenvとかで別にいれたperlの場合はsudoがなくても書き込める領域なので必要ありません(が、そっちでやるとあとで一工夫必要なので今回はSystemのPerlにしたんですね)。

```bash
$ sudo plenv install-cpanm
```

でインストールします。一瞬で入るな。

## 余談3：MySQLをインストールする

```bash
$ brew install mysql
```

でインストールすると、、、

> We've installed your MySQL database without a root password. To secure it run:
    mysql_secure_installation

> MySQL is configured to only allow connections from localhost by default

> To connect run:
    mysql -uroot

>To have launchd start mysql now and restart at login:
  brew services start mysql
Or, if you don't want/need a background service you can just run:
  mysql.server start

というメッセージが出てきます。通常の公開サービスであれば mysql_secure_installation をやる必要がありますが、今回はローカルのテスト環境なのでパスワードなしでrootで接続できるままにしておきます。試しにmysqlを起動してmysqlのrootでdbの中に入ってみましょう。

```bash
$ mysql.server start
Starting MySQL
. SUCCESS! 
$ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.16 Homebrew

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```

こんな感じでDBの中に入れました。
(本当はDMGファイルから簡単インストールでやりたかったのですが、どういう訳かうまくいかなかったのでbrewで入れるように方針を変えました。。。mojave色々あるよな、、ほんと)。
ーーー余談おわりーーー

ではDBD::mysqlをインストールします(うえのmysql> に quit; を入れてリターンすればDBから出れます)。

```bash
$ sudo cpanm install DBD::mysql
```

ああ。なんだサクッと入るじゃないか、おれの30分を返せ。
というわけで次いくぞ(必ずしも入れないとならないわけじゃないので最低限のものだけ入れることにします)。次はmt-check.cgiによると、、、


### ーーー入れないーーー
> Crypt::SSLeay
Crypt::SSLeayはAOLやYahoo!などのSSLを利用するOpenIDのコメント投稿者を認証する場合、または Google Analytics を利用するために必要となります。

> Cache::Memcached
キャッシング機能としてmemcachedを利用する場合に必要となります。

> Crypt::DSA
コメント投稿時のサインインが高速になります。

> Cache::File
Yahoo! Japanによるコメント投稿者のOpenID認証を許可する場合に必要となります。

とのことなので今回はローカルに入れているのパス。

### ーーー入れるーーー
> Plack
PSGI環境下でmt.psgiを実行する場合に必要となります。

> CGI::PSGI
PSGI環境下でmt.psgiを実行する場合に必要となります。

> CGI::Parse::PSGI
PSGI環境下でmt.psgiを実行する場合に必要となります。

> XMLRPC::Transport::HTTP::Plack
PSGI環境下でmt.psgiを実行する場合に必要となります。

Plack、CGI::PSGI等、PSGI関係のは開発したプラグインをPSGI環境でもテストしたいので入れます(Plack入れるとたぶんこのあたりのははその時に入ってしまうのではないかな。結果：そうでもなかった笑)。

> XML::SAX::ExpatXS (version >= 1.3)
XML::SAX::ExpatXSのインストールは必須ではありません。バックアップデータの復元に必要となります。

これは入れておきましょう。

> Mozilla::CA
このモジュールは、Google Analytics などで SSL 証明書の検証に必要です。

あとで管理画面で文句言われるので入れておきましょう。mt-config.cgiに一言書けばこれ入れないでも済みますけどね。

GDとImagerとImage::MagickとIPC::Runはどれか一つでいいのですが、Image::Magick を良く入れたものなので入れてみます。とおもったけど、すごい大変だったのでImagerでさっと終らせることにしました。どうせ画像のリサイズしかやらねーんだし。

じゃ上からやっていきましょう。

```bash
$ sudo cpanm install Plack
```

```bash
$ sudo cpanm install CGI::PSGI
```

```bash
$ sudo cpanm install CGI::Parse::PSGI
```

```bash
$ sudo cpanm install XMLRPC::Transport::HTTP::Plack
```

ここでエラーになったのでログを観てみると、
> -> FAIL Installing the dependencies failed: Module 'XMLRPC::Transport::HTTP' is not installed

とのことなので、入れる。

```bash
$ sudo cpanm install XMLRPC::Transport::HTTP
```

再び、XMLRPC::Transport::HTTP::Plack を上記のコマンドで入れる。

続き

```bash
$ sudo cpanm install XML::SAX::ExpatXS
```

1.33が入ったようなのでオッケー。

で、さきほどもちょっと触れましたが、本来サムネイル生成はImage::Magickでやるのが綺麗、とか言われていますが、大抵インストールに手間取るので(すいません、手間取りました)、話の本筋ではないということでココはサクっとImagerを入れることにします。

```bash
$ sudo cpanm install Imager
```

というわけで入りました。
これ以外のモジュールについては必要に合せていれるのが良いとお思います。あー長かった。でもOSXのローカルに入れているので色々時間がかかる気がしますが、普通のUNIX環境ならもっと楽です。なのでMTのインストール面倒、とかあまり思わないで欲しい、、、。

# Movable Typeのセットアップ

前にも出てきた http://localhost/~USERNAME/MT-6.5/ を開きます。ここからはウィザード形式なので楽です。あ、このページが開けない人は sudo apachctl start と mysql.server start をやっておいてください。それぞれウェブサーバーの起動とDBの起動です。

1. "Movable Typeにサインイン" をクリック。
2. ”Language"で好きな言語を選ぶ(僕は日本語を選びましたのでそのつもりで読んでください)
3. "システムチェック"でモジュールが入ってることが確認できてるはずです。「オプションのPerlモジュールのうちいくつかが見つかりませんでした。」は先の入れる/入れないで仕分けしたもののうち入れてないものがあるためです。
4. "データベース設定"で、"MySQLデータベース(推奨)"を選択する
    5. この時点でDBの設定が出来てないとならないですのでDBを作ります。参照> https://www.movabletype.jp/documentation/mt6/database/mysql.html の「MySQLの設定」
    6. ターミナルで $ mysql -uroot でmysqlに入る
    7. 以下のようにしてDBを作成。文字コードはutf8
    8. mysql > create database mt character set utf8; でmtという名前のdbをつくる
    9. dbの入るユーザーとパスワードを以下のように設定
    10. mysql> create user 'mtuser'@'localhost' identified by 'mtpasswd'; (mtuserとmtpasswdは変えてください。少なくとも本番環境の人は)
    11. dbの権限を作成したユーザーに割り当てる
    12. mysql> grant all on mt.* to 'mtuser'@'localhost';
13. ここまで出来たら先程のところに情報を入れていきます。「データベース名」は"mt"です(これテストで色々ブログ増やすとかならず重複する名前になるのでルール決めておくといいですよ)。「ユーザー名」は"mtuser"(これは使い回せます)。「パスワード」は"mtpasswd"(これも使いまわせます。本番環境ではユーザー名もですが必ずユニークにして使い回さないように)。
14. 「メール設定」ではMTからのメール通知が受けられるようなアドレスを作りましょう。gmailだと example+hoge@gmail のように+hogeでエイリアスが作れるので便利です。「メール送信プログラム」はSendmailを選択します(テストメールをgmail宛に送ると大抵スパム扱いされてますので受信トレイではなくて迷惑メールトレイを探してみてください)。
15. で、最後に「Movable Type Proの構成ファイルを保存できませんでした。」これに大抵辺るので、面倒だしローカルの環境なのでmtのディレクトリのパーミションを777
にしてしまいましょう。僕場合なら $ chmod 777 ~/Sites/MT-6.5 です。
16. これでmt-config.cgiという設定ファイルが出来ました。あとはアカンウントの設定をします。ここは割愛。見ればわかるよね。
17. で、設定すると次に「サポートディレクトリが存在しないか、ウェブサーバーから書き込めません。サポートディレクトリの書き込み権限を確認してから、もう一度実行してください。」というのが出てきます。これはmtのディレクトリの下の、mt-static/support ディレクトリのことなので、$ chmod 777 ~/MT-6.5/mt-static/support でパーミションを変更します。
18. で先のページをリロードするとメッセージが消えると思います。
19. 「最初のウェブサイトを作成」で、名前、URL、書き出し先とテーマ(あとから変更できる)とタイムゾーン(日本になってるはず)を決めてインストールを押せば完了です。このときにウェブサイトパス(書き出し先)とウェブサイトURLが、Sites以下の同じ場所を差すようにしましょう。
    20. 例：ウェブサイトパスが、/Users/USERNAME/Sites/website なら、ウェブサイトURLは http://localhost/~USERNAME/websites/ になります。

というわけでインストールが出来たと思います。
管理画面に入るとさっそく「SSL 証明書の検証ができません。」というメッセージが出ていますが、内容を読んでよしなに対応してみてください。

ではテンプレートの数だけ色々ブログを立てたりしてみると以外といろんな使いかたできるんじゃないか? とか気付くのでやってみると言いですよ。

では!!