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 するルールです。これで正しくアクセスできるように なりました。

Error: Failed to load processor AddComment
No macro or processor named 'AddComment' found