2005.10.16

MT-3.2とpost2blog・・・(Movabletype)

MT-3.2のスタイル・シートの編集に苦しみながらも、何とか望みどおりのレベルに達したので、以前書いた軽量化のためにJavaScriptを使ってサイドパネル要素を外に追い出すことも試みた。
やり方、は同じだがTagの名前の違いと構造上の違いを意識して行えば、困難は無い。
次にpost2ブログでメール(携帯電話メールを含む)での投稿を試みたが、ここではまり込んでしまった。

以前から運用しているpost2blogをコピーして、URLを変えて使ったら、エラーも出ないのに、何も起こらず 当然blog画面にも反映されない。
URLとblog_idを運用している別のサーバにしたら、ちゃんと動くのでpost2blogは正常と思える。
さんざん、いじりまわしたがメールが受け付けられない。 ネットでしらべたらMT-3.2ではパスワードは通常のログイン用とAPIで受け付け用が別に用意する必要があることが分った。
メイン・メニューで投稿者を選び、自分のログイン名をクリックしたら、一番下にAPIパスワードを設定する入力ボックスが現れた。
これを設定して、めでたしめでたし、無事メール投稿が出来るようになった。


MT-3.2のインストール・・・(Movabletype)

Movabletype 3.2が出て、スパム対策のSpamFighterと言うのが実装されたとのこと。
スパムには悩まされていることでもあるし、インストールしてみるかと、色々と触ってみたので、しばらくはこのことについて書くことにする。

1. 前準備とインストール

(1) まず、現在運用しているMovabletype 3.17の動いているサーバとは別のサーバを用意し、運用状態のファイルをコピーして新たにMT-3.17の環境を作った。
(2) ここで、mt.cgiの動いているDirectryにMovabletype 3.2のダウンロードして解凍して入れ、Browserからmt.cgiにアクセスすると、upgradeする画面になり、簡単に移行できる。

2. 新規インストール

(1) しかし、余計な橋渡しのcgiファイルが幾つか出来て、あまり良い感じがしないので、MT Directry内のファイルを全て消して新規にインストールしてみた。
インストールすると言っても解凍ファイルを全て移すだけで、あとはMT 3.17ではmt.cfgファイルだったのが、mt-config.cgiに名前が変わっているので、これを編集する。
(2) 設定はCGIPathとDataSourceの位置(私は./db)ならびに文字コード(私はEUC)ぐらいである。
そして、mt.cgiをBrowerからアクセスしMt-3.17と同じように設定して行く。
(3) さて、ここでMT-3.17のエントリーをexportしてこれをimportして移行を試みた。
移行は簡単だが、サーバ名が違っているのでexportしたファイルに含まれるサーバ名は移行先のサーバ名にEditorなどで置換修正しておく必要がある。
うまく行ったので、スタイルシートもコピーしてと思ったが、メイン・インデックスのTagの名前がまるで違っているし、えらく構造化を意識した書き方になっている。

3. コラムデザイン

(1) それでは、MT-3.2のスタイル・シートをいじくって旧と同じようなデザインにすればよいと思ったが、これが大変。
もともと、標準で用意されているスタイル・シートはcolumnの数が1、2、3に対応しているのみならず、moblogにも使えるようになっているようで、えらく複雑だ。
(2) 標準で表示されるのは、右側にサイドパネルがある2コラムタイプだが、移したいのは3コラムのものなので、これを実現する必要がある。
(3) MT-32ではメイン・インデックスやスタイル・シートなどの設定ファイルもバックアップが簡単に取れるようになったので、メイン・インデックスをマークして選択画面の右上にあるテキストボックスでテンプレートを更新するを選んでバックアップしておき、引き続き編集する。
(4) まず、メイン・インデックスを開いてみると、<body class=”layout-two-column-right”>となっているので、<body class=”layout-three-column”>とする。
(5) 次に、メイン・インデックスの構造を見ると、画面の上にバナーを配置しバナーの下に配置する要素を左から”alpha”, “beta”, “gamma”と要素名をつけているようなので、”beta”の要素をコピーして<div id=”alpha”>の前に貼り付け、新たに これを”alpha”とする(<div id=”beta”> → <div id=”alpha”>)。
(6) そして、以前の”alpha”→”beta”, “beta→”gamma”と名前をずらす。
これで、サイトの確認で見ると見事に3コラム表示になっている。

ここまでは簡単だが、旧画面を再現するためにスタイル・シートをいじりだすと、まるで悪夢です。 まぁー、頑張ってやるしかないのですが・・・・
3コラムで旧画面類似の表示を実現するのに、およそ1日潰してしまったが、構造に対する理解も深まったので、もう1つの方は、スタイル・シートを白紙の状態から自分で書いてしまった。 この方が、よほどスッキリするし、早かった。
まだ、本blogは3.17版だが、3.2に向けての第一歩が終わった。
ここには書かなかったが、MT-3_2-ja.tar.gzをダウンロードして作業進めたとき、ブログの再構築で異常にメモリーの使用量が増えて(リミットの512MBまで行った)cgiがエラーする問題が生じた。 直ぐに2版(MT-3_2-ja-2.tar.gz)がでたので、入れなおす必要もあった。


2005.10.02

namazuによる複数区分の検索の設定・・・(etc)

筆者は自宅のサーバで複数のメーリングシステムを運用しているが、メンバーも異なり、MLグループ間での関連も無いことから、MLで蓄積されたメールアーカイブも、2つのグループ間で完全に独立して検索する必要があり、namazuを使ってその構築を行った。
namazuはpackageが用意されているので簡単に入れられる。
FreeBSDでは/usr/local/etc/namazuに設定ファイルのsampleのmknmzrc-sampleとnamazurc-sampleが入っているので、これらをmknmzrcとnamazurcとしてコピーし、編集する。

# cd /usr/local/etc/namazu
# cp mknmzrc-sample mknmzrc
# cp namazurc-sample namazurc

(1) mknmzrcの編集

mknmzrcの編集は以下の2つの#を取って行を有効にするだけでよい。
# $KAKASI = “module_kakasi”;
# $WAKATI = $KAKASI;

(2) namazurcの編集

Indexファイルを入れるフォルダを作る必要があるので、

# mkdir index
# mkdir index/abc
# mkdir index/xyz

abcとxyzは、2つの別々のindexファイルを作るための準備である。
そして、namazurcを編集

# vi namazurc

として、編集するが、編集は以下の3行のみでよい。

Index         /usr/local/etc/namazu/index
Replace       /web/data/  http://自分のサーバのURL/
Lang           ja

(3) cronで実行の準備

今後cronで自動的にindexファイルを更新させるため以下のような内容のファイルをnamazuindexのファイル名で作り、/usr/local/binに入れて実行権限を与えておく。

#!/bin/sh
export LANG=ja
/usr/local/bin/mknmz -O /usr/local/etc/namazu/index/abc
/web/data/ml/abc
/usr/local/bin/mknmz -O /usr/local/etc/namazu/index/xyz
/web/data/xyz/ml

/web/data/ml/abcと/web/data/xyz/mlはそれぞれのメーリングリストのメール保存アーカイブの場所である。
これで、namazuindexをroot権限で実行すれば、/usr/local/etc/namazu/index/abcと・・・index/xyzにindexファイルが作られる。

(4) webページからの検索

/usr/local/libexecにあるnamazu.cgiをcgi-binディレクトリーにコピーし実行権限を与えておく。
これで全ての準備が整ったので、Webページで検索のためのformを作るが、以下のような内容とする。

<form METHOD="GET" action=/cgi-bin/namazu.cgi>
<strong>検索:</strong>
<input size=40 value="" name=key>
<input type=submit value=Search! name=submit>
<input type=hidden value="abc" name="idxname">
<a href="/cgi-bin/namazu.cgi?idxname=abc">検索方法</a>

xyzの検索のページは当然ながら上記のabcaをxyzとすればよい。
あとは、cronでの自動実行のため以下の内容をcrontabに追加する。 この例では毎夜の夜中の2時の実行であるが、後ろに
| /usr/local/bin/nkf -j が付いているのは、実行結果のログをメールで受け取ったときにメーラーで読むためjisコードでログするためである。
0 2 * * * /usr/local/bin/namazuindex | /usr/local/bin/nkf -j


2005.09.05

1つのIPで2台のサーバを動かす・・・(Apache)

家でサーバを立てるときは、Dynamic DNSの仕組みを利用するのが経済的だし、頑張って固定IPを確保してもIPアドレスを一つ確保するのが良いところで、複数のIPアドレスを貰うと維持費も掛かるので経済的に余裕がないと踏ん切りがつかない。
筆者も固定IPを持っているが、1つのみである。
ところが、たとえば息子も自前のサーバを立てたいと言い出すと、IPは1つでも2台のサーバは立てられないものかと考える。
ネットで調べるとdelegateを使ってIP1つでも名前で振り分けられると書いてある。
しかし、Apacheのhttpd.confでVirtual Hostを設定することで可能で簡単である。
そこで、以下に1つのIPで2つのサーバを立てる方法を書くことにする。
筆者の自宅ではflets光でルターのローカルアドレスは192.168.1.1でサーバはローカルのIPアドレスは192.168.1.5を振ってある。
そしてルータで全てのポートナンバーで外部からくるパケットは192.168.1.5のサーバに向けている。
今回、ローカルのIPアドレス192.168.1.6を持つサーバを追加したが、Dynamic DNSを利用させてもらってuls.fam.cxのサーバ名とプロバイダから貰ったuls.flets.cds.ne.jpの名前の2つがあるので、uls.fam.cxを192.168.1.5のアクセスに使い、uls.flets.cds.ne.jpを192.168.1.6とすることにした。
(下図参照)
network.jpg
Apacheの設定ファイルであるhttpd.confの最後に以下を追加する。

NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin nakamura@uls.fam.cx
DocumentRoot /web/data
ServerName uls.flets.cds.ne.jp
ErrorLog /var/log/error_log
ProxyPass  /  http://192.168.1.6/
ProxyPassReverse  /  http://192.168.1.6/
</VirtualHost>

これだけである。
ブラウザでhttp://uls.fam.cx/でアクセスすると192.168.1.5のサーバにアクセスでき、http://uls.flets.cds.ne.jp/とすると192.168.1.6のサーバにアクセスできる。


2005.04.27

コメントスパムが来た・・・(Movabletype)

私のページなど、見にくる人も少なくComment Spamなど関係無いとタカを括っていたら、ついにやってきた。
私のBlogより、私のところのサーバで運営して活発な書き込みを行っておられる方がおられるが、聞いてみたらいっぱい来るのを一生懸命削除していたとのこと。
気が付かず、申し訳ないことをした。
ということで、対策をほどこした。 と、言っても既に色々な手法がネットで述べられているので、そのまま使わせていただいただけだ。 有名サイトではもっと手の込んだ方法も必要なのだろうが、当サーバでは代表的な方法で一応止まったようだ。
防備録として、以下に書いておくが、考え方は自動でcomment.cgiにアクセスして投稿をするだけでは無効でちゃんとコメントの入力欄に書き込むことが必要(当然のこと)とするものである。

1.個別エントリーに追加

個別エントリーを開いて以下の赤字部分を追加する。
なお、nameとvalueの”YAMETEYO”は各自好きな語句を入れればよい。

<input type="radio" id="remember" onclick="rememberMe(this.form)"
name="bakecookie" /><label for="remember">はい</label>
<input type="radio"
id="forget" name="bakecookie" onclick="forgetMe(this.form)"
value="Forget Info" style="margin-left: 15px;" />
<label for="forget">いいえ</label>
<input type="hidden" name="YAMETEYO" value="YAMETEYO" >
<br style="clear: both;" />

2.その他の編集対象ファイル

以下の4つのファイルが編集対象

lib/MT/default-templates.pl
php/lib/function.MTCommentFields.php
lib/MT/Template/Context.pm
lib/MT/App/Comments.pm

(1) lib/MT/default-templates.pl の2カ所 (1140行付近, 編集後の1214行付近)

以下のように赤字部分を挿入

<input type="radio" id="remember"
name="bakecookie" onclick="rememberMe(this.form)" />
<label for="remember"><MT_TRANS phrase="Yes"></label>
<input type="radio" id="forget" name="bakecookie"
onclick="forgetMe(this.form)"
value="Forget Info" style="margin-left: 15px;" />
<label for="forget"><MT_TRANS phrase="No"></label>
<input type="hidden" name="YAMETEYO" value="YAMETEYO" >
<br style="clear: both;" />

同様に
lib/MT/Template/Context.pm の2カ所 (1244行付近、編集後の1332行付近)
php/lib/function.MTCommentFields.php の2カ所 (96行付近、編集後の165行付近)
も修正。

3.lib/MT/App/Comments.pm の編集

lib/MT/App/Comments.pm の 243行付近(編集後)に赤字部分を追加。
最初の赤字の部分は日本語を含まないコメントを排除するために付け加えたもので、2つ目がcomment.cgiのみを使った投稿防止です。

 if (!$q->param('text')) {
return $app->handle_error($app->translate("Comment text is required."));
}
if($q->param('text') !~ m/[x80-xff]/){
return $app->handle_error($app->translate("Can not accept
your comment."));
}
if (!$q->param('YAMETEYO')) {
return $app->handle_error("Please send comment via comment form.");
}
my ($comment, $commenter) = _make_comment($app, $entry);

これでブログを再構築して完了。


« Previous | Next »