2月 222011
 

さてさて。前々回のエントリで 「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 が出力するアクセスログには以下のように残っている場合ではね。

"PROPFIND /caldav.php/takachan/home/ HTTP/1.1" 405 400
"PUT /caldav.php/takachan/home/c848-7bf5-4627-8b9d-d35b.ics HTTP/1.1" 405 43

 
この場合、davical をインストールしたディレクトリの DAV On が有効になっていません。その場合は httpd-dav.conf など WebDAV の設定を見直してみましょう。

ちなみに telnet コマンドでも WebDAV がオンになっているか確認できます。

$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
OPTIONS /index.html HTTP/1.1
Host: localhost
HTTP/1.1 200 OK Date: Tue, 22 Feb 2011 12:44:39 GMT Server: Apache/1.3.42 (Unix) PHP/5.3.5 with Suhosin-Patch DAV/1.0.3 Content-Length: 0 Allow: GET, HEAD, OPTIONS, TRACE
Connection closed by foreign host.

 
“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 でやっていたんだけど、エラーログに以下のように出力される。

Could not fetch resource information.  [400, #0]
(2)No such file or directory: The URL contains extraneous path components.
The resource could not be identified.  [400, #0]

 
二行目は長いので折り返しています。DAViCal の設定で $c->dbg[‘ALL’] = true; ってのがあるのですが、こいつを有効にすると debug メッセージを apache のログに出力してくれるのですが、上記のメッセージが出力する場合、デバッグログさえ出力してくれない。なので明らかに mod_dav のほうで出力しているメッセージ・・。

後、telnet localhost 80 で確認したところ、

PROPFIND /caldav.php HTTP/1.1

 
こっちは動作する(つまり 200 が返る)んだけど、

PROPFIND /caldav.php/takachan/home/ HTTP/1.1

 
こっちは動作しない(つまり 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 から動作確認は取れています;-)。

2月 202011
 

「CPUコレクション」の第27回です。前回でようやっと Socket370 に突入したと思ったのにここから路線は大きくそれるのであります。だって、僕、もう Intel の CPU 買わないことにしたし、使ってない CPU のネタ書くより先に、自分が利用した CPU の事書いたほうがずっと楽しいんだもん;-)。

と、言うことで当時の僕の自宅の PC 環境をちょっと整理してみましょう。

・Socket7 Cyrix MII-300GP -> 自宅サーバ
・Super Socket7 AMD K6-2 500MHz -> メインデスクトップ
・Socket370 Celeron Dual -> 検証用 PC

21世紀に突入しても AT 規格のマザーボードで PC が動作していたのですが、いよいよ引退させるかぁ。となりました。まぁ、新しい PC が欲しかったのでその口実として ASUS の T2P4 を現役引退させるわけですけども。自宅サーバは K6-2/500 になってもらいます。 ASUS の P5A と言うマザーボードを利用している PC がサーバとなったのであります。

するっていと新たに PC を購入する必要が出てくるわけです。ランラン;-)。 Intel の CPU は Socket370 で痛い目にあったので「今後二度と Intel で PC なんか組むもんか。フンっ。」とか、僕の中で思っているわけです。それもそのはず。 AMD は独自ソケットで自力で CPU 作ることになったので、そっちに行こうなどと思うわけです。

AMD vs Intel の戦いが始まるわけですが 1GHz に先に到達したのは AMD だったんですねぇ。おーーっ!! 当時の AKIBA PC ホットラインのページが今でも残っているのですが、 2000年 4月第二週の「CPU最安値情報」 は Intel が二番目になっているんですね。1GHz に先に到達した AMD が一番上に書かれるよになった。歴史的瞬間でもあるのであります;-)。

http://akiba-pc.watch.impress.co.jp/hotline/20000408/p_cpu.html

AKIBA PC ホットラインの「CPU最安値情報」は CPU クロックが高いメーカが上に来るんですね。うんうん。それは理にかなっている。うんうん。

そんな感じだったので、当然のごとく僕の新しい PC は AMD の CPU で組むことに決めました。それで購入したのが SlotA の Athlon。

SlotA_Athlon_1.jpg

AMD が Intel より先に 1GHz に突入したとわいえ、 SlotA の 1GHz は高かった。僕の予算で許されたのは 700MHz。これでも当時は 19,800yen だったと記憶しています。

SlotA_Athlon_2.jpg

合わせて購入したマザーボードは SOLTEK SL-77KV メジャーではないメーカの M/B だったのですが、確か、随分と安かった覚えがあります。ウェブで探すと出てきますねぇ。

http://www.motherboard.cz/mb/soltek/SL-77KV.htm

チップセットは VIA APOLLO KX133 ですかー。あ。そーそー。そー言えば当時 AMD は CPU だけ作って、チップセットも出してはいたんだけどリファレンスでしかなくて、主にサードパーティがチップセットを作っていたんだ。でもってその内の一つの VIA。みたいな感じか。

SlotA_Athlon_3.jpg

これを機会に、筆者の PC 環境は AMD へと傾倒していくのであります。なので、今後は Socket370 には当分行かずに SocketA へと話はどんどんと進んでいくのであります;-)。

2月 182011
 

iCal 形式でデータを管理するサーバが欲しいと思っていたのであります。以前のエントリで「Thunderbird+Lightning の日本語化。」ってのを書いたのだけど、クライアント環境はバッチリです。
今回はサーバ側。google にデータやメールを預けるのは好きではないので自分で何とかしたい。と思ったのであります。

と、言うことで iCal サーバに成り得るものを ports からインストールします。DAViCal をインストールしてみましょう。 ports 的には www/davical になります。make install したら環境が整いました。ランラン。なんて簡単には行かないのがこの ports の恐ろしいことろです・・。orz。

まず、DAViCal は www/apache22 と database/postgresql-server を関連性でインストールしてくれないので自分でインストールする必要があります。後、php5 はどうだろ?関連性でインストールしてくれるかな?最初から入っていたのでいまいち良く解りませんでしたが・・。

僕の場合、apache は自分で make install するのを趣味としているのですが、DACiCal は mod_dav を利用するみたいなので、ports からインストールしました。

それにしてももう少しきちっとした ports を作ってくれても良いのになぁ・・。

最初から問題点を書いてしまいましょう。FreeBSD の ports から DAViCal をインストールした場合、日本語が表示できません。インストールされないんだもの・・。orz。以下は www/davical のインストール方法です。

あ。パッチを一個書いたのでインストールの前にパッチを取ってきてください。以下の URL にあります。

http://icmpv6.org/Prog/FreeBSD_ports/patch-rebuild-translations.sh

では、インストール作業の開始です。なお、必要であれば事前に devel/pear-PhpDocumentor をインストールしておくと良いかもしれませんが、直接的には必要ありません。

# cd /usr/ports/www/davical/files
# cp ~/patch-rebuild-translations.sh ./
# cd ..
# make install
# cd work/davical-0.9.9.4/
# make
# cp -pr locale /usr/local/www/davical/
#

 
FreeBSD の ports は外人さんが作ったんでしょうな。ロケールのことなんざまぁるで意識してないのでインストールさえしてくれない・・。ヒサンな状況ですな。上記のパッチとコマンド投入位の作業なら ports の Makefile でいくらでも吸収できるはずです。困ったモノだ・・。orz。

ちゅーこってこれで make された po ファイルがインストールされました。今度は DAViCal で日本語を表示できるように設定しましょう。

DAViCal の設定ファイルは、ports からインストールすると /usr/local/www/davical/config/config.php になります。以下のように記述します。

<?php
    $c->pg_connect[] = 'dbname=davical port=5432 user=davical_dba';
    $c->domain_name = "ical.running-dog.net";
//  $c->sysabbr = 'davical';
    $c->admin_email = 'takachan@running-dog.net';
//  $c->system_name = "DAViCal Server Administration";
    $c->collections_always_exist = true;
    $c->enable_row_linking = true;
    $c->default_locale = 'ja_JP.UTF-8';
    $c->locale_path = '/usr/local/www/davical/locale';
?>

 
追加した行は $c->default_locale と $c->locale_path です。LANG は UTF-8 にしました。後、locale ディレクトリのパスを指定します。

これで URL にアクセスして、個人設定に 日本語 を指定すると日本語のメッセージを表示してくれるようになります。良かったです。

 
せっかくなので DAViCal のはまり道をもう一個だけ書いておきます。

僕は perl の CGI は得意なんだけど、php はからきしダメです。php.ini の設定なんざちぃーとも解らないのであります・・f(^^;;。

include_path には設定する必要があります。以下のように。これを書かないと DAViCal は動いてくれません。

include_path = ".:/php/includes: \
/usr/local/www/davical/htdocs: \
/usr/local/www/davical/inc: \
/usr/local/share/awl/inc"

 
長いので折り返してありますが、一行で書くと良いでしょう。

と、言うことで 動かす前の段階で随分と時間が掛かりました。 php と postgresql って、僕、苦手なのよねぇ・・。でもってせっかく動作するようになったかと思うと、今度は日本語表示してくれないし・・。

と、言うことで、www/davical の ports を更新してくれる方、絶賛募集中なのであります;-)。

 
あ。最後にですが、DAViCal の設定については細かく書いていません。ウェブで探せばたくさん出てくるでねぇ。なので、FreeBSD 的はまり道を書いたのであります。

2月 082011
 

久しぶりに「CPU コレクション」ではないネタですねぇ;-)。

IPv4 の中央在庫が枯渇した。と言うのはあちこちで騒がれているのであります。うちのネットワークは既に随分前から IPv4/IPv6 のデュアルスタクなので、特に気にはしていないのであります。

でもって IPv6 の機器、と言うか、サーバや PC などがたくさんあるので自宅で MRTG などを取得しているのですが、MRTG の取得の際にも IPv6 を利用しているのであります。mrtg.cfg の上のほうに以下の行を追加すれば、Target のホスト情報に FQDN を記述していた場合、FQDN で IPv6 があれば mrtg は IPv6 でアクセスするのであります。

EnableIPv6: yes

 
しかし、あれですな。FreeBSD の ports-current を追いかけていた場合、ある日突然 mrtg は IPv6 で動作しなくなるんですな・・。orz。最新の ports を利用すると以下のメッセージを出力する。

Undefined subroutine &main::AF_UNSPEC called at /usr/local/bin/mrtg line 2248.
Undefined subroutine &main::AF_UNSPEC called at /usr/local/bin/mrtg line 2248.
Undefined subroutine &main::AF_UNSPEC called at /usr/lcoal/bin/mrtg line 2248.

 
でもって EnableIPv6: yes をコメントアウトして実行すると無事に動作する。これは明らかに mrtg の IPv6 回りに問題があるということですね・・。

そもそも、mrtg を ports からインストールすると以下の ports が関連性によりインストールされます。あ。make config は WITH_IPV6=true、WITH_SNMP=true です。

    mrtg-2.17.0,1
    p5-SNMP_Session-1.13
    p5-IO-Socket-INET6-2.65
    p5-Socket6-0.23
    p5-Net-SNMP-6.0.1

この内、バージョンアップして、その後の動作が「怪しいなぁ。」と思うのは p5-Net-SNMP-6.0.1 です。しょーがないのでこの ports の Makefile を編集してバージョンを 5.2.0 に書き換えてから make NO_CHECKSUM=yes install でインストールしなおします。

するとな。mrtg コマンドを実行するとエラーメッセージが変わるのであります。今度出力されたのは以下のメッセージ。

Undefined subroutine &SNMPv1_Session::unpack_sockaddr_in6
called at /usr/local/lib/perl5/site_perl/5.10.1/SNMP_Session.pm line 828.
Undefined subroutine &SNMPv1_Session::unpack_sockaddr_in6
called at /usr/local/lib/perl5/site_perl/5.10.1/SNMP_Session.pm line 828.
Undefined subroutine &SNMPv1_Session::unpack_sockaddr_in6
called at /usr/local/lib/perl5/site_perl/5.10.1/SNMP_Session.pm line 828.
2011-02-08 11:31:34: ERROR: fork 0 has died ahead of time ...

 
ちょっと長いので折り返してありますが、上記のようなメッセージが出力される。んだば unpack_sockaddr_in6 ちゅーのはどこにあるの?と探してみると、どうやら p5-Socket6-0.23 でインストールされる Socket6.pm の中にある。ふむー。 SNMP_Session.pm からは Socket6.pm がみえてなくて、なので「unpack_sockaddr_in6 が無い。」と言われているんだね。

と、言うことで、/usr/local/lib/perl5/site_perl/5.10.1/SNMP_Session.pm を手で変更することに決定・・。

($p1,$a1) = unpack_sockaddr_in6 ($sa1);

 
の部分を以下のように改修します。

($p2,$a2) = &Socket6::unpack_sockaddr_in6 ($sa2);

 
そして更に SNMP_Session.pm の全ての unpack_sockaddr_in6 の部分の頭に “&Socket6::” を追加します。

さて。今度はどうだっ!!?? mrtg を実行すると、おぉっ!! 無事に動作するのでありました。

以上が ports-current で portupgrade -arR した時に IPv6 で動作しなくなった mrtg への対応策です。 MRTG を IPv6 で取得している人はまだまだ少ないとは思いますが、もし IPv6 で MRTG を取得する人がいましたら、上記のようにするのが良いかと思われます。

2月 062011
 

「CPU コレクション」の第26回目はいよいよ Socket370 に突入です。ここまで随分長かった;-)。

と、言うことで、まずは別の話から。僕個人的に嫌いなモノが三つあります。「ドコモ・インテル・トヨタ」あちこちで言っている、僕の口癖です;-p。

さてさて、話は CPU に戻るのですが、僕は随分と長いこと Super Sockect7 の AMD K6-2 500MHz を使い続けてきましたが、いよいよ新しい PC を新調することにしました。聞けば、Socket370 の Celeron では CPU Dual で動作する。と言う話を聞きました。当時は俗に「Dueron」(でゅえろん)と呼ばれていたものですね。

当時は確か FreeBSD 3.0-RELEASE が既にリリースされていて FreeBSD でバリバリの SMP 環境ができていたと思います。FreeBSD の思い出をちょっと書くと、3.0 が CURRENT だった時、会社で Pentium Pro Dual な PC があって、そこに FreeBSD 3.0-CURRENT をインストールして SMP を体験していました。

当時、3.0-CURRENT と言うのは a.out から ELF バイナリへと変更している時期でした。a.out な 3.0-CURRENT は「スゲー。SMP が動作するー。」などと感動していたのですが、cvsup したら ELF 形式になってとたんに色々なものが動作しなくなってガクゼンとしたものです。

FreeBSD がちょうど過渡期の時に SMP 環境を体験したんですねー。

でもって話は CPU に戻るのですが、僕も Dueron を体験してみたくなり ABIT の BP6 とこの Celeron を二個買ったわけです。BP6 はある意味変態マザーボードですね。しかし、当時としては画期的なマザーボードでした;-)。

こうして筆者の自宅には三台目のデスクトップ PC が並ぶことになるワケですが・・。

Socket370_Celeron_PPGA_1.jpg

SMP な PC が手に入ったのでこの CPU では色々な OS が動作しました。 Windows2000・FreeBSD・Solaris7,8。当時僕はそこはかとなく雑誌に記事などを書いていたのでこのマシンはすっかりと検証・テスト環境マシンとして利用していたのでありました。

こちらが CPU の裏側です。この CPU は確か PPGA などと呼ばれていましたね。

Socket370_Celeron_PPGA_2.jpg

表側に CPU 情報は無く、裏側に詳しい情報が書いてあるのもこの CPU の特徴でしょうか。

さて。購入した CPU は 466MHz。ちょっと遅いなぁ。と思い始めた頃、Intel は Socket370 の新しい CPU として Coppermine Core を登場させます。これがなんとっ!! 同じ Socket タイプなのに Katmai Core と互換が無いんですな。これには正直驚きました。なので、冒頭に書いた僕の「嫌いなモノ」に Intel が掲載されるようになるのであります。
#ちなみに docomo は今でも利用したことないけど、車は現在、トヨタ車に乗っています。いやー。乗ってみると、トヨタの車って良いですねぇf(^^;;。

僕はこれ以降 Intel プラットホームは利用しないようになったのであります。CPU も一切購入していないのであります。まぁ、 NotePC はしょうがないけど。

と、言うことで SMP な PC 環境には感動したのでありますが、自分の中でターニングポイントになった CPU なのでありました。

とわ言いつつ CPU のコレクションとしては Socket370 はたくさん持っているのでドンドン掲載して行きたいと思います;-)。