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'
FreeBSDのPythonは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
ここからまた色々修正しないといけないっぽいけど,疲れたのでまた今度…