BitChannelInstallation

2008-08-23 22:55:39 +0900 (48d); rev 18

BitChannel のインストールと設定の手順を解説します。

ダウンロード

まず以下のリンクから最新バージョンのパッケージを取得し、 アーカイブを展開しておきます。

バージョン 0.2 以前には XSS 脆弱性があるので公開サーバでは使わないでください。

なお Subversion でアクセスすると真の最新版が入手できます。

% svn co http://i.loveruby.net/svn/public/bitchannel/trunk bitchannel

手順

以下を順番に構築し、bitchannelrc に設定します。

CGI ディレクトリ

以下のようにファイルを配置してください。 この例では Apache を前提とするので .htaccess も置いています。 他のウェブサーバではそれぞれの方法で設定してください。

$cgidir/index.cgi         (CGI の場合)
$cgidir/index.fcgi        (FastCGI の場合)
$cgidir/index.rbx         (mod_ruby の場合)
$cgidir/bitchannelrc      bitchannelrc.sample.jaをコピーして編集
$cgidir/theme/            themeディレクトリをディレクトリごとコピー
$cgidir/.htaccess         dot.htaccessをコピーして編集

index.cgi, index.fcgi の #! などを含め、適切に編集してください。 基本的に、このディレクトリに置くファイルは環境に合わせて編集すべきです。

なお、最新バージョンで mod_ruby を使う場合は 必ず index.rbx を使ってください。絶対に index.cgi を使ってはいけません。 (理由が気になるならソースコードを見比べてみてください。一目でわかります)

また、index.* の類は実際に使うものだけを置いておくべきです。 例えば index.cgi を使うと決めたら index.fcgi や index.rbx を置いてはいけません (※)。 その点からも、BitChannel をチェックアウトするディレクトリと cgidir は分けることをお勧めします。tDiary や Hiki のように チェックアウトしたディレクトリでそのまま CGI を動かすのは避けましょう。

※ 理由は、Apacheのコンテントネゴシエーションによって動作が変わるからです。 例えば index.* が複数ある状態で拡張子のない .../index にアクセスされると、 なぜか index.fcgi が動いてしまったりします。

BitChannel ライブラリ

BitChannel の lib/ を Ruby のロードパスに入れます。 bitchannelrc.sample.ja の設定だと CGI ディレクトリに lib/ があれば動くようになっていますが、 この設定に問題があれば書き換えてください。

ちなみにこのサーバ (i.loveruby.net) では /usr/local/lib/bitchannel 以下に BitChannel のソースをチェックアウトして、 index.fcgi で /usr/local/lib/bitchannel/lib を $LOAD_PATH に入れてます。

# bitchannelrc
$LOAD_PATH.unshift '/usr/local/lib/bitchannel/lib'
....

CVS レポジトリ

次に、ページのデータを格納する CVS レポジトリをセットアップします。 レポジトリはどこにあっても構いませんが、 セキュリティを考えると HTTP サーバから見えないところに置くべきです。 ここではレポジトリのパスを /var/cvs/bitchannel と仮定します。 モジュール名は wikidoc とでもしておきます。

まずパッケージの pages/ 以下を元にレポジトリを作ります。 CVS レポジトリはローカルでもリモートでも構いません。

% cvs -d /var/cvs/bitchannel init
% cvs -d /var/cvs/bitchannel co CVSROOT
(……CVSROOT のファイルを適切に設定する……)

% cd /usr/local/lib/bitchannel/pages/
% cvs -d /var/cvs/bitchannel import -m 'start repository' wikidoc local start

※ import ではなく add で追加しても構いません。 またバージョン 0.3.1 より前だと 1.1.1.1 の扱いに バグがあるので import は避けてください。

ここで注意すべきはレポジトリのパーミッションです。 cvs はなにかというとレポジトリ内にファイルを作りたがるので、 CGI 実行時の実効ユーザから書き込めないと原因不明のエラーに 悩まされることになります。最も単純な方法を挙げるなら、 レポジトリ全体を CGI の実行ユーザに所有させれば OK です。 設定を済ませてから chown -R でまとめて変えてもよいでしょう。 ちなみにここで言う「レポジトリ全体」とは CVSROOT まで含みます。

なお、レポジトリの位置は bitchannelrc に設定する必要はありません。

CVS ワーキングコピー

BitChannel が使うワーキングコピーを二つ、 レポジトリからチェックアウトします。 これを仮に wc.read/ と wc.write/ としましょう。

/var/bitchannel % cvs -d /var/cvs/bitchannel co -d wc.read wikidoc
/var/bitchannel % cvs -d /var/cvs/bitchannel co -d wc.write wikidoc

wc.read/ と wc.write/ の両方を CGI の動作権限で読み書き可能かつ cvs commit 可能にしてください。 例えば CGI が httpd ユーザで動くなら、次のように設定します。

/var/bitchannel % chown -R httpd wc.*

そしてこの二つを bitchannelrc の wc_read と wc_write に設定します。

......
:wc_read  => '/var/bitchannel/wc.read',
:wc_write => '/var/bitchannel/wc.write',
......

なお、CVS の特性上、 リモートレポジトリを使う場合はパスワードが必要になるはずです。 CGI が動くときのユーザから commit 可能になるよう、 ENV['HOME'] と ~/.cvspass をうまく設定してください。

参考: CVS の落とし穴

レポジトリもワーキングコピーも正しくパーミッションを設定したのに、 それでもパーミッションなんたらと文句を言われて動かないことがあります。 そういう場合はテンポラリディレクトリに書き込み権限がないのが原因かもしれません。

Unix なら通常はテンポラリには /tmp を使いますが、 CVS をビルドするときに環境変数 TEMP や TMP を設定していると 実行時にもそちらにアクセスしてしまうことがあります。 だから例えばビルド時に TEMP=~/tmp なんてしていると httpd 権限では書き込めないわけです。

この問題は以下のような方法で解決できます。

もっとも BitChannel で CVS にオプションを追加するには ソースコードにハードコーディングしないといけないので、 現実的には CVS をビルドしなおすか環境変数を設定するしかありません。

キャッシュディレクトリ

どこかにディレクトリを作って、 CGI の動作権限で読み書き可能にしてください。 例えば /var/bitchannel/cache に作るならこうします。

/var/bitchannel % mkdir cache
/var/bitchannel % chown -R httpd cache

これを bitchannelrc の cachedir に設定します。

....
:cachedir => '/var/bitchannel/cache',
....

テンプレート

template/ 以下を好きな場所にまるごとコピーしてください。 ウェブサーバから見えない場所に置くのが適切です。 そのパスを bitchannelrc の templatedir に設定します。

このサーバの場合は前述のように /usr/local/lib/bitchannel/template にテンプレートがあるのでそれを設定しています。

# bitchannelrc
....
:templatedir => '/usr/local/lib/bitchannel/template',
....

ファイル配置の一例

以下は CGI の動作権限を仮に httpd とします。 また root と書いてあるところは必ずしも root である必要はありません。 CGI の実効ユーザとは違うほうが望ましい (それで問題ない) というだけです。

-rwxr-xr-x  root    root    /var/www/htdocs/wiki/index.cgi         CGIエントリポイント
-rw-r--r--  root    root    /var/www/htdocs/wiki/bitchannelrc      設定ファイル
drwxr-xr-x  root    root    /var/www/htdocs/wiki/theme/            テーマ(CSS)
-rw-r--r--  root    root    /var/www/htdocs/wiki/.htaccess
-rwxr--r--  root    root    /usr/lib/bitchannel/lib/bitchannel.rb  ライブラリ
drwxr-xr-x  root    root    /usr/lib/bitchannel/lib/bitchannel/    ライブラリ
drwxr-xr-x  root    root    /usr/lib/bitchannel/template/          templatedir
drwxr-xr-x  httpd   httpd   /var/cvs/bitchannel/CVSROOT/
drwxr-xr-x  httpd   httpd   /var/cvs/bitchannel/wikidoc/           CVSレポジトリ
drwxr-xr-x  httpd   httpd   /var/bitchannel/wc.read/               wc_read
drwxr-xr-x  httpd   httpd   /var/bitchannel/wc.write/              wc_write
drwxr-xr-x  httpd   httpd   /var/bitchannel/cache/                 cachedir
drwxrwxrwt  root    root    /tmp

その他

BitChannelConfigurations も参照してください。


system revision 1.162