カテゴリー
Mac

OS X Server の apache で loggerhead

最近真面目に bzr(bazaar) を使いだしたので、じゃあ Web インターフェースも用意したいなぁ、とか思い立って loggerhead を使うことにしました。 loggerhead を選んだのは Launchpad で使われてるからってだけの理由ですが。

晴れて何も気にせず pip を使える環境になったのでインストールは楽チンです。

sudo pip install bzr
sudo pip install Paste PasteDeploy simplejson
sudo pip install http://www.owlfish.com/software/simpleTAL/downloads/SimpleTAL-4.3.tar.gz
sudo pip install loggerhead
sudo pip install flup

しかし、これだと設定方法がわからんので PyPI からアーカイブを拾ってくるというあたりがちょっと間抜け…

で、まずは serve-branches というコマンドで動かしてみるのが基本、ということみたいなので例に従って手元にあった emacs のソースで試してみると

goro@flora:~/work$ serve-branches ~/work/emacs/trunk
serving on 0.0.0.0:8080 view at http://127.0.0.1:8080

動いたようなので w3m でアクセスしたら 404 File Not Found とか言われて哀しい気分に…。
仕方ないので

goro@flora:~/work$ serve-branches --log-level=10 ~/work/emacs/trunk

とかデバッグモードで動かして同じようにアクセスしたところコンソールには

INFO:loggerhead:127.0.0.1 - - [13/Nov/2012:16:43:23 +0900] "GET / HTTP/1.0" 404 - "-" "w3m/0.5.3"

とかなんの参考にもならない情報が…。
困ったときは Google 様に聞いてみるのが基本なのでお伺いを立ててみたところ似たような感じで苦戦してる人をハッケソ。これによると以下のようにした場合

This is functional:
serve-branches --trunk-dir=/var/tmp/bzr-test/project1 --user-dirs
serve-branches --trunk-dir=/var/tmp/bzr-test/project2 --user-dirs
bzr serve --http --directory /var/tmp/bzr-test/project1/

なら動くということらしいので

serve-branches --trunk-dir=/Users/goro/work/emacs/trunk --user-dirs

で試してみたところ…動いた!
しかし正規の手順がよくわかんないのは怖いので、どうしたもんかと悩んでいたのですが、ふと /Library/Python/2.7/site-packages/loggerhead-1.18.2-py2.7.egg-info/installed-files.txt を眺めたら

../../../../../usr/local/bin/loggerhead.wsgi

といういかにも WSGI 経由で使えそうなファイルをハッケソ。 OS X Server の apache は WSGI 対応した(といっても「 Python Web アプリケーションを使用」が WSGI を指すと一発で分かる人は超能力者だろう…)ので、これを使えば幸せなんじゃねーの?、と試してみました。

わかんないよね
/Library/Server/Web/Config/apache2/sites/0000_any_443_.conf に

WSGIScriptAlias /bzr /usr/local/bin/loggerhead.wsgi

を追加して

sudo /Applications/Server.app/Contents/ServerRoot/usr/sbin/serveradmin stop web
sudo /Applications/Server.app/Contents/ServerRoot/usr/sbin/serveradmin start web

とするだけですが、いざ https://localhost/bzr にアクセスすると Internal Server Error 。 apache のエラーログを確認すると

NotConfiguredError:
You must have a ~/.bazaar/bazaar.conf file for _www with http_root_dir set to the base directory you want to serve bazaar repositories from

ということらしいです。
apache の実行ユーザー(_www)に存在するホームディレクトリなんか設定したくないし、なんとかしてシステム全体の設定ファイルみたいの置けないかなぁ、とか思ったのだけど、どうもダメっぽい。しかしホームディレクトリはなぁ…と思いながら念のため

dscl . -read /Users/_www

と叩いてみたら

NFSHomeDirectory: /Library/WebServer
UserShell: /usr/bin/false

ということで OS X Server の実行ユーザー(_www)には流石にシェルは設定されてはいないものの、ホームディレクトリは設定されていたのでした…。それはいいんだろうか、とも思うのだけど今回はあってラッキーなので早速 ~_www/.bazaar/bazaar.conf を作ることにします。
bazaar.conf のサンプルは何故か /System/Library/Frameworks/Python.framework/Versions/2.7/share/doc/loggerhead/bazaar.conf に置かれているのでこれをコピーして chown -R _www:_www ~_www/.bazaar とかしてあげれば OK 。中身はほとんどデフォルトのままだけど

# directory to serve bzr branches from
# Non-bzr directories under this path will also be visible in loggerhead
#http_root_dir = '/var/www/bzr'
http_root_dir = '/User/goro/work/emacs/trunk'

# The url prefix for the bzr branches.
http_user_prefix = '/bzr'

# Directory to put cache files in
http_sql_dir = '/var/cache/loggerhead'

という具合。
あとは http_sql_dir で設定したディレクトリを掘って(でも /var/cache よりも ~_www/loggerhead のがいいかもなぁ?)、_www が読み書きできるように設定すれば一通り完了という感じ。

やっぱり Emacs は巨大だよなぁ で、 https://localhost/bzr/ でならちゃんと動くんだけど https://localhost/bzr だとパスがおかしくなっちゃうのが悩ましいところ。って WSGI 関係なく apache 側の設定の問題で、こんな感じに落ち着いたようです?

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/bzr$
RewriteRule ^(.*)?$ /bzr/ [L,R]
WSGIScriptAlias /bzr /usr/local/bin/loggerhead.wsgi

<Location /bzr/>
        AuthName "Loggerhead"
        AuthType Digest
        Require valid-user
</Location>

ちなみになんだかよくわかりませんが OS X Server の apache は Require valid-user で OpenDirectory のユーザーを使っての認証を行ってくれます。いつ動かなくなるかわからないのが恐ろしいトコロですが…

コメントを残す