さてさて。前々回のエントリで 「DAViCal サーバを FreeBSD で。」って言うのを書いたのですが、色々やっていたら、FreeBSD では動作しない。と言うことが判明しました。
どういう状況の時に動作しないのか。と言えば、ports から www/apache22 をインストールして、 httpd-2.2.17 をインストールしたときです。この時、WebDAV を利用するので WITH_DAV=true と WITH_DAV_FS=true を指定するわけです。
後は、httpd-vhosts.conf や httpd-dav.conf に設定を施してさてどうだっ!! ってやるんですが、これがまた動作しない。アカウント作成などは無事にできるので php5 と postgresql の連携はうまく行っているみたい。クライアントからのアクセスが全くダメな状態なのでありました・・。orz。
今回はまったのは全部で二つ。順番に見ていくことにしましょう。あ。ここまでの到達では、postgresql-server-8.4.7 が無事に動作し、 php5 が無事に動作し、 davical でアカウントが作成されていることが必須です。
つまりは Lightning で接続したけど、全くつながらない。って状態の時のトラブルシューティングです。
最初のはまり道。405 が返る。
telnet localhost 80 とかして HTTP で davical の caldav.php を手で指定して実行するんだけど、エラー 405 のエラーが返ってくる状態。httpd が出力するアクセスログには以下のように残っている場合ではね。
|
この場合、davical をインストールしたディレクトリの DAV On が有効になっていません。その場合は httpd-dav.conf など WebDAV の設定を見直してみましょう。
ちなみに telnet コマンドでも WebDAV がオンになっているか確認できます。
|
“Allow: GET, HEAD, OPTIONS, TRACE” で WebDAV が利用できるメソッドが表示されます。これが表示されない場合は DAV On が効いていません。 httpd.conf の設定を見直しましょう。
ちなみに上記の環境では FreeBSD の ports から www/apache13 、 www/mod_dav 、 lang/php5 をインストールしています。
この環境において DAViCal がサクっと動作した状態です。ここまで来るのが大変だった。
更に続くはまり道。400 が返る。
HTTP のエラーコード 400 は Bad Request。全くもってどうしようも無い状態。最初は www/apache22 でやっていたんだけど、エラーログに以下のように出力される。
|
二行目は長いので折り返しています。DAViCal の設定で $c->dbg[‘ALL’] = true; ってのがあるのですが、こいつを有効にすると debug メッセージを apache のログに出力してくれるのですが、上記のメッセージが出力する場合、デバッグログさえ出力してくれない。なので明らかに mod_dav のほうで出力しているメッセージ・・。
後、telnet localhost 80 で確認したところ、
|
こっちは動作する(つまり 200 が返る)んだけど、
|
こっちは動作しない(つまり 400 が返る)。なんか、明らかに mod_dav の問題ぽいのであります。
ついつい www/apache22 のソースを見たら、 modules/dav/main/mod_dav.c の 729 行目辺りでこのメッセージが出ているのだけど、なんか、httpd.conf の設定ファイルの読み込みがおかしいんでないかい?って感じになったのでありました。
もう、apache22 に添付されている mod_dav のコードがおかしいと思えてきたのでここで、apache22 は捨てて apache13+mod_dav にしてみたのでありました。
そしたらあーたっ!! サクっと動作してしまったではあーりませんかっ!! あいや・・。もっと早くから apache13 でトライするんだったよ・・。
と、言うことで http アクセスのエラーコード 405->400 をなんとか乗り越えて無事に DAViCal は動作したのでありました。
原因はどこにあるんかなぁ。davical-0.9.9.4 かなぁ? とわ言いつつ、apache から DAViCal の php にまで渡ってないんだよねぇ・・。
するとただ単に httpd-dav.conf の設定が悪いだけか? けど、 DAV On にするだけだし、そもそも PROPFIND /caldav.php の時は無事に動作して PROPFIND /caldav.php/ だと 400 になるんだから、やっぱり apache22 付属の mod_dav を疑ったほうが良いのかなぁ・・。
ま。そんな感じの二つのはまり道だったのでありました。
今はなんとか無事に動作しているのであります;-)。 Thunderbird+Lightning と iPhone4 から動作確認は取れています;-)。
perl で祝日を特定するサブルーチン。
ちょっとわけあってカレンダーをホゲっているんですが、祝日管理というのが大変に面倒…
[…] さて、ではどうするか? と言えば、僕は自分で CalDAV サーバを持っているのでそれを利用することにしました。 […]
たかのです。
しばらくは最新のバージョン apache-2.2.26+php5+davical-1.1.2 で動作していたんだけど、 ports の apache のバージョンが apache-2.2.27 になったら突然上記の現象が発生して動かなくなった。
本当に困ったことだぁ・・。
僕は結局、FreeBSD でカレンダーサーバを起動するのを諦めて CentOS 6.5 で起動することにしました。
そして、今日ですね。 ports の apache は apache-2.2.27_1 になったら復活しました。 davical の PROPFIND がちゃんと動くようになりました。
と、いうことで、 FreeBSD で davical を動かす場合には ports の apache22-2.2.27 は避けて apache22-2.2.27_1 にしましょう。