Trac設定メモ
出典: Wikimura
バージョン管理ソフトウェアのSubversion[1]が準備できたので、今度はTracを導入する。Tracの導入にはyumが使えるが、日本語版は無かったと思うので手動で設定する[2]。
TracはPythonで書かれたものなので、Python周りの設定もやる。
目次 |
Trac日本語版
[2]から最新版をダウンロードし、解答する。INSTALLというファイルにインストール方法が書かれている。
wget http://www.i-act.co.jp/project/products/downloads/Trac-0.11.5.ja1.zip unzip Trac-0.11.5.ja1.zip
Python周りの設定
TracのINSTALLには、必要条件として以下が挙げられていた。SubversionのSWIGは既に[1]でインストールしてある。Pythonは2.4系で、Apacheにはmod_pythonが入っていたので、それ以外をインストールする。その前に、ez_setupというツールを入れておく。
- ez_setup
- setuptools
- Genshi
- PySQLite
- ついでにSQLite
* Python, version >= 2.3. * setuptools, version >= 0.6 * Genshi, version >= 0.5 * Optionally, Subversion, version >= 1.1.x and the Subversion SWIG Python bindings (not PySVN, that's something different). * One of the following Python bindings, depending on the database used: * PySQLite version 2.x for SQLite 3.x (is part of the standard library starting with Python 2.5) * psycopg2 version 2.0.x for the PostgreSQL database * MySQLdb, version 1.2.2 for the MySQL database * A web server capable of executing CGI/FastCGI scripts, or Apache HTTPD with mod_python or mod_wsgi. (Trac also comes with a standalone server, tracd)
ez_setup
.eggの形式で配布されたものをeasy_installで簡単にインストールできるようにするツールらしい。
wget http://peak.telecommunity.com/dist/ez_setup.py python ez_setup.py
setuptools
setuptools公式サイト[3]から持ってくる。これもegg形式で持ってくれば楽。
wget http://pypi.python.org/packages/2.4/s/setuptools/setuptools-0.6c11-py2.4.egg easy_install setuptools-0.6c11-py2.4.egg
Genshi
Genshiはテンプレートエンジンと呼ばれる機能を提供するらしい。 最近のバージョンのTracから使われるようになった。 公式サイトからダウンロードする[4] これもegg形式があるので利用する。研究室のサーバはx86_64系なので間違わないようにする。
wget http://ftp.edgewall.com/pub/genshi/Genshi-0.5.1-py2.4-linux-x86_64.egg easy_install Genshi-0.5.1-py2.4-linux-x86_64.egg
0.5.1はダメ?
この後実際に動かそうとしてエラーに見舞われた。原因は良く分からなかったが、うっかりGenshi 0.5をインストールしてしまったら動くようになった。 Genshi 0.5.1に戻したところ、動作しなくなった。 また、easy_installはコンポーネント名とバージョンを指定すれば勝手にホストに適するものを持ってきてくれることが分かった。 始めからこうすればよかった。
なお、Genshi 0.5の場合、--always-unzipをつけないといけないらしい。
easy_install --always-unzip Genshi==0.5
SQLite
Trac内のWiki機能を提供するのに使われる?データベースソフトウェア。 元々サーバには3.6.3が入っていたが、最新版の3.6.19を使うことにした。 まずは公式サイトからソースを持ってくる[5]
この後インストールするPySqliteの解説に、SQLiteをビルドするときは「スレッドセーフ」にすること、と書いてあった [6]。 しかし、スレッドセーフにするconfigurationスイッチはデフォルトでyesとなっていたので、特にオプションはいらない模様。
make checkは自動で行われるらしい。
wget http://www.sqlite.org/sqlite-amalgamation-3.6.19.tar.gz tar -xvf sqlite-amalgamation-3.6.19.tar.gz cd sqlite-amalgamation-3.6.19 ./configure --prefix=/usr/local make make install
PySqlite
[7]からダウンロードし、 [8]を参考にインストールを行った。
wget http://pysqlite.googlecode.com/files/pysqlite-2.5.5.tar.gz tar -xvf pysqlite-2.5.5.tar.gz cd pysqlite-2.5.5 python setup.py build python setup.py install --prefix=/usr/local
[8]によると、pythonから正常にインポートできれば良いのだという。 パスを追加している部分で、実際にインストールされた場所を指定するらしい。 ここでは、「/usr/local/lib64/python2.4/site-packages」がインストール場所となっている。 Pythonのバージョンがあがったり、x86_64系ではない場合、場所が変わってくる。
$python
>>> import sys
>>> sys.path.append('/usr/local/lib64/python2.4/site-packages/')
>>> import pysqlite2
Trac本体
インストール
Tracのソースがあるディレクトリで以下を実行する。--prefixオプションをつければインストール場所が指定できたのだが、忘れてしまった。
$ python setup.py build $ python setup.py test ... Ran 746 tests in 20.053s OK $ python setup.py install
確認
WebDAVの設定やファイアウォールの設定は勝手にやったらまずいので、とりあえずはプロジェクトを用意できるかどうかを確認する。 initenv(環境の用意)がうまくいったので、ひとまず安心。
cd ~
mkdir trac-test
cd trac-test
svnadmin create ./repo
trac-admin ./trac initenv
以下オプション(無記入はデフォルト値になる)
Project Name [My Project]> Test
Database connection string [sqlite:db/trac.db]>
Repository type [svn]>
Path to repository [/path/to/repos]> ~/trac-test/repo
....
The latest documentation can also always be found on the project
website:
http://trac.edgewall.org/
Congratulations!
試行錯誤
既にSVNとTracはインストール済み。 公開しているポートは80番なので、それ以外のポートを使えば外部に公開されないらしい。 そこで、40000番ポートでSubversionとTracを利用できるようにする。
まずファイアウォールを設定し、40000番を開く。それができたらApacheでWebDAVの設定をする。
Firewall設定
[9]を参考に、ファイアウォールを設定し、ポートを解放する。
- ポート: 40000
- プロトコル: tcp
system-config-securitylevel 1. 十字キーでカーソルを移動し、customizeでエンターを押す。 2. Firewall Configuration - Customize 画面へ移動 3. Alloc incoming の Other ports に 開放したいポート:プロトコル の書式で記入
Subversion設定
リポジトリを作ること自体は難しくないが、パスワードとかアクセス権の管理が良く分からない。 [10] [11]によると、パスワードの設定とリポジトリへのアクセス権は別々に設定できるらしい。更に、[12]によれば、グループというのも作れるらしい。 そういえばVisualSVNでGUIで設定できた。
リポジトリ設置
まずリポジトリの置き場を決める。「/var」以下に置くのもありだが、今回は「/usr/local/share」以下に置くことにした。テスト用に「sandbox」というリポジトリを作る。 なぜかは分からないが、パーミッションを変更しないと「 Can't open db/txn-current-lock - permission denied」と言われてしまう[13]。suEXECのせい?(SetEnvも使えなかったし)
mkdir /usr/local/share/svn cd /usr/local/share/svn svnadmin create sandbox chmod -R 770 sandbox *
ユーザ認証
なお、Apache設定時にパスワードの記述されたファイルを指定する際、[14]ではAuthDigestFileで指定すると書いてあったが、[15]によれば、改名されてAuthUserFileになったらしい。
まずはDigestファイル「.htdigest」を作成する。
- htdigest -c passwordfile realm username
- -c: パスワードファイルを新規作成(既にある場合上書きされる)
- realm: httpd.conf での「AuthName」に一致するよう設定するらしい[16]。
- username: ユーザ名
cd /usr/local/share/svn htdigest -c .htdigest 'SVN Repositories' test
アクセス権設定
.htaccessのようなもので、ユーザごとのリポジトリへのアクセス権を設定する。
apacheのconfでアクセス設定のファイルを指定してやることで適用されるらしい。 (リポジトリのconf/authzは指定しなければ無視されるということ) 管理のしやすさを考え、全てのリポジトリの設定を1つのファイルで定義する。
[17]を参考に設定する。
テスト用リポジトリ「sandbox」のルート以下に対し、全てのユーザの読み書きを許可させる。
許可は指定したところ以下全てに適用されるらしい。
[sandbox:/] * = rw
以下のようにしたところ、test以下への書き込みは禁止できた。
[sandbox:/] * = rw [sandbox:/test] * = r
以下のようにしたところ、test以下への書き込みは可能だった。 より詳細な指定の方が優先されるのだろうか?
[sandbox:/test] * = rw [sandbox:/] * = r
Apache設定
外部に公開しないよう、バーチャルホストでポートを指定して設定してみる。
設定ファイルを「/etc/httpd/conf.d/trac.conf」とする。 こうすると、デフォルトのhttpd.confはconf.dディレクトリ以下の*.confをインクルードしてくれるので、 自動で読まれるようになる。
まずはSubversionだけテストするための設定をする。
Subversion用設定を書く
SVNParentPathでSVNリポジトリの入ったディレクトリを指定する。
前述したように、認証形式(AuthType)にはDigestを選んだ。 AuthNameは、htdigestで指定したrealmと一致させなくてはならない。 有効なユーザのみ(つまり匿名はだめ)をアクセス可能にする。
アクセス権設定ファイルも指定する。
vi /etc/httpd/conf.d/trac.conf
Listen 40000
LoadModule dav_svn_module /usr/lib64/httpd/modules/mod_dav_svn.so
LoadModule authz_svn_module /usr/lib64/httpd/modules/mod_authz_svn.so
<VirtualHost *:40000>
Alias svn "/usr/local/share/svn"
<IfModule mod_dav.c>
<Location /svn>
DAV svn
SVNParentPath /usr/local/share/svn
AuthType Digest
AuthName "SVN Repositories"
AuthUserFile /usr/local/share/svn/.htdigest
AuthzSVNAccessFile /usr/local/share/svn/.htaccess
Require valid-user
</Location>
</IfModule>
</VirtualHost>
Tracも含めたApache設定
ユーザはSVNと共通にしてやってみる。 その前にディレクトリ構造を変える。
- /usr/local/share/WebDAV:
- .htdigest: 認証ファイル
- .htaccess: SVNリポジトリのアクセス権
- svn: 複数のリポジトリが入る
- trac: 複数のtracプロジェクトが入る
設定ファイル
SubversionとTracでAuthNameを揃えること。.htdigestを作るときのrealmはAuthNameと一致すること。
注:この後起こったパーミッションエラーに対処するために、PYTHON_EGG_CACHEの設定を追加した。
Listen 40000
LoadModule dav_svn_module /usr/lib64/httpd/modules/mod_dav_svn.so
LoadModule authz_svn_module /usr/lib64/httpd/modules/mod_authz_svn.so
<VirtualHost *:40000>
Alias svn "/usr/local/share/WebDAV/svn"
<IfModule mod_dav.c>
<Location /svn>
DAV svn
SVNParentPath /usr/local/share/WebDAV/svn
AuthType Digest
AuthName "Kimura-lab WebDAV"
AuthUserFile /usr/local/share/WebDAV/.htdigest
AuthzSVNAccessFile /usr/local/share/WebDAV/.htaccess
Require valid-user
</Location>
</IfModule>
<IfModule mod_python.c>
Alias trac "/usr/local/share/WebDAV/trac"
<Location /trac>
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption PYTHON_EGG_CACHE /tmp/trac/egg-cache
PythonOption TracEnvParentDir /usr/local/share/WebDAV/trac
</Location>
<LocationMatch "/trac/[^/]+/login">
AuthType Digest
AuthName "Kimura-lab WebDAV"
AuthUserFile /usr/local/share/WebDAV/.htdigest
Require valid-user
</LocationMatch>
</IfModule>
</VirtualHost>
エラー発生
500 Internal server errorがでてしまう。「/var/log/httpd/error_log」で確認をしたところ、以下のようなメッセージがあった。
PythonHandler trac.web.modpython_frontend: ExtractionError: Can't extract file(s) to egg cache The following error occurred while trying to extract file(s) to the Python egg cache: [Errno 13] Permission denied: '/usr/local/share/WebDAV/trac/.egg-cache' The Python egg cache directory is currently set to: /usr/local/share/WebDAV/trac/.egg-cache Perhaps your account does not have write access to this directory? You can change the cache directory by setting the PYTHON_EGG_CACHE environment variable to point to an accessible directory.
Genshi 0.5インストールで解決
パーミッションエラーとあったので、「/usr/local/share/WebDAV/trac/.egg-cache」を探したが見当たらず。 [18]を参考に、自分でディレクトリを作ってみたが、うまくいかない。 所有者とグループを「webmaster:apache」にしたり、アクセス権を色々変更するが、やはりうまくいかない。
そんな中、「Can't extract file(s) to egg cache」で検索をしてヒットした [19]でよりよい解決法を紹介していた。 そこで参照されていたのが [20]Genshiの再インストールというもの。
これを試したところ、うまくいくようになった。これは古いバージョンなので、最新版の0.5.1で同様にやってみたのだが、Internal Server Errorとなってしまった。 ということで、とりあえず今は0.5にしておくことにし、0.5.1は使わないことにした。さほど変わりはないだろうし...
$ easy_install --always-unzip Genshi==0.5 Searching for Genshi==0.5 Best match: Genshi 0.5 Processing Genshi-0.5-py2.4-linux-x86_64.egg Removing Genshi 0.5.1 from easy-install.pth file Adding Genshi 0.5 to easy-install.pth file Using /usr/lib/python2.4/site-packages/Genshi-0.5-py2.4-linux-x86_64.egg Processing dependencies for Genshi==0.5 Finished processing dependencies for Genshi==0.5
根本的な解決方法
[21]によると、 ちゃんとキャッシュの置き場を指定してやら無くてはならないらしい。 その方法は以前はSetEnvを使うというものだった。これが0.11.2以降PythonOptionでPYTHON_EGG_CACHEを指定するようになったらしい。
以下にしたら動くようになった(場所が不適当かもしれないが...)。
/tmp/trac以下のパーミッションは770にした。660ではダメだった。
$ vi /etc/httpd/conf.d/trac.conf(一部)
<Location /trac>
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption PYTHON_EGG_CACHE /tmp/trac/egg-cache
PythonOption TracEnvParentDir /usr/local/share/WebDAV/trac
</Location>
PYTHON_EGG_CACHEの指定により、Genshi 0.5.1でも動くようになった。
動作確認
Apacheからアクセスするために、所有者を変更しないとダメらしい。 書き込み権限が無いといけないらしいので、770にしておく。(660ではダメだった)
管理者ユーザ「administrator」を認証ユーザに追加し、Tracでの管理者権限「TRAC_ADMIN」を与える。
cd /usr/local/share/WebDAV/trac
trac-admin sandbox initenv
Project Name: Sandbox Project
Database connection string: sqlite:db/trac.db(デフォルト値)
Repository type: svn(デフォルト値)
Path to repository: /usr/local/share/WebDAV/svn/sandbox
chown -R webmaster:apache sandbox
chmod -R 770 sandbox
trac-admin sandbox permission add administrator TRAC_ADMIN
研究室内からの場合、ここからアクセス可能。 このsandboxプロジェクトは、SubversionやTracに慣れるためのスペースとして活用する。
その他の設定
数式 TracMathPlugin
TracのWikiでも数式が利用できるようにする。
svn co http://trac-hacks.org/svn/tracmathplugin . cd math python setup.py bdist_egg python setup.py install
TracMathの設定が必要なので、共通の設定として用意しておく。
/usr/local/share/WebDAV/trac/common.ini [component] tracmath.* = enabled [tracmath] latex_cmd = /usr/bin/platex dvipng_cmd = /usr/bin/dvipng cache_dir = /tmp/tracmath max_png = 500 use_dollars = enabled
既存のプロジェクトから共通の設定を読み込ませるには、inheritセクションのfileに共通設定ファイルへのパスを追加する。 相対パスでも可能らしい。
プロジェクト/conf/trac.ini [inherit] file = /usr/local/share/WebDAV/trac/common.ini
新規プロジェクトにはcomponentセクションが自動で付くらしい。その他の設定はデフォルト値が使われるらしい。 デフォルト値のままうまくいけばよいが、そうでない場合もあるため、念のため全てのプロジェクトはcommon.iniを継承したほうが良さそう。
ただinheritを使うと、ほとんど全ての設定が継承元に必要になるため、既存のtrac.iniをコピーして使った方が良さそう。
trac-admin プロジェクト名 initenv --inherit=/usr/local/share/WebDAV/trac/common.ini
Timing and Estimation
Burndown chartというのが面白いらしいので、それを入れるために必要なプラグインを入れる。
今回はSVNリポジトリから持ってきてインストールした。インストール後はtrac-adminでupgradeを行う必要がある。
svn co http://trac-hacks.org/svn/timingandestimationplugin/branches/trac0.11 ./timingandestimation cd timingandestimation python setup.py install trac-admin リポジトリ upgrade
Burndown chart
タスクと残り時間を図に表すもので、ソフトウェアの開発現場で使われているらしい。 [22]を持ってきて、easy_installでインストールする。
easy_install TracBurndown-1.9.2-py2.4.egg
既存のプロジェクトの場合は、インストール後trac管理画面から機能を有効化すると、trac-admin リポジトリ upgrade を行うことが要求される。
TOC Macro
Wikiの見出しから目次をつくるマクロ[23]。
easy_install http://trac-hacks.org/svn/tocmacro/0.11
作業まとめ
リポジトリ作成
cd /usr/local/share/svn svnadmin create リポジトリ名 chown -R webmaster:apache リポジトリ名 chmod -R 770 リポジトリ名
ユーザ追加
アクセス権設定
Todo
研究室内部向けにTracを提供したい。 そこで、外部に開いている80番ポート以外でTracを提供し、外部からはSSHトンネリングで研究室メンバのみにアクセス可能にする。 このためにはApache二重起動が必要と考えていたが、どうやらバーチャルホストでも可能らしい。ネットワーク管理者に問い合わせてみる。
プロンプトで操作せずにブラウザ上からプロジェクトの作成ができるようなツールがないか探す。 全てのメンバがUnixに習熟している訳ではないので、そうした人でも役立ててもらえるようにする必要がある。 (これができれば、現在メールで行われているプログラムや論文のやり取りを大幅に効率化できるはず) 更にユーザごとにTracを管理できるようにできれば、プライバシーも保護できる。ただ、難しい操作なしでできる必要がある。
TracのTeX機能を追加する。他にも何とかチャートとかあるらしいので、試してみる。
あとは周知活動...
参考文献
- ↑ 1.0 1.1 Subversion設定メモ
- ↑ 2.0 2.1 インタアクト株式会社公開資料 Trac日本語版
- ↑ setuptools公式サイト
- ↑ Genshi公式サイト ダウンロードページ
- ↑ SQLiteソース
- ↑ Building SQLite yourself
- ↑ [http://trac.edgewall.org/wiki/PySqlite PySqlite:
- ↑ 8.0 8.1 はまったところ/pysqliteのインストール
- ↑ CentOSのファイアーウォール設定を調整する
- ↑ Subversion、tracの覚え書き
- ↑ Apache+WebDAV+Subversion+SSLの設定(パッケージ利用)
- ↑ 12.0 12.1 ユーザー認証によるアクセス制限(ベーシック認証編)
- ↑ [http://www.svnforum.org/2017/viewtopic.php?t=6519 Can't open db/txn-current-lock - permission denied]
- ↑ 14.0 14.1 [http://www.atmarkit.co.jp/flinux/rensai/linuxtips/699apachedigest.html Apacheでユーザー認証を行うには(Digest認証編)]
- ↑ Apache Digest認証の設定で失敗
- ↑ Basic認証の認証領域 ~AuthName はただのテキストに非ず~
- ↑ SVN(Subversion) 導入設定 Memo
- ↑ trac+svnでプロジェクト管理(install編)
- ↑ trac0.11でPYTHON_EGG_CACHEが反映されずにはまる。
- ↑ Genshi 0.5 再インストール + trac 0.11rc2 日本語版
- ↑ Tracの使い方 -Timing and Estimationプラグイン-
- ↑ 最新版(1.9.2)
- ↑ TocMacro

