Trac導入に挑戦
出典: Wikimura
既にSVNとTracはインストール済み。 公開しているポートは80番なので、それ以外のポートを使えば外部に公開されないらしい。 そこで、40000番ポートでSubversionとTracを利用できるようにする。
まずファイアウォールを設定し、40000番を開く。それができたらApacheでWebDAVの設定をする。
目次 |
Firewall設定
[1]を参考に、ファイアウォールを設定し、ポートを解放する。
- ポート: 40000
- プロトコル: tcp
system-config-securitylevel 1. 十字キーでカーソルを移動し、customizeでエンターを押す。 2. Firewall Configuration - Customize 画面へ移動 3. Alloc incoming の Other ports に 開放したいポート:プロトコル の書式で記入
Subversionリポジトリ設定
リポジトリを作ること自体は難しくないが、パスワードとかアクセス権の管理が良く分からない。 [2] [3]によると、パスワードの設定とリポジトリへのアクセス権は別々に設定できるらしい。更に、[4]によれば、グループというのも作れるらしい。 そういえばVisualSVNでGUIで設定できた。
まずリポジトリの置き場を決める。「/var」以下に置くのもありだが、今回は「/usr/local/share」以下に置くことにした。テスト用に「sandbox」というリポジトリを作る。
なぜかは分からないが、パーミッションを変更しないと「 Can't open db/txn-current-lock - permission denied」と言われてしまう[5]。suEXECのせい?
mkdir /usr/local/share/svn cd /usr/local/share/svn svnadmin create sandbox chmod -R 770 sandbox *
ユーザ認証
なお、Apache設定時にパスワードの記述されたファイルを指定する際、[6]ではAuthDigestFileで指定すると書いてあったが、[7]によれば、改名されてAuthUserFileになったらしい。
まずはDigestファイル「.htdigest」を作成する。
- htdigest -c passwordfile realm username
- -c: パスワードファイルを新規作成(既にある場合上書きされる)
- realm: httpd.conf での「AuthName」に一致するよう設定するらしい[8]。
- username: ユーザ名
cd /usr/local/share/svn htdigest -c .htdigest 'SVN Repositories' test
アクセス権設定
.htaccessのようなもので、リポジトリへのアクセスを設定する。
apacheのconfでアクセス設定のファイルを指定してやることで適用されるらしい。 (リポジトリのconf/authzは指定しなければ無視されるということ) 管理のしやすさを考え、全てのリポジトリの設定を1つのファイルで定義する。
[9]を参考に設定する。
テスト用リポジトリ「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をインクルードしてくれるので、 自動で読まれるようになる。
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と共通にしてやってみる。
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 TracUriRoot /trac
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」を探したが見当たらず。 [10]を参考に、自分でディレクトリを作ってみたが、うまくいかない。 所有者とグループを「webmaster:apache」にしたり、アクセス権を色々変更するが、やはりうまくいかない。
そんな中、「Can't extract file(s) to egg cache」で検索をしてヒットした [11]でよりよい解決法を紹介していた。 そこで参照されていたのが [12]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

