2010/01/10

AlixでDebian lennyにTrac環境を構築してみた

alix上にDebian lennyをインストールした環境に、 subversionとバグトラッキングシステム(BTS)のTracを導入してみました。

Lennyの導入

このブログの記事: Lennyをインストールしてみるdebianをsubversionサーバーにするに、おおまかな方法を掲載しています。 CFカードにDebian環境を作るところは、情報が分散しているから改めてまとめないとだなぁ。

この記事ではLennyがalix上で動作しているところから始めてtracを導入してみます。

tracパッケージの導入

$ sudo apt-get install trac libapache2-mod-python

関連するパッケージがどこに配置されているかは、dpkg -L tracで調べることができます。

trac関連のセットアップ

trac用のファイルはどこに配置するのか、明確に決まったところはありません。 パッケージの管理下にないファイルは、環境に合せて適宜変換してください。

専用ディレクトリの準備

自分のアプリケーション専用ディレクトリとして、"/app"を準備しています。 この下に"trac"用のディレクトリを作成する事にしました。

$ sudo mkdir -p /app/trac/projects
$ sudo mkdir /app/trac/.egg-cache
$ sudo chown www-data:www-data /app/trac/.egg-cache /app/trac/projects

tracではapacheのBASIC認証で渡されたユーザーIDをtracの利用者IDとして受け入れます。 "admin"を管理者用IDとして、"user01"を一般ユーザーとして準備しておきます。

$ sudo touch /app/trac/.htpasswd
$ sudo htpasswd /app/trac/.htpasswd admin
$ sudo htpasswd /app/trac/.htpasswd user01
$ sudo chgrp www-data /app/trac/.htpasswd
$ sudo chown 640 /app/trac/.htpasswd

そういえば例としてhtpasswdを使う時は、だいたい新規に1つのIDを登録するので -c オプションを一緒に書くのではないでしょうか。 もちろん、それまでのファイルの内容は消えてしまうので、 -c オプションは本番環境では使い物になりません。 バックアップを常に取る習慣をつけることと、そういう危険な作業から身を遠ざけるスキルを身につけたいものです。

apache関連の設定
$ cd /etc/apache2/sites-available
$ sudo vi trac

"trac"ファイルは以下のような内容にします。 今回はサーバーのIPアドレスを"192.168.10.10"にしているので、先頭2行に書かれたIPを環境に合せて変更してください。

/etc/apache2/sites-available/tracの内容

<VirtualHost 192.168.10.10:80>
  ServerName 192.168.10.10
  DocumentRoot /var/www
  <Directory "/var/www">
    SetHandler    None
    Options All
    Order deny,allow
    Deny from none
    Allow from all
  </Directory>

  <Location /trac>
    SetHandler    mod_python
    PythonHandler trac.web.modpython_frontend
    PythonOption  TracEnvParentDir /app/trac/projects
    PythonOption  TracUriRoot      /trac
    PythonOption  PYTHON_EGG_CACHE /app/trac/.egg-cache
  </Location>
 
  <locationMatch "/trac/[[:alnum:]]+/login">
    AuthType Basic
    AuthName "trac"
    AuthUserFile /app/trac/.htpasswd
    Require valid-user
  </locationMatch>

  ErrorLog /var/log/apache2/error.log
  LogLevel warn
  CustomLog /var/log/apache2/access.log combined
  ServerSignature On

</VirtualHost>

最後にapacheで設定を有効にするために、"site-enabled"に反映させます。

$ sudo /usr/sbin/a2ensite trac
設定の確認方法

apacheをリスタートして、実際にアクセスしてみます。

$ sudo /etc/init.d/apache2 restart

続いてブラウザを使ってアクセスしてみます。 まだプロジェクトの設定をしていないので、タイトルだけが表示されます。

http://192.168.10.10/trac/へのアクセス結果

Available Projects

とりあえず使うまでの手続き

Tracは基本的にプロジェクト毎に設定が必要で、複数のプロジェクトを便利に管理する方法はないようです。 そのためプロジェクトを作成してから、ユーザー権限やプラグインの設定が必要になります。

Tracプロジェクトの作成

稼働確認をするための"testproj01"を作成します。

$ sudo -u www-data trac-admin /app/trac/projects/testproj01 initenv

trac-admin実行結果

Creating a new Trac environment at /app/trac/projects/testproj01
...
Project Name [My Project]> Test Projects
...
Database connection string [sqlite:db/trac.db]> 
...
Repository type [svn]> 
...
Path to repository [/path/to/repos]> /var/lib/svn/testproj01
...
Congratulations!
SVNリポジトリの準備

svnのリポジトリの場所は実際に存在する場所にしてください。 もしまだ準備していなければ適当な場所にcdしてから、次のコマンドでディレクトリを準備します。

$ sudo svnadmin create testproj01
テストプロジェクトを使った確認

Webブラウザを開いて、 先ほどと同じようにアクセスしてみます。

先ほどは表われなかったプロジェクト名が表示されれば、成功です。

ユーザー権限の修正

現時点でのユーザー権限を確認しておきます。

$ sudo -u www-data trac-admin /app/trac/projects/testproj01
Trac [/app/trac/projects/testproj01]> permission list
User           Action         
------------------------------
anonymous      BROWSER_VIEW   
anonymous      CHANGESET_VIEW 
anonymous      FILE_VIEW      
anonymous      LOG_VIEW       
anonymous      MILESTONE_VIEW 
anonymous      REPORT_SQL_VIEW
anonymous      REPORT_VIEW    
anonymous      ROADMAP_VIEW   
anonymous      SEARCH_VIEW    
anonymous      TICKET_VIEW    
anonymous      TIMELINE_VIEW  
anonymous      WIKI_VIEW      
authenticated  TICKET_CREATE  
authenticated  TICKET_MODIFY  
authenticated  WIKI_CREATE    
authenticated  WIKI_MODIFY 

今回はあらかじめ"admin"と"user01"のユーザーIDを作成していますので、 "admin"には管理者権限を追加します。user01はそのままにして、"authenticated"ユーザーの権限で動かします。

Trac [/app/trac/projects/testproj01]> permission add admin TRAC_ADMIN

これで"admin"ユーザーでログインすると、 Admin タブが表示され選択可能になります。 この後はプラグインを加えていきます。

プラグインの追加方法

あると便利なプラグインがいくつかありますが、今回のようにパッケージでTracを導入している場合は、 導入先が問題になりそうです。そういう事を考えないのが普通そうですけどね。

"easy_install"を使って本来はパッケージで管理されているシステムディレクトリに導入するのは、 少し嫌だったので別ディレクトリに導入するようにしてみました。 このために設定の追加が必要になります。

この別ディレクトリとして /app/trac/lib を作成します。

$ sudo mkdir /app/trac/lib/lib/python2.5/site-packages

今回はちょっとだけ手数の多い MasterTicketsPlugin を導入してみます。 マニュアルは配布元の tracHacks::MasterTicketsPluginにあります。

まずはgraphvizを追加で導入します。

$ sudo apt-get install graphviz

配布元からパッケージをダウンロードして、サーバー上で展開します。

$ unzip masterticketsplugin-r7356.zip
$ cd masterticketsplugin/0.11
$ chmod -R a+rX .
$ python setup.py bdist_egg
$ cd dist
$ sudo env PYTHONPATH=/app/trac/lib/lib/python2.5/site-packages easy_install --prefix=/app/trac/lib TracMasterTickets-2.1.3-py2.5.egg

easy_installの実行結果

Creating /app/trac/lib/lib/python2.5/site-packages/site.py
Processing TracMasterTickets-2.1.3-py2.5.egg
Copying TracMasterTickets-2.1.3-py2.5.egg to /app/trac/lib/lib/python2.5/site-packages
Adding TracMasterTickets 2.1.3 to easy-install.pth file

Installed /app/trac/lib/lib/python2.5/site-packages/TracMasterTickets-2.1.3-py2.5.egg
Processing dependencies for TracMasterTickets==2.1.3
Finished processing dependencies for TracMasterTickets==2.1.3

このままでは mod_python が必要なパッケージを見つけられないので、 apacheの envvarsPYTHONPATH を追加してライブラリを探す時のパスに追加します。

/etc/apache2/envvarsの編集

...
export PYTHONPATH=/app/trac/lib/lib/python2.5/site-packages

trac.ini ファイルを編集して必要な設定をファイルの最後に追加します。

$ sudo vi /app/trac/projects/testproj01/conf/trac.ini
[components]
mastertickets.* = enabled

[ticket-custom]
blocking = text
blocking.label = Blocking
blockedby = text
blockedby.label = Blocked By

最後に upgrade しておきます。

$ sudo env PYTHONPATH=/app/trac/lib/lib/python2.5/site-packages trac-admin /app/trac/projects/testproj01 upgrade

これで mod_python から導入したパッケージが認識できるはずです。 ここまでの設定が終ってからapacheのプロセスをリスタートします。

$ sudo /etc/init.d/apache2 restart

再び admin ユーザーでログインしてから、AdminタブのPluginsを開くと TracMasterTickets のセクションが表われます。

また新規のチケットを開く時にBlocking, Blocked Byを入力するフィールドが追加されているため、ここに数字を入れて親子関係を定義する事ができるようになります。

うまく動かないときのデバッグ方法

apacheの設定ファイルの中で、ErrorLogで指定した場所にエラーログが出力されます。 VirtualHostを再定義しているため、/etc/apache2/sites-enabled/000-defaultは無視されます。 Log関連以外で必要な設定があれば、コピーしておきましょう。

Tracレベルのエラーメッセージは"Admin"タブの"Logging"セクションで設定します。 確認のためには DEBUG レベルのメッセージを出力すると良いと思いますが、 本番環境では WARNING 以上に設定するなどログサイズに気をつけましょう。

syslogにログを出力すれば、/etc/syslogd.conf or /etc/rsyslog.confの設定によりますが、基本的には/var/log以下のファイルに書き込まれます。

まとめ + 今後の展望

今回はTrancendの2GB x266なCFカードに入れたまっさらなDebian LennyにTracをパッケージから入れてみました。 もしソースからtracを/opt以下などに入れても、envvarsの編集を前倒しで行なうぐらいで動くはずです。

まだsubversionと連携させるための設定が終っていませんが、 これは定型的な作業なので他のサイトに書かれている以上の作業はないと思います。

ただしsubversionのpost-commitをいじるので、スクリプトが正常に動作するまではテスト用のプロジェクトで手順を確立するようにしましょう。

0 件のコメント: