TachTrac について
trac に関するメモは TracMemo を参照してください.
trac サイトの作り方
そんなに難しくないのであった.このサイトは suexec を使ってユーザ権限で動かしてます. で,http://trac.arege.net/projectname/ で,各プロジェクトにアクセスできます. TracMultipleProjects を参考にして,Rewrite をちょっといじってやることで, このような構成にできます./projects/projectname とかダサそうだったので(ぉ.
このやり方を使うと,http://trac.arege.net/tach/ とか,http://trac.arege.net/fuga/ とかを簡単に構築できます.またいろんな応用もできます.
ココでは,以下のような環境を構築するとして解説します.
- URL: http://trac.arege.net/
- trac の htdocs root: /home/username/www/trac
- cgi script: /home/username/www/trac/cgi-bin/trac.cgi
- projects 置き場: /home/username/www/trac
- svnroot: /home/username/www/trac/svnroot
Debian では,apt を使って簡単に trac を入れることができます.このとき,trac.cgi は /usr/share/trac/cgi-bin/trac.cgi に置かれます.suexec で動かすためには, trac.cgi の owner を suexec user にしないといけません.ファイルをコピーしたく なりますが,ここはぐっと我慢して,/home/username/www/trac/cgi-bin/trac.cgi には,以下の 3 行のスクリプトを置きましょう.
#!/bin/sh
export TRAC_ENV=/home/username/www/trac${SCRIPT_NAME}
exec /usr/share/trac/cgi-bin/trac.cgi
これで,TRAC_ENV 環境変数を設定して,/usr/share/trac/cgi-bin/trac.cgi を実行 することができます.コピーしない理由は,環境変数を設定することと,trac がバージョン アップしたときにコピーし直す必要をなくすためです.
ここまで終わったら,プロジェクトのディレクトリを準備します.
% mkdir -p /home/username/www/trac/svnroot % svnadmin create /home/username/www/trac/svnroot/sampleproject % trac-admin /home/username/www/trac/sampleproject initenv
これでプロジェクトの準備は完了.次に apache の設定をします. 今回は VirtualHost? です.
<VirtualHost *:80>
ServerName trac.arege.net
ServerAdmin webmaster@arege.net
DocumentRoot /home/username/www/trac
SuexecUserGroup tach tach
ErrorLog /var/log/apache/trac/error.log
CustomLog /var/log/apache/trac/access.log common
UserDir disabled
Alias /trac /usr/share/trac/htdocs
RewriteEngine on
RewriteRule ^/trac/$ / [R=301]
RewriteCond %{REQUEST_URI} !^/cgi-bin/
RewriteCond %{REQUEST_URI} !^/svnroot/
RewriteCond %{REQUEST_URI} !^/trac/
RewriteCond /home/username/www/trac/$1 -d
RewriteRule ^/([[:alnum:]]+)(/?.*) /cgi-bin/trac.cgi$2 [L]
<Directory /home/username/www/trac/cgi-bin>
Options ExecCGI
AllowOverride None
</Directory>
<LocationMatch "/[[:alnum:]]+/login">
AuthType Basic
AuthName "trac"
AuthUserFile /home/username/www/.htpasswd
Require valid-user
</LocationMatch>
</VirtualHost>
これで終了です.あとは apache を再起動して,http://trac.arege.net/sampleproject/ に アクセスすると,きちんと trac のページが見えるはずです.
/~usename/ での作り方
http://example.com/~tach/trac.cgi/wiki/WikiName ではダサいので,「trac.cgi」を出したくない、 つまりは、http://example.com/~tach/ で trac を使いたい、という時はどうしたらよいでしょう。 基本的には上と同じなのですが、この場合のsuexec の機能である「環境変数の保護」が悪さをして、 うまくいかないので、それを改善する方法です。
.htaccess には以下のように書いています。 %{REQUEST_FILENAME} をチェックしているのは、ファイルやディレクトリが存在している場合は、 trac ではなくそちらを参照してほしいからです。
Options Indexes FollowSymLinks
RewriteEngine On
RewriteRule ^$ /~tach/cgi-bin/trac.cgi [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule (.*) /~tach/cgi-bin/trac.cgi/$1 [L]
これで、cgi-bin/trac.cgi を以下のようにして実行できるようにしておけば、trac は正常に 動作します。
#!/bin/sh export TRAC_ENV=/home/tach/public_html exec /usr/share/trac/cgi-bin/trac.cgi
ただコレだと、trac を表示したときのリンクが、「cgi-bin/trac.cgi/wiki/WikiName」のように なってしまいます。これは、trac.cgi が環境変数 SCRIPT_NAME を読んでいるからです。 どうも、/~username/ で Rewrite をしたときは、環境変数 SCRIPT_NAME には Rewrite 後の CGI の名前が入るようです。これでは、せっかく URL をかっこよくしたのに台無しです。
そこで、環境変数 SCRIPT_NAME を書き換えるようにしてみます。 trac.cgi を以下のように変更し、SCRIPT_NAME に URL PATH のベース部分が入るようにします。
#!/bin/sh export SCRIPT_NAME=/~tach/ export TRAC_ENV=/home/tach/public_html exec /usr/share/trac/cgi-bin/trac.cgi
これで、trac からのリンクも /~tach/wiki/WikiName に変わりました。cgi-bin/trac.cgi/ から 脱却できます(カコイイ)。
/trac/ での作り方
trac を /trac/ 以下に設置(たとえば、http://example.com/trac/ )しようとすると、これまたハマります。 trac は、「Alias /trac /usr/share/trac/htdocs」を行うことによって、/trac/ 以下の画像や css を使おうとします。しかし、/trac に設置すると、存在しないので正しく表示できません。 もちろん、symlink やコピーをすれば正しく表示されますが、あまり美しくありません(主観)。
そこでここも mod_rewrite を使って書き換えてしまいます。 まず、上記 Alias の代わりに以下の Alias を httpd.conf に書きます。
Alias /trac-htdocs /usr/share/trac/htdocs
次に、trac の CGI を設置します。今回はちょっと趣向を変えて、「index.cgi」ではなく「trac」 という名前で設置します(trac-admin で作成する trac directory は別の場所(たとえば、 /home/tach/trac)に作っておきます。)。 trac というファイルの中身は例によって以下のようにします。
#!/bin/sh export TRAC_ENV=/home/tach/trac exec /usr/share/trac/cgi-bin/trac.cgi
このままでは、CGI として実行されないので、以下のように httpd.conf に書いて、強制的に CGI として認識させます。
<Files trac>
ForceType cgi-script
</Files>
この状態で http://example.com/trac/ にアクセスすると、trac のページは表示されますが、 画像などが表示されません。そこで、これを /trac-htdocs に rewrite するために、以下のような ルールを httpd.conf に書きます。
RewriteCond %{REQUEST_URI} ^/trac/(.+)$
RewriteCond /usr/share/trac/htdocs/%1 -f
RewriteRule ^trac/(.+)$ /trac-htdocs/%1 [L]
「/trac/なんとか にアクセスしていて」「/usr/share/trac/htdocs/なんとか」が存在すれば、 「/trac-htdocs/なんとか」に rewrite するルールです。これで正しくアクセスできるように なりました。
