Trac with Multi SVN Repos

複数の SVN リポジトリを 1 つの Trac で管理する方法です。元ネタは 2009-07-14 に対応された Multiple Repository Support for 0.12 です。multirepos のソースコードは edgewall の sandbox 内に公開されています。インスコ環境は ubuntu です。私は動作環境については、mysql, mod_python を利用していますが、sqlite でも mod_wsgi でも同じように動作すると思います。また、trac と SVN のユーザは一元的に LDAP で管理します。

LDAP のインストールと設定

  1. LDAP のインストール (Ubuntu の場合)
    sudo apt-get install slapd ldap-utils
    sudo dpkg-reconfigure slapd
    
  2. LDAP の設定とユーザの追加など
    Ubuntu の LDAP ページなど、各 Linux ディストリのページがオヌヌメ

SVN のインストールと設定

  1. SVN のインストール
    sudo apt-get install subversion libapache2-svn subversion-tools
    
  2. SVN リポジトリの作成 (複数個ね)
    sudo -u www-data svnadmin create /var/svn/repo1
    sudo -u www-data svnadmin create /var/svn/repo2
    sudo -u www-data svnadmin create /var/svn/repo3
    sudo -u www-data svnadmin create /var/svn/repo4
    sudo -u www-data svnadmin create /var/svn/repo5
    
  3. Apache の設定と認証の LDAP 統合
    sudo a2enmod dav_svn
    sudo a2enmod authnz_ldap
    cd /etc/apache2/mods-enabled
    sudo vi dav_svn.conf
    
    以下のように編集します
    <Location /svn>
      DAV svn
      SVNParentPath /var/svn
      SVNListParentPath on
      AuthType Basic
      AuthBasicProvider ldap
      AuthLDAPURL "ldap://localhost:389/ou=people,dc=example,dc=com?uid"
      AuthzLDAPAuthoritative off
      Require valid-user
      # チェックアウトは誰でもできるけど、コミットだけ絞りたいときは Require valid-user を以下のようにする
      # <LimitExcept GET PROPFIND OPTIONS REPORT>
      #   Require valid-user
      # </LimitExcept>
    </Location>
    
  4. Apache の設定を適用する
    sudo /etc/init.d/apache2 reload
    
  5. http://localhost/svn/ とかにアクセス可能であれば正常にインストールされている。また subversion client からも同様の URL でチェックアウトできる

Trac のインストールと設定

  1. 必要なパッケージをインストールするなどしておく (Genshiの最新版が必要です)
    sudo apt-get install libapache2-mod-python python-setuptools darcs unzip wget
    sudo easy_install -U "Genshi==dev"
    
  2. svn より最新のソースコードを取得します (edgewall の svn って遅いですよね・・・)
    cd /tmp/
    svn co http://svn.edgewall.com/repos/trac/sandbox/multirepos
    
  3. セットアップを実行します
    sudo python setup.py install
    
  4. ディレクトリー群の作成
    sudo mkdir /var/trac /var/trac/htdigest /var/cache/egg
    
  5. trac-env の作成
    sudo -u www-data trac-admin /var/trac/sample permission add admin TRAC_ADMIN
    
  6. trac の設定
    sudo -u www-data trac-admin /var/trac/sample permission add admin TRAC_ADMIN
    
    以下の箇所を編集 (hg を使いたい場合はプラグインを入れて repository_type = hg にすればok。あと svn と hg を共有したいときは repo1.type = hg、 repo2.type = svn みたいに個別に設定もできる)
    [trac]
    repository_dir = /var/svn/repo1
    repository_type = svn
    [repositories]
    repo1.dir = /var/svn/repo2
    repo2.dir = /var/svn/repo3
    repo3.dir = /var/svn/repo4
    repo4.dir = /var/svn/repo5
    
    編集を適用
    sudo trac-admin /var/trac/sample repository resync "(default)"
    sudo trac-admin /var/trac/sample repository resync repo2
    sudo trac-admin /var/trac/sample repository resync repo3
    sudo trac-admin /var/trac/sample repository resync repo4
    sudo trac-admin /var/trac/sample repository resync repo5
    
  7. commit hook に以下を追加
    sudo trac-admin /var/trac/sample changeset added "(default)" $REV
    sudo trac-admin /var/trac/sample changeset added repo2 $REV
    sudo trac-admin /var/trac/sample changeset added repo3 $REV
    sudo trac-admin /var/trac/sample changeset added repo4 $REV
    sudo trac-admin /var/trac/sample changeset added repo5 $REV
    
  8. apache の設定
    sudo vi /etc/apache2/sites-available/trac
    
    以下の記述を追加
     <Location "/trac">
       SetHandler mod_python
       PythonHandler trac.web.modpython_frontend
       PythonOption TracEnvParentDir "/var/trac/"
       PythonOption TracUriRoot /trac
       SetEnv PYTHON_EGG_CACHE "/var/cache/egg"
     </Location>
     <LocationMatch "/[^/]+/login">
      AuthType Basic
      AuthBasicProvider ldap
      AuthLDAPURL "ldap://localhost:389/ou=people,dc=example,dc=com?uid"
      AuthzLDAPAuthoritative off
      Require valid-user
     </LocationMatch>
    
    apache の設定を適用する
    sudo a2enmod auth_digest
    sudo a2ensite trac
    sudo /etc/init.d/apache2 reload
    
  9. http://localhost/trac/sample にアクセスすれば見れますよ。実際の動作させると Browse Source がこんなんになります。リポジトリがいっぱいあって Trac を使ってみたい方はぜひ。
送信者 Surgo

コメント

このブログの人気の投稿

Python から Win32 API 経由で印刷する

Disqus のスケール - Django 編

Disqus のスケール - Django で月間80億PVを処理する