Sarge で trac を使う(まだ途中)

まずは、最新の状況にアップデートをする。aptline も testting から sarge に書き換えておく。
この前インストールしたばかりだと思っていた Sarge も、フリーズに入ってから駆け込みアップデートが続いているようなので、ごっそりアップデートされた。光なので速いのだけが救いだ。

aptlineにtracを加えて、まずは何が芋づるでインストールされるのか調べる。いまのところ、Sargeは素に近い環境だ。

# apt-get install trac -s
The following extra packages will be installed:
db4.2-util libapr0 libneon24 libsqlite0 libsvn0 python-clearsilver
python-sqlite python2.3-clearsilver python2.3-sqlite python2.3-subversion
subversion
Suggested packages:
subversion-tools python-docutils
Recommended packages:
python-egenix-mxdatetime apache2 httpd

こんな感じなので、インストールするコマンドはこうした。

# apt-get install trac subversion-tools python-egenix-mxdatetime apache2

入ったパッケージは、こんな感じ。

Need to get 5625kB of archives.
After unpacking 16.4MB of additional disk space will be used.

Get:1 http://ftp.jp.debian.org sarge/main libsqlite0 2.8.16-1 [176kB]
Get:2 http://ftp.jp.debian.org sarge/main libapr0 2.0.54-4 [130kB]
Get:3 http://ftp.jp.debian.org sarge/main openssl 0.9.7e-3 [906kB]
Get:4 http://ftp.jp.debian.org sarge/main ssl-cert 1.0-11 [6904B]
Get:5 http://ftp.jp.debian.org sarge/main apache2-utils 2.0.54-4 [90.5kB]
Get:6 http://ftp.jp.debian.org sarge/main apache2-common 2.0.54-4 [798kB]
Get:7 http://ftp.jp.debian.org sarge/main apache2-mpm-worker 2.0.54-4 [206kB]
Get:8 http://ftp.jp.debian.org sarge/main apache2 2.0.54-4 [32.9kB]
Get:9 http://ftp.jp.debian.org sarge/main db4.2-util 4.2.52-18 [58.4kB]
Get:10 http://ftp.jp.debian.org sarge/main libneon24 0.24.7.dfsg-1 [81.4kB]
Get:11 http://ftp.jp.debian.org sarge/main libsvn0 1.1.4-2 [452kB]
Get:12 http://ftp.jp.debian.org sarge/main python2.3-clearsilver 0.9.13-3 [79.7kB]
Get:13 http://ftp.jp.debian.org sarge/main python-clearsilver 0.9.13-3 [4618B]
Get:14 http://ftp.jp.debian.org sarge/main python2.3-egenix-mxtools 2.0.6-1 [86.7kB]
Get:15 http://ftp.jp.debian.org sarge/main python2.3-egenix-mxdatetime 2.0.6-1 [104kB]
Get:16 http://ftp.jp.debian.org sarge/main python-egenix-mxdatetime 2.0.6-1 [6044B]
Get:17 http://ftp.jp.debian.org sarge/main python2.3-sqlite 1.0.1-2 [29.1kB]
Get:18 http://ftp.jp.debian.org sarge/main python-sqlite 1.0.1-2 [2608B]
Get:19 http://ftp.jp.debian.org sarge/main subversion 1.1.4-2 [976kB]
Get:20 http://ftp.jp.debian.org sarge/main python2.3-subversion 1.1.4-2 [1130kB]Get:21 http://ftp.jp.debian.org sarge/main trac 0.8.1-3 [197kB]
Get:22 http://ftp.jp.debian.org sarge/main subversion-tools 1.1.4-2 [71.9kB]
Fetched 5625kB in 8s (700kB/s)

Subversionリポジトリを作成する。svnって、いままでマトモに使ったことないや(^^;。
yamashitaさんのをそのままなぞってやってみるか。

x31:~# mkdir /var/svn
x31:~# cd /var/svn/
x31:/var/svn# svnadmin create testpj

作ったtestpjの中にはこんなのが入っている。

x31:/var/svn# find ./
./
./testpj
./testpj/dav
./testpj/locks
./testpj/locks/db.lock
./testpj/locks/db-logs.lock
./testpj/hooks
./testpj/hooks/start-commit.tmpl
./testpj/hooks/pre-commit.tmpl
./testpj/hooks/pre-revprop-change.tmpl
./testpj/hooks/post-commit.tmpl
./testpj/hooks/post-revprop-change.tmpl
./testpj/conf
./testpj/conf/svnserve.conf
./testpj/README.txt
./testpj/db
./testpj/db/fs-type
./testpj/db/DB_CONFIG
./testpj/db/__db.001
./testpj/db/__db.002
./testpj/db/__db.003
./testpj/db/__db.004
./testpj/db/__db.005
./testpj/db/log.0000000001
./testpj/db/nodes
./testpj/db/revisions
./testpj/db/transactions
./testpj/db/copies
./testpj/db/changes
./testpj/db/representations
./testpj/db/strings
./testpj/db/uuids
./testpj/format

tracプロジェクトを作成する。
trac-adminのヘルプを出してみる。なるほど、このツールで管理の大半ができるようになっているようだ。

x31:/var# trac-admin --help
trac-admin - The Trac Administration Console 0.8.1

Usage: trac-admin [command [subcommand] [option ...]]

Invoking trac-admin without command starts interactive mode.

about -- Shows information about trac-admin
help -- Show documentation
initenv -- Create and initialize a new environment interactively
initenv -- Create and initialize a new environment from arguments
hotcopy -- Make a hot backup copy of an environment.
resync -- Re-synchronize trac with the repository
upgrade -- Upgrade database to current version.
wiki list -- List wiki pages
wiki export [file] -- Export wiki page to file or stdout
wiki import [file] -- Import wiki page from file or stdin
wiki dump -- Export all wiki pages to files named by title
wiki load -- Import all wiki pages from directory
wiki upgrade -- Upgrade default wiki pages to current version
permission list -- List permission rules
permission add [action] [...] -- Add a new permission rule
permission remove [action] [...] -- Remove permission rule
component list -- Show available components
component add -- Add a new component
component rename -- Rename a component
component remove -- Remove/uninstall component
component chown -- Change component ownership
priority list -- Show possible ticket priorities
priority add -- Add a priority value option
priority change -- Change a priority value
priority remove -- Remove priority value
severity list -- Show possible ticket priorities
severity add -- Add a severity value option
severity change -- Change a severity value
severity remove -- Remove severity value
version list -- Show versions
version add [time] -- Add version
version rename -- Rename version
version time

Visit the Trac Project at http://trac.edgewall.com/

Trac is brought to you by:

                                                                                                                                • -

E d g e w a l l S o f t w a r e
Professional Linux and software development services
Read more at http://www.edgewall.com/

                                                                                                                                • -

yamashitaさんのBlogを見ると、不足しているパラメータは対話的に聞いてくるみたいだ。
テンプレートを指定する時に使う/usr/share/trac/の下は、こんな感じ。サイトのデフォルト環境が入っているようだ。

cgi-bin htdocs templates wiki-default

こちらは一発で生成してみる。

x31:/var# trac-admin /var/trac/testpj initenv testpj /var/svn/testpj /usr/share/trac/templates
Creating and Initializing Project
Failed to create environment. [Errno 2] No such file or directory: '/var/trac/testpj'
Failed to initialize database. 1

だめだな。initenvは対話的に生成しないとダメなのかな。

x31:/var# trac-admin /var/trac/testpj initenv Creating a new Trac environment at /var/trac/testpj

Trac will first ask a few questions about your environment
in order to initalize and prepare the project database.

Please enter the name of your project.
This name will be used in page titles and descriptions.

Project Name [My Project]> testpj

Please specify the absolute path to the project Subversion repository.
Repository must be local, and trac-admin requires read+write
permission to initialize the Trac database.

Path to repository [/var/svn/test]> /var/svn/testpj

Please enter location of Trac page templates.
Default is the location of the site-wide templates installed with Trac.

Templates directory [/usr/share/trac/templates]>
Creating and Initializing Project
Failed to create environment. [Errno 2] No such file or directory: '/var/trac/testpj'
Failed to initialize database. 1

ディレクトリは先に作っておく必要があるらしい。パーミッションとかはどうすればいいのかな。やっぱwww-dataだろうか。
そのへんはダメだたらエラー吐くだろうし、そのまま進む。

x31:/var# mkdir /var/trac
x31:/var# trac-admin /var/trac/testpj initenv testpj /var/svn/testpj /usr/share/trac/templates
Creating and Initializing Project
Inserting default data
Configuring Project
trac.repository_dir
trac.templates_dir
project.name
Installing wiki pages
/usr/share/trac/wiki-default/TracImport => TracImport
/usr/share/trac/wiki-default/TracRss => TracRss
/usr/share/trac/wiki-default/TracMultipleProjects => TracMultipleProjects
/usr/share/trac/wiki-default/TracBackup => TracBackup
/usr/share/trac/wiki-default/TracTimeline => TracTimeline
/usr/share/trac/wiki-default/TracTickets => TracTickets
/usr/share/trac/wiki-default/TracInstall => TracInstall
/usr/share/trac/wiki-default/WikiRestructuredText => WikiRestructuredText
/usr/share/trac/wiki-default/WikiPageNames => WikiPageNames
/usr/share/trac/wiki-default/TracSyntaxColoring => TracSyntaxColoring
/usr/share/trac/wiki-default/TracPermissions => TracPermissions
/usr/share/trac/wiki-default/TracSupport => TracSupport
/usr/share/trac/wiki-default/WikiHtml => WikiHtml
/usr/share/trac/wiki-default/TracIni => TracIni
/usr/share/trac/wiki-default/TracModPython => TracModPython
/usr/share/trac/wiki-default/WikiFormatting => WikiFormatting
/usr/share/trac/wiki-default/TracBrowser => TracBrowser
/usr/share/trac/wiki-default/TracTicketsCustomFields => TracTicketsCustomFields /usr/share/trac/wiki-default/TracNotification => TracNotification
/usr/share/trac/wiki-default/TracUnicode => TracUnicode
/usr/share/trac/wiki-default/TracAccessibility => TracAccessibility
/usr/share/trac/wiki-default/TracInstallPlatforms => TracInstallPlatforms
/usr/share/trac/wiki-default/TracReports => TracReports
/usr/share/trac/wiki-default/TracEnvironment => TracEnvironment
/usr/share/trac/wiki-default/WikiMacros => WikiMacros
/usr/share/trac/wiki-default/CamelCase => CamelCase
/usr/share/trac/wiki-default/WikiProcessors => WikiProcessors
/usr/share/trac/wiki-default/TracSearch => TracSearch
/usr/share/trac/wiki-default/TracQuery => TracQuery
/usr/share/trac/wiki-default/WikiStart => WikiStart
/usr/share/trac/wiki-default/TracLogging => TracLogging
/usr/share/trac/wiki-default/SandBox => SandBox
/usr/share/trac/wiki-default/WikiRestructuredTextLinks => WikiRestructuredTextLinks
/usr/share/trac/wiki-default/TracLinks => TracLinks
/usr/share/trac/wiki-default/TracRoadmap => TracRoadmap
/usr/share/trac/wiki-default/TracStandalone => TracStandalone
/usr/share/trac/wiki-default/TracUpgrade => TracUpgrade
/usr/share/trac/wiki-default/RecentChanges => RecentChanges
/usr/share/trac/wiki-default/TracAdmin => TracAdmin
/usr/share/trac/wiki-default/TracGuide => TracGuide
/usr/share/trac/wiki-default/TracChangeset => TracChangeset
/usr/share/trac/wiki-default/TitleIndex => TitleIndex
/usr/share/trac/wiki-default/WikiNewPage => WikiNewPage
/usr/share/trac/wiki-default/TracWiki => TracWiki
Indexing repository

                                                                                                                                        • -

Project database for 'testpj' created.

Customize settings for your project using the command:

trac-admin /var/trac/testpj

Don't forget, you also need to copy (or symlink) "trac/cgi-bin/trac.cgi"
to you web server's /cgi-bin/ directory, and then configure the server.

If you're using Apache, this config example snippet might be helpful:

Alias /trac "/wherever/you/installed/trac/htdocs/"

SetEnv TRAC_ENV "/var/trac/testpj"

# You need something like this to authenticate users

AuthType Basic
AuthName "testpj"
AuthUserFile /somewhere/trac.htpasswd
Require valid-user

The latest documentation can also always be found on the project website:
http://projects.edgewall.com/trac/

Congratulations!

こんどはうまくいった。
パッケージインストーラーで /var/tarc くらいは作っておいてほしいかも。どこにでも置けるようにわざわざ作っていないのかな。
出来たファイルはこんな感じ。

x31:/var/trac# find ./
./
./testpj
./testpj/conf
./testpj/conf/trac.ini
./testpj/log
./testpj/log/trac.log
./testpj/attachments
./testpj/templates
./testpj/templates/README
./testpj/templates/site_header.cs
./testpj/templates/site_footer.cs
./testpj/templates/site_css.cs
./testpj/wiki-macros
./testpj/VERSION
./testpj/README
./testpj/db
./testpj/db/trac.db

apacheの設定についても考えなくても生成してくれるので、これをコピペしてパス修正だけすればいいようだ。
/usr/share/trac/をそのまま使う方法で行くことにする。複数のプロジェクトを運用する場合は、そういう使い方ではいけないのかもしれない。
apache設定を追加する。2.0系は正直なところ慣れていない。
apache2.confにはコンテンツ毎の固有の設定は書かないようになっているようだ。sites-enabled配下の内容を読み込むように指定されていた。enabled配下のファイルは、sites-available配下のファイルのシンボリックリンクになっている。init.d のように実体と起動順序などをわけるようになっているのかな。
アクセスコントロールの機能はtrac自身が持っていると思われるので、今回は設定しなくてもいいだろう。なんか半端な設定のような気がするので、Directory を設定して htdocs が見えるようにしておく。

x31:/etc/apache2/sites-available# cp default trac
x31:/etc/apache2/sites-available# vi trac

Alias /trac "/usr/share/trac/htdocs/"


Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all


SetEnv TRAC_ENV "/var/trac/testpj"

# You need something like this to authenticate users
#
# AuthType Basic
# AuthName "testpj"
# AuthUserFile /somewhere/trac.htpasswd
# Require valid-user
#

x31:/etc/apache2/sites-available# ln -s /etc/apache2/sites-available/trac /etc/apache2/sites-enabled/010-trac

apache2 の cgi-bin のデフォルトは"/usr/lib/cgi-bin/"のようなので、trac.cgiのシンボリックリンクを作っておく。

x31:/# ln -s /usr/share/trac/cgi-bin/trac.cgi /usr/lib/cgi-bin/trac.cgi

apache はデフォルトではインストール直後には起動していないようだ。起動するようにrc.2dには書かれるが、設定をきちんとしてやらないと起動しないようになっている。

# /etc/init.d/apache2 start
Not starting apache2 - edit /etc/default/apache2 and change NO_START to be 0.

/etc/default/apache2 の NO_START を 0 に書き換える。

# vi /etc/default/apache2

# 0 = start on boot; 1 = don't start on boot
NO_START=0

ようやく起動できるかな。

x31:/etc/apache2# /etc/init.d/apache2 start
Starting web server: Apache2.

ブラウザから、"http://localhost/cgi-bin/trac.cgi"にアクセスしてみる。

Oops...

Trac detected an internal error:

The web server user requires read _and_ write permission
to the database /var/trac/testpj/db/trac.db and the directory this file is located in.
Traceback (most recent call last):
File "/usr/lib/python2.3/site-packages/trac/core.py", line 531, in cgi_start
real_cgi_start()
File "/usr/lib/python2.3/site-packages/trac/core.py", line 513, in real_cgi_start
env = open_environment()
File "/usr/lib/python2.3/site-packages/trac/core.py", line 190, in open_environment
version = env.get_version()
File "/usr/lib/python2.3/site-packages/trac/Environment.py", line 160, in get_version
cnx = self.get_db_cnx()
File "/usr/lib/python2.3/site-packages/trac/Environment.py", line 84, in get_db_cnx
raise EnvironmentError, \
EnvironmentError: The web server user requires read _and_ write permission
to the database /var/trac/testpj/db/trac.db and the directory this file is located in.

やっぱり、パーミッション問題が出てきたな。

x31:/var/trac/testpj# chown -R www-data.www-data ./

画面は出てきた。
でも、timelineやBrouseSourceを選ぶとエラーになる。

('Berkeley DB error while opening environment for filesystem /var/svn/testpj/db:\nPermission denied', 160029)

Python traceback

Traceback (most recent call last):
File "/usr/lib/python2.3/site-packages/trac/core.py", line 531, in cgi_start
real_cgi_start()
File "/usr/lib/python2.3/site-packages/trac/core.py", line 526, in real_cgi_start
dispatch_request(path_info, args, req, env)
File "/usr/lib/python2.3/site-packages/trac/core.py", line 439, in dispatch_request
module = module_factory(args, env, database, req)
File "/usr/lib/python2.3/site-packages/trac/core.py", line 175, in module_factory
pool, rep, fs_ptr = open_svn_repos(repos_dir)
File "/usr/lib/python2.3/site-packages/trac/core.py", line 458, in open_svn_repos
rep = repos.svn_repos_open(repos_dir, pool)
SubversionException: ('Berkeley DB error while opening environment for filesystem /var/svn/testpj/db:\nPermission denied', 160029)

trac.cgi は、www-data で実行されていないのかな...
とりあえずの回避策として、書けるようにしてみる?
それもなぁ...
とりあえず、こんなところで、作業中断。
mod_pyhtonはいらないのかな?
apache2 のモジュールの追加と削除は a2enmod/a2dismod でやるようだ。
mod_pythonの使いかたは本家にドキュメントがあった。そのうちやってみよう。