Blosxom環境構築(2/2)

今回このblogのBlosxom版を構築するために行ったことをまとめる。

●Blosxom本体
SourceForge.netのBlosxom projectから最新版を入手した。
なお、同ページは"The Unofficial Blosxom User Group"では"SF.net Project"と書かれてリンクされている。

●プラグイン
Blosxomは本体が小規模に作られているので、欲しい機能のプラグインを入れる所から始まる。
今回はblosxom starter kit(bsk)とBlosxom Plugin Registryを参考にプラグインを選び、"The Unofficial Blosxom User Group"のV2 Plugin Registoryから最新版を取得していった。
以下、インストールしたプラグイン名と、インストールに伴って改造した点を記す。
・archives
月毎のアーカイブページと、それらへの階層状のリンクを生成する。
特に改造無し。
・back_and_forth
個別エントリーのページから、更新日付が1つ前のページ、1つ後のページへのリンクを生成するプラグイン。
bskの"«前 | Main | 後»"という並びが気に入ったので、bskのを使わせてもらった。(V2 Plugin RegistoryのはMainの部分が出せない)
・categories
カテゴリー毎のアーカイブページと、それらへの階層状のリンクを生成するプラグイン。
ディレクトリ名と表示文字列の対応($friendly_name)を埋めたのと、'all entries'を'全てのエントリー'に書き換えたのみ。
※report_dir_start呼び出しがコメントアウトされてるバージョンだと、'all entries'を表示するにはコメントアウトを解除する必要あり。
・entries_index
エントリーの作成日時を保存する。これが無いとエントリーの作成日時がエントリーファイルの更新日時になるので、FTPでwebサーバーにアップロードするとファイルの日時がアップロード時刻になり、エントリーの作成日時が失われてしまう。
特に改造無し。(インデックスファイルは別途作成して一緒にアップロードした)
・entry_title
個別エントリーページのタイトル(<TITLE>タグの中身)をそのエントリーのタイトルにする。
"ブログ名 セパレータ タイトル"という並びが気に入ったので、Kyo Nagashimaさんのバージョンを使用。特に改造無し。
・find
ブログ内をテキスト検索して、マッチするエントリーだけを出力するプラグイン。
特に改造無し。
・geek
(出力例)。いらないけど消すには惜しいので残しておく。
・seemore
複数エントリーが表示されるページで、各エントリーを丸ごと表示するのでなく、部分的に表示して、残りの部分へのリンクを付けるようにする。
"See more ...."を「続きを読む」に変えかけたが、"See more ...."が格好よくて気に入ったので、改造無し。
・titles_index
複数エントリーが表示されるページで、各エントリーをタイトルのみで表示するようにする。
seemoreで表示するトップページ以外では表示エントリー数の制限を緩和するため、blosxom本体のgenerate{}の"# Stories"の所の

my $ne = $num_entries;
my $ne = $currentdir ? 100 : $num_entries;
に変更。
・writeback
後述。

●Writebackスパム対策
Blosxom公式サイトのWritebackプラグインを使うと、スパムの餌食になる。対策として、以下の5つのプラグインを見つけた。
(1) WritebackPlus
(2) Feedback
(3) spam_blocker
(4) hail2u.netのWriteback
(5) Writeback with Akismet
まずデファクトスタンダードと思われる(1)のWritebackPlusを試そうとしたが、その中で使われているMT-blacklistが既に配布されておらず(MovableType 3.2で他の方法が使われるようになったため)、スパム対策にならなかった。
ネット上で流し読みする限り(2)はマイナーで、(3)と(5)は導入が面倒くさそうで、(4)の方法で十分効果がありそうなので、今回はWritebackPlusに(4)の方法を適用することにした。
WritebackPlusの改造結果
(WritebackPlusはVersion 0.2.1aを使用)
改造点(コメントで"Y.Nomura"とある部分)
・250行目付近の$pathを修正
・257行目付近、(4)のWritebackの100~131行目をコピー
・305行目付近、blacklist無しでも動くようにコメントアウト
・375行目付近、Net::SMTP無しでも動くようにコメントアウト(Hi-Hoのサーバーに無かったため)

●MovableTypeのエントリーのインポート
MovableTypeの管理ページの「エントリーの書き出し」を使って全エントリーを1つのテキストファイルに出力し、Perlスクリプトをガリガリ書いてBlosxom用のファイルに変換した。

●Hi-Ho依存の設定
参考までに、Hi-HoのレンタルWebサーバーでBlosxomを動かすために設定した、blosxom.cgi内の設定項目の一部を挙げておく。(一部伏字)
$dataurlは、テンプレートHTML(フレーバー)内からの他ファイル(スタイルシートや画像)参照で必要になる絶対パス。フレーバー内の相対パスは特殊なCGIディレクトリからの相対パスになり、データディレクトリに辿り着けない。

# Where are this blog's entries kept?
$basedir = "$ENV{'HOME'}/html/*************";
$datadir = "$basedir/entries";

# What's my preferred base URL for this blog (leave blank for automatic)?
$url = "http://www.sam.hi-ho.ne.jp/cgi-bin/user/ynomura/blosxom.cgi";
$dataurl = "http://www.sam.hi-ho.ne.jp/~ynomura/blosxom";

# Where are my plugins kept?
$plugin_dir = "$basedir/plugins";

結局使わなかったプラグインについても書いておく。
・entries_index_tagged
エントリーテキスト内に特定のタグを含めることによってエントリーの作成日時を設定するためのプラグイン。entry_indexと同様、ファイルの更新日時以外でエントリーの作成日時を設定する手段を設けるために入れようとした。
インデックスファイルを作る必要が無いのでentry_indexよりすっきりするのだが、そのエントリーの作成日時を示すタグ自体を表示しないようにできなかったので、使うのを諦めた。
SmartyPants
ASCII文字で書かれた引用符やハイフンによる破線や点々などを、HTMLで定義された特殊記号に置き換えて表示してくれたりするもの。
機能の割にサイズがやたらでかいので、外した。

なかなか良く仕上がったと思うのだが、RSSの送信と、スパム対策(上記(5)のAxismet対応)は気力が尽きてやり切れなかった。実際問題として、Hi-HoのwebサーバーとはFTPでしかやり取りできないのが辛すぎる。
今月に入ってからはDDNSのトラブルも無いし、最悪の場合DDNSを乗り換えるという選択肢もあるのだし、せっかくだが今回作ったBlosxom環境は趣味の実験設備で終わりそうだ。