Trac 0.11アップデートでドツボに嵌る

そろそろ枯れてきてるしまず大きな問題は起こらないだろうと踏んでTrac 0.11インストール開始。
見事に地雷を踏み抜いた。


サーバはdebianで、0.10.4はここを参考にパッケージ化後インストールしていた。
なので、まずフルバックアップしてパッケージを削除。
その後日本語化Trac0.11を拾ってきてsetup.py installで終了。
…と思ってた時期が私にもありました。


現状のsetup.pyはeggインストールにフル対応している。
このためデフォルトインストールがeggインストールになっていて、初期では、例えば/usr/lib/python2.x/site-package/trac以下にインストールされてしまう。
それ自体は問題になるとも考えていなくて、静的ファイルの分離による高速化のために張っていたシンボリックリンクを差し替えて終わり、と思ってtrac-admin upgradeしたのだが、よく考えたらグローバルファイルの置き場がない。
現在のTracは多数のプロジェクトを管理していたため、主な設定項目は全てグローバルに放りこんでおいて、最小限の差分だけ各プロジェクトの設定ファイルに放りこんでいた。
パッケージインストールしてる人はご存じの通り、この場合の設定ファイルは/usr/share/trac/conf以下に置かれる。
eggインストールではこのようなフォルダは当然のごとく存在せず、site-package/trac以下にも類似のフォルダが存在しない。
つまりインストール後にできあがるのはほぼ素の状態のTracだけ。


今から全プロジェクトの設定ファイルを書き換えるのは、後で不要になる可能性も高く実に不毛。
かといってそもそも初期設定である/usr/share/tracというフォルダは通常インストールでは作成されない。
手を変え品を変えインストール方法を変更したもののまるでダメ。
eggインストールだとsetup.py installでの--prefixは無視されるし。
install --debianというオプションがそれっぽい気がするんだけどdistフォルダがないといって弾かれてしまう。勝手に作るべきフォルダでもなさそうだし。


TracGuideには「インストール時に作成されるtrac/siteconfig.pyを変更すること」って書いてありますがどこにも見あたりませんそんなファイル。
どうしていいやら。泣きそう。


追記:
Trac0.11のRelaseNoteに注意書きがあった。

Setuptools is now used for the packaging
This means you'll be able to just do

easy_install Trac

once we've made the release.

It also means that a number of things had to be changed to make this work correctly. In particular, Trac no longer implicitly assumes nor installs global data in the $prefix/share/trac. Instead, you'll have to modify the configuration of your project environments to explicitly “inherit” a global configuration in trac.ini, for example:

[inherit]
file = /etc/trac/trac.ini

This will load the configuration from the /etc/trac/trac.ini file, while of course allowing to override any global settings in the environment's configuration.

In that global configuration, you can specify shared directories for templates and plugins, e.g.:

[inherit]
plugins_dir = /etc/trac/plugins/
templates_dir = /etc/trac/templates/

出来ればTracGuideとインストールテキストも修正してください…
めんどくさがって目を通さなかった俺が悪いんですが。
ココ読むまでinheritオプションを知らなかったのもダメ過ぎですね!


というわけで、グローバル設定ファイルを適当な場所に作成→
各プロジェクトのtrac.iniに[inherit]のfileオプションでグローバル設定ファイルの参照場所を指定するソースを追加して解決。ワンライナー最高。
ちなみに、マクロはpluginsフォルダに入れるようにとの注意書きがあるため、全プロジェクトで共有するようなマクロは、上記の通りpluginsフォルダを適当な場所に作成後、[inherit]のplugins_dirで指定するのが正しいやり方らしい。