Darwin Calendar Server on FreeBSD

先日挫折したFreeBSDでのDarwin Calendar Serverの構築方法メモ.
まずPythonが壊れてたとかいうアホみたいなミスがあったのは置いておいて,ある程度進んだところまでのメモを残しておく.
新しく入れなおしたPythonは2.6.5.
基本的はインストール方法はここに書いてあるが,いくつか修正しないといけない点がある.
http://blog.royhooper.ca/2007/07/07/installing-the-darwin-calendar-server-on-freebsd

最初にCalendar ServerとPyKerberosのソースをダウンロードする.

$ svn co http://svn.calendarserver.org/repository/calendarserver/CalendarServer/trunk CalendarServer
$ svn co http://svn.calendarserver.org/repository/calendarserver/PyKerberos/trunk PyKerberos

次にPyKerberosのディレクトリに入って以下のコマンドを実行する.

perl -spi -e ’s{

単に文字列の修正.
その後,setup.pyに以下の2行を追加する.

library_dirs=['/usr/local/lib'],
include_dirs=['/usr/local/include'],

修正後は以下のようになる.

setup (
name = "kerberos",
version = "1.0",
description = "Kerberos high-level interface",
ext_modules = [
Extension(
"kerberos",
extra_link_args = commands.getoutput("krb5-config --libs gssapi").split(),
extra_compile_args = commands.getoutput("krb5-config --cflags gssapi").split(),
sources = [
"src/kerberos.c",
"src/kerberosbasic.c",
"src/kerberosgss.c",
"src/base64.c"
],
library_dirs=['/usr/local/lib'], # ここと
include_dirs=['/usr/local/include'], # ここを追加
),
],
)

上のページでは,次にインストールするためのスクリプトを走らせているが,正直にそのままインストールすると色々怒られる.
ということで,ソースコードをちょろっと修正する.
基本的に修正するのはPyKerberosの中である.

まずPyKerberos/srcの中に移動して,3つのヘッダファイルを修正.
修正するのはkerberosbasic.hと,kerberospw.hと,kerberosgss.hの3つ.
修正箇所は3つとも同じで,

#include
+#if 0
#include
#include
+#endif
+#include

とする.
kerberosgss.hだけ,もう1行追加する.

#include
+#if 0
#include
#include
+#endif
+#include

+#define PYKERBEROS_NT_SERVICE_NAME GSS_KRB5_NT_PRINCIPAL_NAME

一番下のdefine文を追加している.
次に,kerberosgss.cを修正する.
126行目くらいで

- maj_stat = gss_import_name(&min_stat, &name_token, gss_krb5_nt_service_name, &state->server_name);
+ maj_stat = gss_import_name(&min_stat, &name_token, PYKERBEROS_NT_SERVICE_NAME, &state->server_name);

とする.
とりあえずこれで,他のパッケージをインストールする準備が出来た.
CalendarServerのディレクトリで,以下のコマンドを実行する.

$ sudo bash ./run -s

いろんなパッケージがダウンロードされる.
run -sが終わったらサンプルの設定ファイルをコピーしておく.

cp conf/caldavd-test.plist conf/caldavd-dev.plist

これで,必要なパッケージがそろった.
と言ってもまだ動かないので,色々修正していく.
修正しないまま実行すると,以下のようなエラーが出る.

AttributeError: 'module' object has no attribute 'ENODATA'

FreeBSDPythonはerrnoモジュール内にENODATAは持っていないので,怒られている.
ということで以下のように修正.
CalendarServer/twext/web2/dav/xattrprops.pyの63行目である.

-_ATTR_MISSING = (errno.ENODATA, 93)
+_ATTR_MISSING = (96, 93)

このあたりの数字はRFC 2518に書いてある.
ちなみにENODATAはLinux用らしく,MacOSXはENOATTRらしい.FreeBSDは96…なんでだろうw

ここからまた色々修正しないといけないっぽいけど,疲れたのでまた今度…