■ 影舞 0.8.6 メモ (kagemai-0.8.6.tar.gz)

= ページ内目次 =
■前置き
■インストール環境
■ダウンロード
■インストール
■追加設定(改行コードの問題)
■追加設定(簡単なページレイアウトの変更)
■追加設定(ユーザ認証)
■公式サイト以外の情報源
■感想

■前置き

国産バグトラッキングシステムの影舞です。Windows XP 上の Apache で動作させました。
事前に Apache と Ruby と iconv をインストールしてあります。
公式サイト:http://www.daifukuya.com/kagemai/

■インストール環境

OS:Windows XP Professional(SP2)
Memory:256MB

■ダウンロード

公式サイトから kagemai-0.8.6.tar.gz をダウンロードします。

■インストール

1.ダウンロードしたファイルを展開します。
今回は C:\app に展開しました。Windows には馴染みのうすい tar.gz 形式です。私は FPress + Tar32.dll を使用しましたが、必要ならツールを入手してください。例えば eo などで大丈夫だと思います(未確認)。
デフォルトではディレクトリ名が kagemai-0.8.6 となっていますが、そのままだとバージョンアップした時に分かりにくいので、kagemai に変更しました。
結果、今回のインストール先は C:\app\kagemai です。

2.影舞を実行できるように Apache を設定します。
C:\app\Apache Group\Apache2\conf\httpd.conf を開き、以下の設定を追加します。追加場所はファイルの末尾で良いでしょう。

Alias /kagemai/ "C:/app/kagemai/html/"
<Directory "C:/app/kagemai/html">
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Deny from all
    Allow from localhost
    AddHandler cgi-script .cgi
    <Files *.conf>
        deny from all
    </Files>
</Directory>

私の理解した範囲で、ひとつずつ意味を解説してみます。

Alias /kagemai/ "C:/app/kagemai/html/"
エイリアスの設定です。
ネット上で見つかる設定手順の多くは、Apache の htdocs ディレクトリの下に影舞をインストール(コピー)しています。その場合 http://localhost/kagemai/html/guest.cgi でアクセス出来るため、エイリアスの設定は不要です。そのままでは芸がないと思ったので、影舞を Apache とは別のディレクトリにインストールし、http://localhost/kagemai/guest.cgi でアクセスできるようにしてみました。
<Directory "C:/app/kagemai/html">
ここから </Directory> までが C:/app/kagemai/html に対する設定を表す、という意味です。
AllowOverride None
今回の場合あまり意味はありませんが、.htaccess による設定の上書きを禁止しています。
Options ExecCGI
CGI を実行可能にするための設定です。
Order allow,deny
Deny from all
Allow from localhost
アクセス制御の設定です。localhost からのみ許可しています。
アクセス制限をしないのであれば不要です。
AddHandler cgi-script .cgi
ファイル名が .cgi で終わるファイルを CGI スクリプトとして扱います。
<Files *.conf>
  deny from all
</Files>
.conf ファイルを読取り不可にしています。影舞の設定ファイル kagemai.conf を表示できないようにするための設定です。

今回の設定は「とりあえずこれで動きました」という設定です。セキュリティ的にどうなのか自信がないので、外部からのアクセスを禁止しています。

3.影舞のスクリプトの Ruby のパスを変更します。
C:\app\kagemai\html にある admin.cgi, user.cgi, guest.cgi の各ファイルの1行目を修正します。
デフォルトでは #!/usr/bin/env ruby となっています。

#!C:/app/ruby/bin/ruby -W0 -rpstore

ここで -W0 は警告を出力しないオプションです。これ無しでも影舞は動作しますが、Apache のエラーログ(error.log)に大量の警告が出力されて見にくくなってしまうため、警告を一切出力しないようにしました。
-rpstore は、スクリプト実行前に pstore のライブラリを require するためのオプションです。私の環境ではこれが無いと Apache の error.log に以下のようなエラーが出力され、Internal Server Error となり影舞が起動しませんでした。

[error] [client 127.0.0.1] Premature end of script headers: guest.cgi
[error] [client 127.0.0.1] C:/app/kagemai/lib/pstore.rb:37: uninitialized constant PStore (NameError)\r
… 省略 …
[error] [client 127.0.0.1] \tfrom C:/app/kagemai/html/guest.cgi:50\r

Ruby は全然詳しくないのですが、分からないなりにネットで検索しながら原因を探ってみました。どうやら影舞にも pstore.rb という名前のファイルが存在し、影舞のソース内で require 'pstore' しているところで Ruby の pstore ではなく影舞の pstore が読み込まれているようなのです。ライブラリの検索順序の問題だと思うのですが、ruby -e 'p $:' で検索パスを見ても問題なさそうですし、根本的なところは良く分かりませんでした。ネットで探しても同じ問題が発生している例が見当たらなかったので、私の環境に固有の問題かもしれません。

4.影舞が動作することを確認します。
ブラウザで http://localhost/kagemai/guest.cgi に移動します。プロジェクト一覧のページが表示されれば成功です。

5.影舞の全体設定を行います。
ブラウザに表示されたページ上部のリンク「管理」をクリックします。たくさん設定項目が出てきますが、Windows では利用不可だったり、データベースを使用するのでなければ関係のないものが多いです。変更するとすれば以下の設定です。

「home_url」… 影舞の各ページの上部に表示される "ホーム" のリンク先です。デフォルトは影舞の公式サイトの URL になっています。

「project_dir」… 作成するプロジェクトのファイルを保存する場所です。デフォルトは影舞のインストールディレクトリの下の project (今回の場合は C:/app/kagemai/project)になっています。

「smtp_server」… SMTP サーバーのホスト名(またはIPアドレス)です。利用可能なサーバーを設定しておくとメール通知機能が使えるようになります。デフォルトは localhost になっていますが、Windows で SMTP サーバーを動かしているケースは少ないと思います。利用可能な SMTP サーバーがあるなら、それを設定しておきましょう。私はプロバイダの SMTP サーバーを指定しました。

入力が終わったら、ページ下部の「設定を変更」をクリックします。

6.完了です。
これで影舞の基本機能が使えるようになったはずです。再び「管理」をクリックし、「プロジェクトの作成」からプロジェクトを登録していきます。

■追加設定(改行コードの問題)

ネットで検索してみると、改行コードの問題で guest.cgi の修正が必要なようです。なぜか私の環境では無くても問題なく動いている(ように見える?)のですが、エラーが出るようなら修正しましょう。
C:\app\kagemai\html\guest.cgi に以下の1行(太字部分)を追加します。場所は70行目付近です。

・・・
def execute(mode)
  $stdout.binmode()
  cgi = nil
・・・

■追加設定(簡単なページレイアウトの変更)

プロジェクトを複数登録するとプロジェクト一覧のページが見にくいと感じたので、レイアウトを表形式に変更してみました。
C:\app\kagemai\resource\ja\template\_default\projects.rhtml に以下の記述(太字部分)を追加します。

・・・
<!-- ここからコメントアウト
<ul>
<% bts.each_project do |project| %>
  <% count += 1 %>
    <li><%= project.href() %>
        [<%= project.id.escape_h %>] : <%= project.description.escape_h %></li>
<% end %>
</ul>
ここまでコメントアウト -->

<table width="100%">
<% bts.each_project do |project| %>
  <% count += 1 %>
    <tr>
      <td><%= project.href() %></td>
      <td><%= project.description.escape_h %></td>
      <td>[<%= project.id.escape_h %>]</td>
    </tr>
<% end %>
</table>
・・・

次に、これもプロジェクトを複数登録した場合ですが、各プロジェクト内のトップページからレポートや検索のページに移動すると、プロジェクトの名称がページ内に表示されないため、自分がどのプロジェクトを見ているのかが分からなくなる場合があります。そこで、ページ上部のリンクが並んでいるところにプロジェクト名を表示するように変更しました。
C:\app\kagemai\resource\ja\template\_default\navi.rhtml に以下の記述(太字部分)を追加します。

  ・・・
  base_url = CGIApplication.instance.mode.url
  project_id = project ? project.id : nil
  project_namenavi = project ? project.name: nil

  top_navi = []
  top_navi << MessageBundle[:navi_home].href(Config[:home_url])
  top_navi << Projects.href(base_url, project_id)
  top_navi << CrossSearch.href(base_url)
  top_navi << RSSAll.href(base_url, project_id)

  project_navi = []
  project_navi << project_namenavi
  project_navi << Top.href(base_url, project_id)
  ・・・

注意
影舞にはキャッシュ機能が付いています。そのため各プロジェクトのページを一度表示した後で上記の変更を行ってもすぐには反映されません。使ってみた感じでは、レポートが追加・更新されるタイミングでキャッシュが更新されるようです。すぐに反映させたい場合は、全体設定の「project_dir」で指定したディレクトリの下からファイル cache.pstore を検索し、それらを削除してからブラウザで再読み込みしてください。

■追加設定(ユーザ認証)

C:\app\kagemai\html\dot.htaccess を参考にしてユーザ認証を設定してみました。
影舞はゲスト・ユーザ・管理者という3つのアクセスレベルを持てるように作られていますが、影舞自身は認証機能は持っておらず、httpサーバーに認証を任せる形で実現しています。具体的には、guest.cgi・user.cgi・admin.cgi の3つのファイルに対して適切なアクセス権を設定します。

今回のポリシーとしては、ゲスト権限は認証不要、ユーザ権限は認証が必要、管理者権限も認証が必要で、管理者はユーザ権限は持たない(つまり、管理者権限専用のアカウント)としてみました。またパスワードを保存するファイルは、ユーザ権限用は user.pwd、管理者権限用は admin.pwd とし、guest.cgi などと同じディレクトリ(今回は C:\app\kagemai\html)に作成することにしました
インストール時に httpd.conf に記述した内容に、以下の太字部分を追加します。

<Directory "C:/app/kagemai/html">
    AllowOverride None
    Options ExecCGI
    Order deny,allow
    Deny from all
    Allow from localhost
    AddHandler cgi-script .cgi
    <Files *.conf>
        deny from all
    </Files>
   
    <Files *.pwd>
        deny from all
    </Files>

    <Files user.cgi>
        AuthType Basic
        AuthName "Kagemai-User"
        AuthUserFile C:/app/kagemai/html/user.pwd
        Require valid-user
    </Files>

    <Files admin.cgi>
        AuthType Basic
        AuthName "Kagemai-Administrator"
        AuthUserFile C:/app/kagemai/html/admin.pwd
        Require valid-user
    </Files>
    
</Directory>

追加設定について意味を解説してみます。admin.cgi の設定は user.cgi と同じなので省略しています。

<Files *.pwd>
  deny from all
</Files>
.pwd ファイルを読取り不可にしています。パスワードファイルを表示できないようにするための設定です。
<Files user.cgi>
ここから次の </Files> までが user.cgi に対する設定を表す、という意味です。
AuthType Basic
認証方式です。Basic か Digest が指定できます。セキュリティ上は Digest の方が好ましいのですが、最近のブラウザでしかサポートされないようです。試してみたところ私の環境では Digest は利用できないようなので、Basic にしました。試したのは IE6 と Opera 8.01 という新しいブラウザなので、問題は Apache 側にあるのかもしれません。
AuthName "Kagemai-User"
認証の領域を表す名称です。が、実際にはブラウザの認証ダイアログにメッセージとして表示されているだけのように見えます。
AuthUserFile C:/app/kagemai/html/user.pwd
パスワードファイルです。
Require valid-user
有効なユーザを指定します。valid-user と指定することで、パスワードファイルに存在するユーザが全員有効になります。

次にパスワードファイルを作成します。Apache に付属の htpasswd を使用して、コマンドラインから行います。
ユーザとしては、ユーザ権限用に srgia と hoge、管理者権限用に admin を追加してみました。

C:\app\kagemai\html>"c:\app\apache group\apache2\bin\htpasswd" -cs user.pwd srgia
New password: *****
Re-type new password: *****
Adding password for user srgia

C:\app\kagemai\html>"c:\app\apache group\apache2\bin\htpasswd" -s user.pwd hoge
New password: ****
Re-type new password: ****
Updating password for user hoge

C:\app\kagemai\html>"c:\app\apache group\apache2\bin\htpasswd" -cs admin.pwd srgia
New password: *****
Re-type new password: *****
Adding password for user admin

C:\app\kagemai\html>

オプションの c は、パスワードファイルの新規作成を表します。既存のパスワードファイルにユーザを追加する場合には不要です。というより、このオプションを付けると 警告無しに パスワードファイルが上書きされてしまい、それまでに登録していたユーザが消えてしまいます。ものすごく注意が必要です。
オプションの s は、パスワードの保存形式に SHA を使用することを表します。デフォルトの保存形式は MD5 ですが、SHA の方がセキュリティ的に強い(と言われている?)ので、SHA を使用しました。

確認します。
Apache を再起動し、ブラウザで http://localhost/kagemai/guest.cgi にアクセスします。
影舞のページが表示されればゲスト権限の設定は成功です。
影舞のページ上部のリンク「ログイン」をクリックすると認証ダイアログが表示されるはずです。ユーザ名に srgia または hoge、パスワードに上で設定したパスワードを入力し、URL が http://localhost/kagemai/user.cgi になっていればユーザ権限の設定は成功です(ページ上は前と同じプロジェクト一覧のページですが、「ログイン」のリンクがあった位置に「ログアウト」のリンクが現れます)。
影舞のページ上部のリンク「管理」をクリックすると、再び認証ダイアログが表示されるはずです。ユーザ名に admin、パスワードに上で設定したパスワードを入力し、URL が http://localhost/kagemai/admin.cgi になっていれば管理者権限の設定は成功です(「影舞の管理」のページが表示されます)。

注意
この設定には少し問題があります。いったんログインしてから別のユーザでログインしたい場合、ブラウザを終了させないといけません。ブラウザを終了しないと、前のユーザ情報で勝手にログインしてしまいます。どうやらブラウザが自動的に行っているようで、逆に便利な場面も多いと考えられるので仕方ないようにも思いますが、使い方によっては止めて欲しいと思うかもしれません。(キャッシュを無効にすれば良い?)

■公式サイト以外の情報源

T . E . O . - 速攻 - 影舞
MgTN Blog | 影舞 on Windows XP SP2
みっちーわーるど IT 関連覚え書き > Windows で 影舞 > 導入方法

■感想

やや手強いですね。
この設定で全ての機能が使えるわけではありません。もともと UNIX を前提としたソフトなので、Windows ではきびしい機能もあるようです。折を見て DB との連携やグラフ表示にも挑戦してみようと思います。