|
About this page
カテゴリー Movable Typeに属する記事の一覧ページです。
現在このカテゴリーには27本の記事があります。 カテゴリー Movable Typeの説明: MovableTypeについて、インストールメモや工夫したことを書いてあります。 Latest 5 Entries
MovableType 2.661をapache2+mod_perl2で動作させるリクエストを戴きましたので、MovableType 2.661(以下MT 2.661)をapache2+mod_perl2上で動作させるまでに行った記録を記しておこうと思います。おそらく相当ニッチな要望だと思いますが(笑)。 コトの経緯を軽く説明しておきますと、MT 2.661はかなり古いCMSですが、このサイトのMT 2.661は自分の使い勝手がいいようにかなり改造を施してしまったので、なかなか最新バージョンに移ろうという気になれないでいました。そうこうしているうちにサーバーを最近立て替えたこともあり、以前のapache1.3 + mod_perl1.3環境から卒業してapache2+mod_perl2に対応する必要がてできました。その後MT自体は進化をとげメジャーバージョンが4になり、新しい環境にも標準で対応しているようなのですが、やはり使い慣れたMT 2.661を使い続けたい、だから移植しよう、というのがこの記事の動機となっています。 とりあえずapache1.3+mod_per1.3からapache2+mod_perl2にl変更するにあたってポイントとなる点は大きく2つに大別できると思います。 1つはapache2では並行動作のモードが複雑になった(従来のprefork動作以外にもmulti-thread動作等が選べる)ため、その上で動くmod_perl2がスクリプトを起動方法が変更になったようです。特にスクリプトを書く側にとって深刻な点は、起動時のディレクトリが必ずしもスクリプトの存在するディレクトリにならないことです。MT 2.661においても例外ではなく、MT 2.661では動作に必要となるサブモジュールの位置を、スクリプトが存在するディレクトリからの相対パスで求めているため、これは非常に大きな問題となります。先達はchdirでなんとか解決しようとされたり、apache2の構成方法にもよりますが従来どおりの動作が期待されるPrefork版のPerlハンドラを渡して解決しようとされたりしています(chdirが好ましくないことやPrefork版モジュールは本家mod_perl2のサイトで言及されています)。 もう一つの問題はmod_perl2でAPIの名前や動作がかなり変更されたことです。名前が変更されたことは書き換えで対応すればよいようで、これも先達によって『MT3.3をmod_perl2で動かすpatch(その1)』等で書き換え方法が公開されています。動作の変更点としては、MT 2.661で状態遷移を記録するために使用していたApache::Request::paramというものがありますが、Apache2::Request::paramでは変数を足すことができなくなった(『Apache2::Request PORTING from 1.X』参照)のが響いています。 以上2点を踏まえて、apache2+mod_perl2上でMT 2.661を動作するようにしました。変更点をまとめたdiffファイル(patchコマンドで適用可能形式)を公開するとともに、apache2+mod_perl2側の設定を以下に示します。 PerlSetEnv MT_DIR /usr/local/share/web/MovableType/
PerlSetEnv MTConfig /usr/local/share/web/MovableType/mt.cfg Alias /mt/ "/where/to/mt/" PerlModule ModPerl::Registry PerlModule Apache::DBI <Directory "/where/to/mt/"> <Files *.cgi> SetHandler perl-script PerlResponseHandler ModPerl::Registry PerlSendHeader Off </Files> </Directory> <Location /mt> Options ExecCGI Order Allow,Deny Allow from all </Location> <Location /mt/db> Order Deny,Allow Deny from all </Location> 1つ目の問題点、実行時のディレクトリの問題については環境変数渡し+@INCをスクリプト内で変更することでサブモジュールを見えるようにしました。@INCの変更はBEGINブロックで対応しないようにしましたが、これは『[perl]ModPerl::{PerlRun,Registry,RegistryPrefork}でのカレントディレクトリ、BEGINブロック、@INCの扱いメモ』に基づいています。 2つ目の問題点は、先達の書き換え方法、並びにApache2::Requestに対して、paramが書き換え可能なApache2::RequestSubclassというラッパークラスを定義することで対応しました。このアイデアは『Apache2::Request::param で set / add できない』より戴きました。 問題点がでてきたら変更を考えていますが、以上の作業で現在のところ問題なく動作しています。 ※ファイルのアップロードでこけることがありました。またしてもメソッド名が変更(size => upload_size、fh => upload_fh)になっていたようです。上記diffに追加してMT-2.661.CMS.pm.diffも mt/lib/MT/App/CMS.pm に対して適用してください。 トラックバックでBus Error (10)久しぶりのサーバやサイトの管理をしてみました。Webサーバのバージョンをあげてみたりとか、リンク切れを修正してみたりとか、見た目的には何も変わらないので非常に報われない作業です。そんな中でWebサーバのエラーログを見たのですが、あまり見たくないエラーがありました。ありえない領域をアクセスした際に発生するBus Errorというエラーが。 このサイトにもしトラックバックを送られていた方がいたら本当にごめんなさい。現在鋭意作業中ですが、また解決には至っていません。以下、その闘いの記録です。 ※その後、strstr()の問題とわかり、mod_encodingのソースを修正することで解決しました。 続きを読む "トラックバックでBus Error (10)"英語コメントスパムへの対処今までコメントスパムの対処方法として『HTMLタグを徹底的に認めない』や『禁止IPに登録されたのをわからなくする』、『MD5等を使ってコメント欄を偽装する(こちらは記事にしていません)』などを行ってきましたが、先日等々大量の英語スパムに見回れました。仕方がないので、英語スパムを駆除する方法を考えることにしました。 方法としては、日本語の文字が入っていないものをはじく方法を採用することにしました。特定の人が投稿できなくなる可能性があることに抵抗があったため、今までやらなかったのですが、とうとう諦めることにしました。 どうやらこの手の対策はプラグインでできるようですが、それらのプラグインはMovableType 3を要求しているようです。このサイトは未だにMovableType 2.661で運営されているので、動作するかわかりません。 そこで、いつものことながらソースをハックします。 use Jcode;
すると$str_encodingに英語のみの場合は'ascii'が、日本語が含まれる場合は'UTF-8'等が代入されます。詳しくはJcodeのマニュアルをどうぞ。my $str_encoding = getcode($str); そこで以下の改造をしました。 /path/to/MT/lib/MT/App/Comments.pm(MT2.661だと162行目付近)に追加 use Jcode;
my $comment_encoding = getcode($q->param('text')); if ($comment_encoding eq 'ascii') { return $app->redirect($entry->permalink); } これで英語コメントを無条件にはじけます。 Trackback SPAMがやってきた最近トラックバックスパムがめちゃくちゃ来まくっています。最終的にはコメントスパムのときと同じようにソースを改変(うちはこんなやり方をしています、効果絶大)することによって解決をはかりたいと思っていますが、なかなかよいアイデアが思いつきません。とりあえず巷にはコメントと同じように、連続投稿を禁止するパッチはあるようなのでそれをしましたが、それだけでは納得がいかないので、一時的にmt-tb.cgiを使えない状態にしました。従って現在Trackback、ならびにTrackbackされたURLへ飛ぶことが出来なくなっています。ご不便をおかけします。(→2/13、対策を施し復活させました。) このトラックバックスパムというのは今回がはじめてきたのですが、どうやらコメントスパムと同じ系統のようですね。問題のスパムのタイトルは『online casino』やらで、これは今まできたことのあるコメントスパムのタイトルと一致します。1時間に200回近くTrackback pingしてきました。Trackbackを受信するごとにリビルドする関係上、スパムというよりかDoS攻撃のような感じです。かなり頭にきています…。 とりあえず、コメントスパムと違ってトラックバックスパムはMovable Typeの管理画面から直接的に消すことができないので大変ですがデータベースをいじれば簡単に大量に消すことが可能です(データベースを直にいじることは危険をともないます、自信がない場合はお勧めできませんし、またここに書いてある方法を行うことも自己責任で願います)。 $ psql -d mtDB -U mtdbuser
(ログイン、以下mtDBではじまる行が入力行です) mtDB=> ¥dt # データベースのテーブル一覧が表示される、その中のmt_tbpingにトラックバックされた情報が詰まっている mtDB=> SELECT * FROM mt_tbping; # これでトラックバックされた情報の一覧をみることができる mtDB=> DELETE FROM mt_tbping WHERE tbping_id = 100; # 例えばIDが100のトラックバックを消してみる、IDとは上のSELECT文で一番左に表示された数字 mtDB=> DELETE FROM mt_tbping WHERE tbping_id >= 101; # 例2、IDが101以降のトラックバックを消してみる mtDB=> ¥q # psqlを終了する この後管理画面でリビルドをすれば反映されます。 コメントスパム根絶?ある対策をしてからコメントスパムがまったく来なくなりました。というかはじき返しているみたいです。 その対策とは単純でHTMLタグをコメントとして認めない、ただそれだけです。ただしやるからには方法は徹底しました。Movable Typeに標準で備わっているHTML投稿禁止機能を用いるのではなく(これは投稿されたコメントからHTMLのタグを排除したものが投稿されてしまいます)、コードをハックしてHTMLタグが使われた場合は投稿を許さずに修正を要求する、というように改造しました。 スパマーとしては<a href="">のリンクをつけられないとコメントスパムする意味がないといことなのでしょうか? 方法は続きをどうぞ。 続きを読む "コメントスパム根絶?"Old Entries @ Movable Type
| |