Movable Type 3.34 → 4.27

厚揚げ劇場」という犬猫亀ブログを書いてたりするんですが、ここんとこスパムコメントがスゴいんですよ。1日に数百件とか。しかも過去のあらゆるエントリーにまんべんなくコメントをつけてくれるファンぶり。

いままでもスパムコメントが大量につくことがあっても、ほとんどがスパムフィルタに引っかかるコメントで放っておいても害がない上に、2、3日くらいで書き込みがなくなるんですが、今回のスパムはフィルタをかいくぐって表示される上に、2週間以上書き込みがつづいててさすがにマズいなってことで対策を練ることにしました。

ブログはMovableTypeを使ってるんだけど、バージョンが3.34なのね。
で、4にはMovableType自体にCAPTCHAがついてるってんでアップデートすることにしました。

知らない間にMovableTypeって5が出てるんだね。
しかも5からはSQLiteをサポートしないって、なにそれヒドい。あ、SQLite使ってるんですけどね。私は。
MySQLまで用意するのは面倒なので、今回はMovableType4まであげることを目標とします。ま、CAPTCHAが使えればいいわけだし。

MovableType4.27をダウンロードして、設置してみました。

が、いきなりカテゴリ・アーカイブの再構築でエラーが発生。
Movable Type 再構築エラー

調べてみるとエントリー数が多いと発生するみたいです。
あ、ここを参考にさせてもらったんですが。

MTが突然、構築エラーになった(ゴルフバカのきまぐれブログ)

解決策も載ってるんですが、同じことしても解決できない。。うーむ、と悩んでハッと気付きました。このブログ、カテゴリ・アーカイブ使ってないじゃん。と。
ってことでこの問題は未解決のまま、カテゴリ・アーカイブを構築しない設定だけして済ますことにしました。

で、次の問題は再構築したブログにアクセスするとエラーが表示されてしまいます。
パーミッションくさいなーと思って構築したファイルのパーミッションを見てみると「666」になってました。パーミッションを「644」に変更するとアクセスできます。
が、MovableTypeに出力するファイルのパーミッションを設定する箇所が見当たりません。

実は、3.xの頃はmt-config.cgiにデフォルトでパーミッションの指定が載ってたんですが、4.xのmt-config.cgiからは消えたみたいです。
とはいえ、パーミッションの記載をすると有効になるみたいでこの問題は解決できました。
mt-config.cgiに以下のように記載を追記しました。

DBUmask 0022
HTMLUmask 0022
UploadUmask 0022
DirUmask 0022

これはデフォルト「666」で出力されるパーミションに「022」をマスクすることで「644」にしている、という意味のようです。すみません、よく分かってないけど、これでうまく行きました。

これで3.34でやっていたことと同じ状態を作れました。
あとは本来の目的であるCAPTCHAをつけるだけです。

これは「設定 > コメント」に「CAPTCHAプロバイダ」という項目があるので、「Movable Type 既定」を選ぶだけです。
Image::Magickがインストールされている必要がありますが、これはインストール済みでした。

が、CAPTCHAのイメージも入力欄も出ない・・・なんで?

これも調べて分かったんですが、テンプレートが古くて置換用のタグが埋め込まれてませんでした。
<p id="comments-open-text">
  <label for="comment-text">コメント: <MTIfAllowCommentHTML>(スタイル用のHTMLタグが使えます)</MTIfAllowCommentHTML></label>
  <textarea id="comment-text" name="text" rows="15" cols="50"></textarea>
  </p>

  <div id="comments-open-captcha"><$mt:CaptchaFields$></div>

  <div id="comments-open-footer" class="comments-open-footer">
  <input type="submit" accesskey="v" name="preview" id="comment-preview" value="確認" />
  <input type="submit" accesskey="s" name="post" id="comment-post" value="投稿" />
  </div>

テンプレートのコメント欄に赤字のタグを追記することで、無事CAPTCHAを埋め込むことができました。

Movable Typeのアップデートするだけなのに、思った以上に時間がかかりました。。
これでスパムコメントが根絶できればいいんですが。。