2005.10.16

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);

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


2005.03.11

MTのリンク支援(決定版)・・・(Movabletype)

先にMTPerlScriptというプラグインを使ってリンクを容易にする方法を書いた。

しかし、どうもスマートさに欠けるし、ホームページのhtmlも知らないし覚える気もなく、それでホームページを作るのを諦めていたが、Blogならhtmlを覚える必要も無いと聞いたのでやってみようという気になった人達には抵抗感を払拭できないものであった。

編集画面を開いて記事を書き込むのさえ抵抗感があり、投稿はほとんどメール送信によって行って編集画面での編集はあくまでも補助的にと思っている人達もいる。
こういう人達にも受け入れられるツールという意識で作成に乗り出した。

1. 操作のインターフェイス

違和感を感じさせないために、まず(図-1)のように編集画面のサイドメニューの「ファイルのアップロード」の下に「リンクの編集」のメニューを追加した。

menu.jpg
(図-1 サイドメニュー)

サイドメニューの表示のテンプレートは/MT/cms/tmpl/header.tmplです。
このheader.tmplのなかで、ファイルのアップロードの記述の次にこれをコピーして修正を加え「リンクの編集」への入り口を作る。

<TMPL_IF NAME=CAN_UPLOAD>

<li><a<TMPL_IF NAME=NAV_UPLOAD> class="here"</TMPL_IF> 
id="nav-upload" title="<MT_TRANS phrase="Upload File">" 
href="#" onclick="window.open('<TMPL_VAR NAME=
SCRIPT_URL>?__mode=
start_upload&
blog_id=<TMPL_VAR NAME=BLOG_ID>', 'upload', 'width=400,
height=450,resizable=yes')"><MT_TRANS phrase=
"Upload File"></a></li>

</TMPL_IF>

<TMPL_IF NAME=CAN_UPLOAD>
<li><a<TMPL_IF NAME=NAV_UPLOAD> class="here" </TMPL_IF>
 id="nav-link" title="リンクの編集" href="#" onclick=
"window.open('<TMPL_VAR NAME=STATIC_URI>link.cgi?blog_id=
<TMPL_VAR NAME=BLOG_ID>',
 'link', 'width=450,height=500,resizable=yes')">

リンクの編集</a></li></TMPL_IF>

変更の要点は

(1) id=”nav-link”とし、リンクの小アイコンを表示させる準備をする。

(2) titleはtitle=”リンクの編集”とし、メニューへの表示語句も「リンクの編集」とした。

(3) window.openしての呼び出し先を/MT_DIR/link.cgiにし引数として該当ブログのディレクトリーパスを渡すためwindow.open以降の”(“内を

 ('<TMPL_VAR NAME=STATIC_URI>link.cgi?blog_id=<TMPL_VAR NAME=
BLOG_ID>'

とする。

(4) メニューの「リンクの編集」の文字だけでは寂しいので他のメニューと同じように小アイコンを付けるために、エントリーの入力ウインドウの時に表示される「リンクアイコン」の影の薄いブルーを消した画像を作りnav-link.gifの名前で/MT/images/ディレクトリーに入れる。
  次に/MT/ディレクトリのstyles.cssを以下の赤字の部分を追加する。

.sub a#nav-upload 
{ background-image: url(images/nav-upload.gif); }
.sub a#nav-link 
{ background-image: url(images/nav-link.gif); }
.sub a#nav-comments 
{ background-image: url(images/nav-comments.gif); }

  これまでの修正で(図-1)のように「リンクの修正」が現れる。

2. ローカル・サイト・パス

ローカル・サイト・パスを<TMPL_VAR NAME=LOCAL_SITE_PATH>で取得しようとばかり考えていて/MT_DIR/lib/MT/App/内のmenuサブルーチンを修正したりしたが、どうも思わしくなく、結局MT::Blogライブラリーを使用して<TMPL_VAR NAME=BLOG_ID>でBlog_IDより得ることとした。
最初からMTライブライーを使うべきだったが、簡単に行くと思って深みにはまった。

3. link.cgiの作成

作成方針としては

・mt.cgiや/MT_DIR/lib/MT/App/CMS.pmとは完全に切り離して作成し、現モジュールを改造することに伴う無用な混乱を極力避ける。

・Main_indexはCategory_Archiveなどにもサイドパネルを付けた場合でも簡単に読み込めるようにlink.cgiでJavaScript形式の以下のようなファイルをlink.jsのファイル名で各ブログディレクトリーに吐き出す。

function getLinks(){

var link = new Array(); var data = new Array();

/* begin_data  */
link[0] = "ABCさん,http://uls.fam.cx/abc/";
link[1] = "DEFのページ,http://uls.fam.cx/def/";
link[2] = "GHIJさんのページ,http://uls.fam.cx/ghi/";
/* end_data  */


var html = "<h2>リンク</h2><ul>";
var num = link.length;

for(i = 0; i < num; i++){
    data = link[i].split(",");
    html += "<li><a href='"+data[1]+"'>"+data[0]+"</a></li>";
  }
  html += "</ul>";
return html;
}

そうして、link.cgiを作成して/MT_DIR/に入れたが全くの素人で数ヶ月前に定年を迎えた身にはテクニックも知識も不足していて、ここに見える形で公開できるような代物ではない。カットアンドトライのぼてぼてで恥ずかしい限りだが、一応最後にダウンロードできるように入れておく。

出来たlink.cgiをサイドメニューから起動するとlink.jsが無い場合は新たにlink.jsを作り、既に存在する場合はリンク先を一覧にして表示する。
使い方は簡単で追加したければ表示させる語句とURLを入れて「追加」ボタンを押す。
削除したければリストの削除したいところにチェックマーク(複数選択可能)を入れ削除ボタンを押すだけだ。(図-2)

window.jpg
(図-2 操作Window)

但し、削除と追加を同時にはできません。

結果は直ちにブログに反映させるため、Main_indexテンプレートの適当な場所(私は</head>の前に入れている)に以下を追加。

<script language="javascript" type="text/javascript"
 src="<$MTBlogURL$>link.js"></script>

そしてリンクを表示したい場所に

<script language="javascript" type="text/javascript">
<!--
document.write(getLinks());
//-->
</script>

全く快適だ。

link.cgi download file
header.tmpl download file
nav-link.gif


« Previous | Next »