Bloodhoundをセットアップする

Tracをずっと使っているんだけれども、Bloodhoundが結構よさそうということで置き換えてみた。

Bloodhound はTracベースで、複数のプロダクトを扱えたりとか、もともとのもっさりしたデザインとかUIが今風な感じにデフォルトになってるやつだそうで。あと、インストールが楽というのもやってみた感じでは結構魅力。

インストールに関しては、 Installation instruction の通りで問題なし、既存のTrac(今回は0.12)がある場合は、 Migrating environments もやる必要がある。

まあ一応メモ的インストール手順を下記に。

微妙にハマったポイントは、既存の1プロダクトを前提で使ってた場合、Wikiが/products/@/にコピーされて、プロジェクト全体のWikiにはなにもないようにみえることと、/produts/@/のURLに辿り着くリンクがとりあえずどこにもないところですかね。あと、データ移行時は上のURLの内容の添付ファイルコピーの時に、/produts/@/がたぶんアクセス後でないとできないので、とりあえず一度アクセスしたあとに、files/attachmentsディレクトリを作るべし。

最後に、bloodhound_setup.pyはファイルがカレントディレクトリにある状態で、それ以外のオプションはフルパスで指定するというやり方でやらないとなんかおかしくなるみたい。tracdで起動すると、No such file or directoryとしか出ないので、原因究明はしてない。tracdってどっかにTraceback吐けたりしないんですかね。

とりあえず手順。virtualenvwrapper前提で、まずはvirtualenvを作って、pipで依存するパッケージをインストール。んで、bloodhound_setup.pyを実行(sqlite)

$ mkvirtualenv --system-site-packages bloodhound
$ tar xvzf apache-bloodhound-<version number>.tar.gz
$ cd apache-bloodhound-<version number>/installer
$ pip install -r requirements.txt
$ python bloodhound_setup.py --environments_directory=/srv/repos/bloodhound -d sqlite --admin-user=admin --admin-password=xxxxxxx

bloodhound_setup.pyの実行は妙に時間かかります。なんでこんなに時間かかるんですかねー。 ここまでやると、tracdの起動方法が最後に表示されるので、それに合わせて起動して動作確認。

$ cp -r /path/to/trac/your-project/db/trac.db /path/to/bloodhound/environments/your-project/db/bloodhound.db
$ trac-admin /path/to/bloodhound/environments/processor upgrade
$ trac-admin /path/to/bloodhound/environments/processor wiki upgrade

適当に、tracdで起動して、/project/products/@/みたいにしてアクセスしてみて、wikiが移行されていること確認

$ cp -r /path/to/trac/your-project/files/attachments/* /path/to/bloodhound/your-project/products/@/files/attachments/

これで、既存のWiki,ticket,添付ファイルが移行されているのを確認して終了。ここまでで、bloodhoundのインストールとデータの移行は完了。

最後に、ウチだと実際はApacheが前に起動しているので、mod_wsgi経由でのアクセスに変更します。 認証用のUIはbloodhoundにもついてくるんだけど、いままでの経緯で、Basic認証のままの設定にします。好ましいのは、bloodhoundの既存の認証のUIつかうことなんでしょうね。

Apacheに投入した設定はこんな感じ。あ、Apacheの設定前に、trac.wsgiの生成と.tracignoreを設定しておきます。

trac.wsgiの生成。どのプロジェクトでもいいので、trac-adminで生成。
$ trac-admin /srv/repos/bloodhound/main deploy /srv/repos/bloodhound/sites

sitesディレクトリはenvironmentではないので、一覧表示時にエラーになってしまうのを防ぐために、
$ echo sites > /srv/repos/bloodhound/.tracignore

とやって、 /srv/repos/bloodhound/sites/cgi-bin/trac.wsgiが使えるようにしておく。

WSGIPassAuthorization On

WSGIDaemonProcess bloodhound threads=5 \
    user=bloodhound python-path=/home/bloodhound/.virtualenvs/bloodhound/lib/python2.7/site-packages/
WSGIScriptAlias /trac /srv/repos/bloodhound/sites/cgi-bin/trac.wsgi
<Directory /srv/repos/bloodhound/sites/cgi-bin/>
    SetEnv trac.env_parent_dir /srv/repos/bloodhound
    WSGIProcessGroup bloodhound
    WSGIApplicationGroup bloodhound
    Order allow,deny
    Allow from all
</Directory>
<Location /trac>
    AuthType Basic
    AuthName "BloodHound"
    AuthUserFile "/srv/repos/.htpasswd"
    Require valid-user
</Location>

ちょっとしたポイントは、複数プロジェクトを扱うために、SetEnv trac.env_parent_dir /srv/repos/bloodhoundしておきます。これで、/tracにアクセスしたら、このディレクトリにあるプロジェクトの一覧がでるようになります。同ディレクトリでプロジェクトでないものは上記のように、.tracignoreに追加しておく。

と、こんな感じでやれば、/tracにアクセスしたときにBasic認証をもとめられて、そのまま認証できれば、プロジェクトの一覧が見えるはず。んで、たとえば、mainプロジェクトなら、/trac/mainにアクセスするとトップページ、既存のWikiからの移行をしているなら、/trac/main/products/@/とアクセスすると、もともとあったWikiのトップページが見れるはず。(そして、これを書いていて、チケットのページからリンクでたどれることに気づいた。)

と、こういう流れで、とりあえず、bloodhoundのセットアップは完了。デフォルトでもチケットの管理とWikiとして使う分には充分で、環境も整理できたので満足。