Subversion & Trac セットアップ@白箱
白箱に開発環境を・・・ということで、バージョン管理ツールであるSubversion(svn)と、
そのsvnのリポジトリブラウズ機能が強力なTracをセットアップしてみました。
Trac ってなに?という人はこちらが参考になるでしょう。
さて、セットアップは簡単かと思いきや、白箱のせいなのか私のせいなのか、けっこうハマりました。
当初は、問題なく sarge の subversion_1.1.4-2 + trac_0.8.1-3sarge7 + apache2 + mod-python2.3 でいけると考えてましたが、どうにも解決せず、結果的に sarge-backports の subversion_1.4.2dfsg1-2~bpo.1 + trac_0.10.3-1~bpo.1 と、apache2 + fastcgi に落ち着きました。
以下その顛末です。
まずはセオリー通り・・・ が、セグメンテーション違反!
Trac の公式サイトにあった以下のページを参考にセットアップを開始しました。
- TracOnDebianSarge – The Trac Project(English)
※ちなみに参考サイトの最初にTracの最新パッケージのあるapt-lineが書いてありますが、
x86用しかないので、白箱では使えませんでした(GLANTANKはarm)。
Debianおなじみのapt-getでパッケージをインストール
$ sudo apt-get install subversion $ sudo apt-get install trac $ sudo apt-get install libapache2-svn
mod_pythonで動かす予定(だった)なので、こちらもインストール
$ sudo apt-get install libapache2-mod-python2.3
途中でモジュールを有効にするか尋ねられるので、はいと答える。
Apache2 の mod_python モジュールを有効にしますか? <はい>
とりあえず参考サイトに書かれたとおりに進めていきます。
"project"というsvnの新規リポジトリを作成します。
$ sudo mkdir /var/svn $ sudo mkdir /var/svn/project $ sudo mkdir /tmp/project $ sudo mkdir /tmp/project/branches $ sudo mkdir /tmp/project/tags $ sudo mkdir /tmp/project/trunk $ sudo svnadmin create /var/svn/project --fs-type fsfs $ sudo svn import /tmp/project file:///var/svn/project -m "initial import" $ sudo rm -rf /tmp/project
apacheの設定ファイルを編集します。
(私の場合は、"/etc/apache2/sites-available/default"ですが、
編集するファイルは各人の環境により適宜読み替えてください。)
$ sudo vi /etc/apache2/sites-available/default
以下を追加します。
# SVN dir <Location /svn> DAV svn SVNParentPath /var/svn SVNAutoversioning on AuthType Basic AuthName "SVN - Your Project" AuthUserFile /etc/apache2/svn.passwd Require valid-user </Location>
言われたとおりリポジトリ内のファイルとディレクトリのパーミッションを変更し、
オーナー、グループをroot、www-dataとします。
$ sudo find /var/svn/project -type f -exec chmod 660 {} \; $ sudo find /var/svn/project -type d -exec chmod 2770 {} \; $ sudo chown -R root.www-data /var/svn/project
a2enmod コマンドを使って、apache2のdav,dav_fsモジュールを有効にします。(有効でない場合)
$ sudo a2enmod dav $ sudo a2enmod dav_fs
svn用htpasswdを設定します。
$ cd /etc/apache2 $ sudo htpasswd2 -c svn.passwd username (パスワードを設定)
ここまでで、一度apacheを再起動します。
$ sudo /etc/init.d/apache2 restart
Tracのコンテンツ(プロジェクトページ)を作成します。
/varにtracというディレクトリを作成し、さきほどのsvnのリポジトリに対応するプロジェクトページを作成します。
$ sudo mkdir /var/trac $ sudo trac-admin /var/trac/project initenv
途中の質問には以下のように答えます。
Project Name [My Project]> project Path to repository [/var/svn/test]> /var/svn/project Templates directory [/usr/share/trac/templates]>(リターンのみ)
これで通常なら各種コンテンツ用ファイル・ディレクトリが作成され
Congratulations!
と表示されるはずなのですが、私の白箱環境では
セグメンテーション違反
となってしまいました。。_no
sarge-backportsのパッケージを導入して、なんとかセットアップ成功
さて、いろいろと調べてみましたが、さっぱり解決策が見つかりません。
なんせ上のような参考サイトがあるのですから、きっと普通の(白箱じゃない)Debian sarge なら普通に動くのでしょう。。
ただ、svnのバージョンが1.4以上ならこの問題を回避できそう、ということはわかりました。
こりゃ、ソースインストールしかないかな。。と思いかけたそのとき、以下のサイトを発見しました。
というわけで、このサイトでは、tracの日本語版を入れるために、ソースインストールしていますが、
tracのパッケージもbackportsでいけるかも、と思いやってみました。
$ sudo vi /etc/apt/sources.list
以下を追加する
# backports deb http://backports.mithril-linux.org/ sarge-backports main
$ sudo vi /etc/apt/apt.conf
不要かなとも思ったけど、いわれたとおり設定。
APT::Cache-Limit "100000000"; APT::Default-Release "stable";
$ sudo vi /etc/apt/preferences
これも設定。
Package: * Pin: release a=stable Pin-Priority: 100 Package: * Pin: release a=stable-proposed-updates Pin-Priority: -1 Package: * Pin: release a=sarge-backports Pin-Priority: 110 Package: * Pin: release a=testing Pin-Priority: -1 Package: * Pin: release a=testing-proposed-updates Pin-Priority: -1 Package: * Pin: release a=unstable Pin-Priority: -1
$ sudo apt-get update
backportsのパッケージをインストールする前に、念のためstableのパッケージをremoveしておきます。
$ sudo apt-get --purge remove subversion $ sudo apt-get --purge remove trac
backportsのパッケージをインストールします。
パッケージ名のあとに明示的に /sarge-backports を指定しないとstableのパッケージになってしまうので注意。
$ sudo apt-get install subversion/sarge-backports libsvn0/sarge-backports libapache2-svn/sarge-backports
その他関連するパッケージもインストールします。
$ sudo apt-get install \ libapache2-mod-python \ python2.3-japanese-codecs \ python2.3-pysqlite2/sarge-backports \ python-docutils/sarge-backports \ python-clearsilver \ python2.3-clearsilver \ python2.3-setuptools/sarge-backports \ subversion-tools/sarge-backports \ python-subversion/sarge-backports \ sqlite3 \ enscript \ libsqlite3-0/sarge-backports
tracのbackports版をインストールします。
$ sudo apt-get install trac/sarge-backports
とりあえず再度svn関連の設定を行い、trac-adminコマンドに再挑戦すると・・・
$ sudo mkdir /var/trac $ sudo trac-admin /var/trac/project initenv
途中の質問(質問が少し増えています)
Project Name [My Project]> project Database connection string [sqlite:db/trac.db]>(リターンのみ) Repository type [svn]>(リターンのみ) Path to repository [/path/to/repos]> /var/svn/project Templates directory [/usr/share/trac/templates]>(リターンのみ) : : Congratulations!
今度は成功しました!
作成されたファイル・ディレクトリのパーミッションと、オーナーを変更します。
$ sudo find /var/trac/project -type f -exec chmod 660 {} \; $ sudo find /var/trac/project -type d -exec chmod 2770 {} \; $ sudo chown -R root.www-data /var/trac/project
$ sudo vi /etc/apache2/sites-available/default
ここでのポイントですが、
- ScriptAlias の前にAlias 行を記述すること
- 複数のプロジェクトページを運用する場合は、TRAC_ENV_PARENT_DIR で、それらプロジェクトページの親ディレクトリを指定する。
- LocationMatchで、すべてのプロジェクトページにBasic認証をかける
ちなみにBasic認証のhtpasswdファイルは、先で作成したsvn用htpasswdを流用しています。
# Trac Alias /trac/chrome/common "/usr/share/trac/htdocs" <Directory "/usr/share/trac/htdocs"> Order allow,deny Allow from all </Directory> ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi <Location "/trac"> SetEnv TRAC_ENV_PARENT_DIR "/var/trac" </Location> <LocationMatch "/trac/[^/]+/login"> AuthType Basic AuthName "Trac" AuthUserFile /etc/apache2/svn.passwd Require valid-user </LocationMatch>
設定を保存し、apacheを再起動します。
$ sudo /etc/init.d/apache2 restart
以上で、http://your.server.com/trac/project にアクセスすると、プロジェクトのトップページが表示されます。
また、http://your.server.com/tracでは、プロジェクトページへのリンクが表示されます。
とりあえずこれで、Tracのセットアップ成功です。
CGI激遅、mod_python競合問題 ・・・ fastcgiで落ち着く
上記方法により、問題なくTracがセットアップできた・・・かと思いきや、
Tracのプロジェクトページが遅い遅いw
はっきりいって使い物になりません。
まぁ白箱だしこんなもんか、とだいたい納得し、mod_pythonを導入しようとapt-getしたのですが・・・
$ sudo apt-get -s install libapache2-mod-python パッケージリストを読みこんでいます... 完了 : 中略 : 以下のパッケージは「削除」されます: trac : 以降略 :
trac削除されちゃ困るんですけど・・・w
どうもsarge-backportsを利用したせいか、依存関係でハマってしまったようです。
trac と libapache2-mod-python の依存関係をみてみると
$ apt-cache depends trac trac 依存: python 依存: python 依存: python-clearsilver |依存: python-pysqlite2 |依存: python-sqlite 依存: <python-psycopg2> 依存: python-subversion 依存: subversion 提案: enscript 提案: python-docutils 提案: libapache2-mod-python |推奨: apache2 apache2-mpm-perchild apache2-mpm-prefork apache2-mpm-worker 推奨: <httpd> bozohttpd aolserver aolserver4 apache apache-perl apache-ssl apache2-mpm-perchild apache2-mpm-prefork apache2-mpm-worker boa caudium dhttpd fnord lighttpd mathopd micro-httpd mini-httpd roxen4 thttpd thy 推奨: python-setuptools 競合: libapache2-mod-python2.3
$ apt-cache depends libapache2-mod-python libapache2-mod-python 依存: libapache2-mod-python2.3 依存: python 依存: python
となっており、libapache2-mod-python2.3がTracと競合しており、かたやlibapache2-mod-pythonはそのlibapache2-mod-python2.3に依存しているため、tracを削除しないとlibapache2-mod-pythonがインストールできない、ということらしいです(ややこしい)。
Tracは提案パッケージとして libapache2-mod-python をあげてるのになぁ。。
というわけで、mod_pythonは諦めざるをえなかったのですが、要は表示が速くなればいいので、fastcgiをインストールすることにしました。
$ sudo apt-get install libapache2-mod-fastcgi
特に依存関係とかでつまづくことなくインストール完了。
a2enmod でモジュールを有効化。
$ sudo a2enmod fastcgi
apache設定ファイル内のTracの設定をfastcgi向けに修正します。
$ sudo vi /etc/apache2/sites-available/default
この設定だけはバーチャルホスト外に記述する必要があります。
FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/var/trac
主な変更点はScriptAlias 〜 までの箇所です。
# Trac Alias /trac/chrome/common "/usr/share/trac/htdocs" <Directory "/usr/share/trac/htdocs"> Order allow,deny Allow from all </Directory> ScriptAlias /trac /usr/share/trac/cgi-bin/trac.fcgi <Directory /usr/share/trac/cgi-bin/> AddHandler fastcgi-script .fcgi DirectoryIndex trac.fcgi Options ExecCGI </Directory> <LocationMatch "/trac/[^/]+/login"> AuthType Basic AuthName "Trac" AuthUserFile /etc/apache2/svn.passwd Require valid-user </LocationMatch>
保存して、apacheを再起動します。
$ sudo /etc/init.d/apache2 restart
これで、プロジェクトページにアクセスすると・・・
おー!確かに速くなりました。
以上、なにげにハマった白箱へのTracインストールでした。