12月 192014
 

Wi-Fi では wpa_supplicant をよく利用する。と、いうか WPA を利用するのが当たり前になりつつあるんですが、 re0 とか bge0 などでも wpa_supplicant を利用することは可能です。
今回はその設定について書いてみみたいと思います。

今回利用した環境は FreeBSD/amd64 10.0-RELEASE で wpa_supplicant のバージョンは v2.0 になります。

 
そもそも、フツーの Ethernet で wpa_supplicant を利用するのはどういう状況の時にあるか、と、いうことなんですが、以下に書いてみました。

・L2 スイッチに PC を接続すると L2 スイッチ側で EAP 認証がオンになっている
・認証無しで L2 スイッチに PC を接続すると通信ができない VLAN に落っこちる
・EAP 認証を通過すると正常な VLAN が降ってきてネットワークが利用できる状態になる

利用するのは会社とか、セキュリティの高いネットワークでしょうかね。 こーいうのを俗に IEEE802.1x 認証と呼ぶようで、 Wi-Fi では利用できて当然ですが、対応する L2 スイッチでも IEEE802.1x 認証が利用可能です。

すると、上記の PC を接続した L2 スイッチは IEEE802.1x 認証対応のスイッチで、そのスイッチには設定が入っていて PC を接続しても認証が通過できないのでネットワークに接続できない状態。と、いうことになります。

当然 Windows でも利用できるし Mac でも利用できます。 FreeBSD では wpa_supplicant を利用することにより、認証を通過することができます。

今回は FreeBSD で IEEE802.1x 認証の設定をしてみたいと思います。

 
1). /etc/rc.conf の設定
以下の設定をまずします。

#ifconfig_bge0="inet 192.168.1.201 netmask 255.255.255.0"
ifconfig_bge0="WPA DHCP"

 
bge0 に “WAP DHCP” と記述するのですが、違和感ありますよねぇf(^^;;。けど、今回は Ethernet で WPA を利用するのでこーいう記述になります。

 
2). /etc/wpa_supplicant.conf の設定
まずは設定を提示します。

     1  ctrl_interface=/var/run/wpa_supplicant
     2  ctrl_interface_group=0
     3  ap_scan=0
     4  #fast_reauth=1
     5  #update_config=1
     6
     7  network={
     8          key_mgmt=IEEE8021X
     9          eap=PEAP
    10  #       identity="takachan@windows.domain"
    11          identity="takachan"
    12          password="PASSWORD"
    13  #       phase1="peaplabel=0 perapver=1 include_tls_length=1"
    14          phase2="auth=MSCHAPV2"
    15  #       ca_cert="/usr/local/etc/CA/root_CA.pem"
    16          eapol_flags=0
    17  }

 
以下に各行の説明します。

  • 1 行目: socket の入るディレクトリを指定します。
  • 2 行目: そのディレクトリのグループ ID を指定します。
  • 3 行目: Wi-Fi ではないので AP はスキャンしません。
  • 4,5 行目: 一応コメントアウトしました。
  • 8 行目: key_mgmt に IEEE8021X を指定します。
  • 9 行目: eap は PEAP を指定します。多分殆どの環境で PEAP になるのではと思われます。
  • 10,11 行目: 認証用のユーザ名を指定します。 Windows の Active Directory を利用している場合にはドメイン名が必要になる場合もあるかもしれません。
  • 12 行目: 認証のパスワードを指定します。
  • 13 行目: とりあえず phase1 はなくともログインできたのでコメントアウトしています。
  • 14 行目: phase2 は認証方式を指定します。今回は MSCHAPV2 を利用しました。
  • 15 行目: ca_cert は指定しなくとも今回は接続できました。ただし、フツーは CA は持ってないですよね。もし必要であれば Symantec のサイト から VeriSign Root Package をダウンロードしてきてその中から pem ファイルを一個指定すると良いらしいです。
  • 16 行目: eapol_flags は 0 にしました。

 
こんな感じで指定し、あとはつながるかの試験です。

 
3). wpa_supplicant をデバッグモードで起動
以下のコマンドを実行し、デバッグモードで起動します。

# wpa_supplicant -ddKiq -i bge0 -c /etc/wpa_supplicant.conf -D wired

 
上記のコマンドを実行するとドドドと文字が出力され、それを確認すると、接続したか失敗したか解ります。うまく接続できない場合には出力されたログを google などで調べてください。

なお、上記コマンドでは -D オプションでドライバを指定しています。 Wi-Fi NIC では必要ないのですが Ethernet NIC ではこのオプションが必要になります。
wpa_supplicant -h と実行してヘルプが表示されますが、そこに drivers: が表示されるので、利用できるドライバーを指定します。見ると bsd と null と wired の三つがあるようですね。

 
FreeBSD の /etc/rc.d/netif ではどのタイミングで -D wired を付加するのか確認してみたら /etc/network.subr の中に記述されている is_wired_interface() で確認しているようですね。

全ての NIC のデバイス確認してるんかい?

などと思ったのですが ifconfig の media: Ethernet で判断していました。うーん。頭良い;-)。

 
4). あのー。接続できないのですが・・。
ですよねぇ・・。一発で上手く行ったらすごいです;-)。試行錯誤を繰り返してください;-)。

一点だけ確実に解ることがあります。例えば以下のような状態

・Windows で EAP 認証で接続
・Windows 上で Virtualbox が動いていて、ネットワークはブリッジ
・Windows 上の Virtualbox のゲスト OS ある FreeBSD から wpa_supplicant で接続
・FreeBSD では上記設定を入れていても EAP 認証できない orz

L2 スイッチの接続・機能の制限もあるのですが、通常は 1 ポートで一個の EAP 認証しか許可していない場合が多いようです。 Windows で EAP 認証をしたらその上で動いている FreeBSD では EAP 認証を受け付けてくれない。という可能性はありそうです。
L2 スイッチの設定を確認して一つのポートで複数の EAP 認証での接続を許可しているか確認してみましょう。
例えば L2 スイッチのポートに HUB を接続し、そこに三台 PC をぶら下げて三台とも EAP 認証できるか? って状態と一緒ですね。

 
とまぁ、ウェブで日本語によるドキュメントがあまりないのようなのでちょっと書いてみました。繋がらない場合には基本的にはウェブで確認してみてください。
また、今回僕が試した環境では上記の設定がバッチグーでした。他の環境では上記設定では繋がらないのかもしれないです。その場合は、ここに書いてある内容ではダメなのかもしれないですねぇ・・。

2月 012014
 

このブログのとあるエントリにコメントを頂きました。 URL 的にはこれになるんですけども。

http://running-dog.net/2013/11/post_829.html#comment-36710

たまたま偶然なのかもしれませんが、以前私が日本語 po フアイルを書いた wifimgr が FreeBSD 9.2-RELEASE では動作しなくなったのだけど原因解りますか? と、いうモノです。
ちなみに今回は全然関係ありませんが、日本語 po ファイルは wifimgr の作者送り、採用されています;-)。

 
まず最初に wifimgr のソースコード眺めてみましたが、こいつは小さいプログラムなので簡単でしたね。ただ GTK の部分は全くわかりませんが、今回は GTK の部分はとりあえず置いておくことができそうです。そんな感じでソースコードを眺めたのですが wifimgr は GUI のボタンを押すと system() で ifconfig とか /etc/rc.d/ の下のスクリプトを実行していることが解りました。

 
そして wifimgr のソースコードを眺めてみるとだいたいが /etc/rc.d/netif を起動して、その戻り値でエラーをはいて停止してしまうことが解りました。

次に 9.1-R と 9.2-R の /etc/rc.d/netif を diff してみましたが、大きな相違点としては、 9.2-R では /etc/rc.d/routing を呼ぶようになった部分が怪しいです。実際に 9.1-R の /etc/rc.d/netif を 9.2-R に持ってきて wifimgr を起動すると無事に動作しました。あいや。するっていと原因は本当に /etc/rc.d/routing だねぇ。と、更に特定できました。

 
あとは IRC で教えてもらった以下の設定を /etc/rc.conf に仕込んで /etc/rc.d/routing の動作確認です。

rc_debug="YES"

 
そして /etc/rc.d/routing のあちこちに logger コマンドを仕込んで変数の値を /var/log/messages に出力させます(他にも /etc/rc.subr や /etc/network.subr も見る必要がありますが)。

/etc/rc.d/routing は以下のコマンドオプションで実行されているようですね。

# /etc/rc.d/routing start any wlan0

 
さてさて。原因の特定ですが、以下の行にあることが解りました。

    43          ""|[Aa][Ll][Ll]|[Aa][Nn][Yy])
    44                  for _a in inet inet6 ipx atm; do
    45                          afexists $_a && setroutes $_cmd $_a $_if
    46                  done
    47                  ;;

 
44 行目で inet inet6 ipx atm を定義して 45 行目で static_hoge として呼び出しているのですが inet6 を実行すると戻り値がおかしくなるらしく、その戻り値が /etc/rc.d/routing の戻り値として wifimgr に戻ってエラーになって終了するようです。
実際に

・44 行目の inet6 を消すと無事に動作する。
・45 行目の下に logger コマンドを入れると無事に動作する。
・routing_start() の終了時に return 0 を追加すると無事に動作する。

となりました。
このことをとある方にご連絡したところ、以下のパッチを書いてくださいました。多分次のリリース及び STABLE や freebsd-update では更新されるのではないかと思われます。

以下、頂いたパッチを先行して公開します。 FreeBSD 9.2-RELEASE で wifimgr を使っているが正常に動作しなくて困っている方は適用してみてください。

Index: etc/rc.d/routing
===================================================================
--- etc/rc.d/routing    (revision 255154)
+++ etc/rc.d/routing    (working copy)
@@ -42,7 +42,8 @@
                ;;
        ""|[Aa][Ll][Ll]|[Aa][Nn][Yy])
                for _a in inet inet6 ipx atm; do
-                       afexists $_a && setroutes $_cmd $_a $_if
+                       afexists $_a || continue
+                       setroutes $_cmd $_a $_if
                done
                ;;
        *)

 
これで無事に動作するようになると思われます。 wifimgr のほうもソース修正しなくとも良い(バージョンを見て実行するコマンドオプションを変えるのもつらいべ)のではないかと思われるので一安心です;-)。

あとで wifimgr の作者にメールしようと思います;-)。

あ。最後にですけど、 static_inet6() の戻り値がぶっ壊れる(っぽい)原因は詳しくは調べていません。もしかしたら FreeBSD の rc スクリプトが原因ではなく、僕が設定した /etc/rc.conf の IPv6 の設定がおかしくてそれが原因で正しく処理されずに戻り値が壊れて、結果的に /etc/rc.d/routing の戻り値がエラーになるのかもしれません。その場合、原因は僕にありそうですねf(^^;;。

1月 312014
 

いやー。WordPress なブログを三つ持っているのですが、そのうち二つのブログで WordPress 3.7.1 から 3.8.0 そして 3.8.1 へ自動アップデートできなくて困っています。

/wp-admin/update-core.php から [今すぐ更新] ボタンを押すと以下の画面になって、 wordpress.com へのアクセスがタイムアウトしているようです。

WordPress_update

パケットキャプチャしたり、自分のサーバのログを見たのだけど、どうも原因が特定できない状態。しょーがないので自動アップデート(ボタンによる更新作業。か)は断念して、手動アップデートすることにしました。

以下はその作業ログです。あ。root もしくはシェルが利用できる環境が必須です。 ftp しか利用できない環境では、残念ながら無理かもしれません。

あと、この手順で手動バージョンアップを実施してブログがおかしくなっても筆者(それはつまりは僕のことですが)は責任は持てないので、自己責任でお願いします。

 
1). 作業前にバシっとバックアップを取りましょう。
ブログの DocumentRoot が /usr/local/www/blog/ だとして話を進めます。

$ sudo -s
# cd /usr/local/www/
# tar cvzfp blog-backup.tgz ./blog
# cd blog/
# cp wp-config.php wp-config.php.sv

 

バックアップが完了しました。まぁ、ほぼ全部を tar で固めたのでイザというときは解凍すれば良いだけですね。必要であれば MySQL などの DB もバックアップしましょう。僕はバックアップしませんでしたけどf(^^;;。

 
2). パーミッションの確認
ブログの DocumentRoot が /usr/local/www/blog/ だとして、その下の wp- で始まるファイル群ののオーナーとグループを確認します。 apache:apache とか www:www や daemon:daemon などでしょうかね?

 
3). WordPress のソースの展開
WordPress のサイトからダウンロードして来たインストールしたいバージョンのファイルを展開し、オーナーとグループを直します。

$ unzip wordpress-3.8.1-ja.zip
$ cd wordpress
$ sudo -s
# chown -R apache:apache ./*
#

 
4). バージョンアップ実施
インストール前にオーナーとグループをそろえたので後はドバっと行きます;-)。

# cd ~/wordpress/
# /bin/cp -pr * /usr/local/www/blog/
#

 
豪快に cp します。オプションに -pr を付けたのでパーミッションと全てのディレクトリをサクっとインストールしてくれます。

ダウンロードした wordpress を展開したディレクトリの中のディレクトリは wp-admin/ wp-content/ wp-includes/ の三つです。wp-content/ の中が気になるようでしたら別途保存しても良いかと思われます。

が、上記で一応ファイル群のインストールは完了しました。

 
5). データベースの更新
cp -pr の実行が完了したら http://FQDN/wp-admin にアクセスしログインします。ログインするとデータベースを更新する必要があります。と、言われるので[WordPress データベースを更新]ボタンを押します。

WordPress_update2

これが無事に終わるとアップデートは完了です。

手動でやるとしてもずいぶんと簡単ですねぇ。「WordPress の更新」の画面からボタンをぼちっとな。と、押してもダメな場合はバックアップの後に cp -pr ってことでしょうかねぇ。けど、せっかくならインストール用スクリプトも同梱してくれれば良いのになぁ。

3月 252013
 

いやー。cvsup.icmpv6.org というサーバを立てていたのですが csup がいよいよ利用できなくなりましたね。 cvsupd から持ってきたソースコード、例えば ports を portmaster -D -a とかすると「もう使えないぜ。ベイビー。」とか怒られる。

それならば、と、いうことで ports などは snv で取ってくることにしましょう。基本的には以下のコマンドで svn で FreeBSD の ports ツリーを取ってくることができます。

# svn co https://svn0.us-west.FreeBSD.org/ports/head /usr/ports
# cd /usr/ports && svn update

 
FreeBSD のソースコードを取ってくるには svn というのが必要で、それはつまりは ports 的にいうと devel/subversion が必要になるのでこいつをインストールしてあげる必要があります。後で出てきますが、svn サーバを必要としない、クライアントのみで利用するのであれば devel/subversion-static のほうが、余計なのがインストールされないので良いかもしれません。

上記コマンドを実行するときには一旦 /usr/ports/ の中を綺麗にしたほうが良いかもしれんですね。 ports/distfiles/ の中に色々とゴミが残るのでどこかに一時的に移動するか、サッパリと \rm -r /usr/ports してしまったほうが良いかな? 個人的に自由にしてください;-)。

さてさて。svn コマンドを実行したときに、海外のサーバを見に行くことになるのですが、ちょっと遅いかもしれないし大変ですよねぇ。今まで cvsupd なサーバを自分で構築していたので svn なサーバも自分で構築してみましょう。 FreeBSD のための Subversion のミラーサイト (FreeBSD.org subversion mirror) を構築してみます。それが今回のお題目です。

まずは ports から devel/subversion をインストールします。こちらを make すると make config で色々聞いてきます。 devel/subversion-static のほうは特に何も聞いてきません。 FreeBSD の svn サーバを構築する場合には以下のオプションを [X] にして make install しましょう。

[X] MOD_DAV_SVN        mod_dav_svn module for Apache 2.X
[X] MOD_DONTDOTHAT     mod_dontdothat for Apache 2.X

 
すると apache22 までインストールしてくれます。うひっ。 php とか、この手の apache 絡みのヤツを ports からインストールすると強制的に apache までインストールされてしまうのは、ちょっとどーかと思う。僕は apache は自分で make する派なのでねぇ。 mod_* だけインストールしてくれれば嬉しいなぁ。

と、いうことで apache まで起動できる状態になったので svn サーバ (仮に svnweb と言います)を作成していきましょう。

まずは FreeBSD のソースコードや ports 一式を先に取ってきます。

# mkdir /home/svnweb
# cd /home/svnweb
# ftp -a ftp://ftp5.jp.freebsd.org/pub/FreeBSD/development/subversion/svnmirror-base-r238500.tar.xz
# ftp -a ftp://ftp5.jp.freebsd.org/pub/FreeBSD/development/subversion/svnmirror-ports-r301235.tar.xz
# tar xvzfp svnmirror-base-r238500.tar.xz
# tar xvzfp svnmirror-ports-r301235.tar.xz
# svnsync sync file:////home/svnweb/base
# svnsync sync file:////home/svnweb/ports

 
base のほうは FreeBSD のソースコードです。 ports は ports ですね。 r238500 とか r301235 ってのはレビジョンのようです。以下の URL が参考になるかと思います。

http://svnweb.freebsd.org/base/

ftp で取ってきたやつでさえも古いので更に sync して最新のものに揃えます。それが上記コマンドの下の二行です。 snvsync するとどこから取ってくるんでしょうなぁ? 後でキャプチャしてみよう(キャプチャした結果 svn.FreeBSD.org からでした;-)。

と、いうことで最新のソースがこれで準備できたと思います。あ。定期的に svnsync するには以下のスクリプトを書いて cron に登録すれば良いでしょうね。

#!/bin/sh
/usr/local/bin/svnsync sync file:////home/svnweb/base
/usr/local/bin/svnsync sync file:////home/svnweb/ports

 
ちなみに、base と ports だけで 20GByte くらいのディスク容量が必要になります。HDD の容量に気をつけてください。

さささ。続いてサーバのほうを設定していきましょう。基本的には httpd が動作していて port:80 にアクセスします。 SSL に対応しているのであれば https:// でアクセスできます。

まずは httpd.conf ですが、 devel/subversion をインストールしたのであれば特に何もせずとも動作します。うひっ。 ports/subversion インストール時に上に書いた二つのオプションを有効にしたのであれば、多分 httpd.conf に以下の設定が既に追加されているはず。

LoadModule dav_svn_module   libexec/apache22/mod_dav_svn.so
LoadModule authz_svn_module libexec/apache22/mod_authz_svn.so

 
ほー。svn のサーバって dav で動作するんだねぇ。するっていと多分 extra/httpd-dav.conf にも設定必要だね。って思うんですが、果たしてそのとおりで、 extra/httpd-dav.conf の中身を全部消して、以下の行を追加して上げます。

<Location />
    DAV svn
    SVNParentPath       /home/svnweb
    Order deny,allow
    <LimitExcept GET PROPFIND OPTIONS REPORT>
        Deny from all
    </LimitExcept>
</Location>

 
あとは httpd を起動すれば動作すると思います。あ。Include etc/apache22/extra/httpd-dav.conf の行は当然コメントアウトをはずす必要があります。

ウェブブラウザでアクセスすると http://svnweb.icmpv6.org/base/ こんな感じで見えるようになります;-)。

では実際に正しく動作するか確認してみましょう。手元にある FreeBSD から以下のコマンドを実行してみます。

# svn co http://svnweb.icmpv6.org/ports/head /usr/ports

 
既に一回、他の svnweb から /usr/ports に持ってきてしまうと svn のエラーコード E155000 で怒られます。その場合には違うディレクトリに co するか、 /usr/ports/.svn/ というディレクトリが svn の接続先情報を管理しているようなのでこのディレクトリを mv すれば良いかもしれません。

さてさて。 apache の設定に戻りますが、svnweb のためだけに httpd を起動する人は皆無だと思うので、多分 httpd-vhosts.conf で VirtualHost の設定をしているかと思います。 DAV svn の設定も簡単で VirtualHost ディレクティブの中に httpd-dav.conf で書いた設定をそのまま書いてあげると良いです。その場合は Include httpd-dav.conf の設定は必要なくなります。

と、いうことで 簡単な svn の使い方と svnweb の立て方をサラっと書いてみました。皆さんもどんどん日本に FreeBSD 用の svn のサーバを起動してみてください;-)。 ちなみにですが、以下を一応用意しました。それぞれのサーバに base/ と ports/ があります。

http://svnweb.icmpv6.org/ (IPv4/IPv6)
https://svnwebv4.icmpv6.org/ (IPv4)

いつも動作している保証はありません;-)。

12月 202012
 

僕は SkyDrive の利用者なのですが、ことの発端は、Windows7 や OS X では SkyDrive がファイルマネージャから利用できるのに FreeBSD の (KDE の) ファイルマネージャでは見ることができないんかな?と、いうところから始まりました。

で、結論から先に書くと、多少問題はありますが /mnt 辺りにマウントできて、 ls とか打てば表示してくれます。でもってファイルマネージャ、例えば KDE4 の ファイルマネージャである dolphin から SkyDrive が参照することができてデスクトップにコピーとかもできるようになります。

では、その方法についてちょっと見て行きましょう;-)。

まずはじめに、僕は以前「SkyDrive をコッテリ使う。」というエントリを書きました。当時はまだ Microsoft から SkyDrive の App が出ていなかったので苦肉の策だったんですけどもね。最近は iOS や Android 用アプリ、上にも書いたデスクトップ用アプリがあるので簡単にアクセス可能になりました。

まぁ、 FreeBSD で利用するときはブラウザ経由で利用すればいーじゃん。と、いう話はあるのですが、どーせならネーテブに利用したい。ってんで、探してみるとその、上のリンク先のエントリに書いた SMEStorage ってのを利用すると mount することができることが解りました。

SMEStorage に付いてはリンク先のエントリを読んでください。で、スマートフォン用アプリが無い時代には SMEStorage を利用していたのですが、最近はすっかりとご無沙汰していたのであります。このサイトにログインすると Linux 用のクライアントが用意されているのでそれを利用してみることにしました。

SMEStorage のトップページはこちら http://storagemadeeasy.com/
その Linux 向けツールはこちら http://storagemadeeasy.com/LinuxDrive/

とりあえず CentOS 用の RPM をダウンロードして展開します。

$ rpm2cpio smestorage-3.0-16.noarch.rpm | cpio -id
$ cd usr/local/bin/
$ ls
smestorage
$ file smestorage
smestorage: a /usr/bin/perl -w script text executable

 
RPM を展開すると usr/local/bin/smestorage というのが現れます。 usr/share/ の下はとりあえず無視します。で、 smestorage というコマンドは perl のスクリプトなんですね。すげー。 Linux バイナリじゃないし。で、すかさず実行します;-)。が、perl の色々なモジュールが無いと言われるので ports からインストールしてあげます。ちょっと解らなかった ports は devel/p5-TimeDate ですかね。あとはサクっとインストールして完了です。

で、perl のモジュールが色々入ったので早速実行してみますが、あいや。 mount_fusefs ってなんだぁ? となります。 Fuse.pm をインストールした時に合わせて fusefs-kmod とか fusefs-libs がインストールされます。

fusefs ってのはファイルシステムの一種なのですが、僕は今回初めて知りました。以下の URL を参照して貰えれば一目瞭然でしょう;-)。

http://fuse.sourceforge.net/

ユーザ空間内で利用するためのファイルシステムだそうです。なんのこっちゃ?f(^^;;。

# kldload /usr/local/modules/fuse.ko
# ls -l /dev/fuse0
crw-rw----  1 root  operator    0, 118 Dec 28 22:45 /dev/fuse0

 
と、いうことで fuse.ko を kldload したらデバイスが一個生えてきました。こいつを利用して再度 smestorage を実行します。オプション無しで実行するとコマンドラインオプションが表示されます。

# ./smestorage
Usage: smestorage mountpoint user:password [providerUser:providerPassword] [--server=host] [--ao] [--DEBUG] [--ct=time]
Example:
smestorage /folder1 login1:password1 --server=eu.smestorage.com --ao --ct=30

 
第一パラメータにマウントポイントを指定します。そして login1:password1 は http://storagemadeeasy.com/ にアカウントを作成し、ログインするためのログイン名とパスワードを指定します。最初はこれだけでコマンドを実行します。

すると、あぁら不思議。と、いうか、あぁらすごい。 http://storagemadeeasy.com/ のウェブベースファイルマネージャで閲覧できる内容が /mnt に見えるようになりました。

# ./smestorage /mnt smeuser:smepasswd
# ls /mnt/
Image Thumbs/
My Quick Uploads/
My SkyDrive files (smestorage@live.jp)/
My Syncs/
My backups/
My contacts/
My iPhone Syncs/
My memos/
My voice memos/

 
SMEStorage のサービスで SkyDrive を利用していると “My SkyDrive files” というディレクトリができています。で、そこに cd して ls とか叩くと SkyDrive 上の内容が表示されるようになります。うひっ。

けど、多分純粋な SkyDrive の内容ではなく、SMEStorage がキャッシュした SkyDrive の内容だと思います。なので、更新とかしてあげないと最新の情報を SkyDrive と sync してくれないこもしれないです。まぁ、その辺りはある程度はしょーがいなですね。

そして、遅いかなー。まぁ、クラウド上のデータを ls するんだからそれなりに遅いですよね。それはまぁ、仕方のないことかな。

で、上記のコマンドオプションのみだと /mnt/ は root 権限でしか見ることができません。 smestorage コマンドのオプションに –ao ってのがあるので、このオプションを利用すると一般ユーザからでもアクセス可能になります。なので KDE4 の人は dolphin などでアクセスが可能になります。僕は LANG に UTF-8 を利用しているのですが、SkyDrive 上の日本語のフアイルも文字化けせずに利用することができます。

と、いうことで、これで SkyDrive の内容が自分の FreeBSD から直接アクセス(正確に言うと SMEStorage 経由の間接的なキャッシュ情報へのアクセス)できるようになりました。有る意味すごいですね。色々できそうな感じです;-)。

とわ言いつつ、基本的には SMEStorage のサービスというか機能に引っ張られての SkyDrive の利用なので、その点について、良いか悪いかはいまいち解りません。

今回は fusefs のお勉強がメイン。と言う感じでしょうか。あ。/mnt のアンマウントは umount /mnt で可能です。エラーが出ますが、多分アンマウントされていると思います。
それにしても smestorage コマンドが perl で書かれているので、僕はまだ中を覗いてないのですが、色々できそうですね。

 
このエントリ、続くか?;-)。

10月 152012
 

ウェブの作成に携わっていると「アクセスカウンタ欲しい。」とか思うことが多々あるとおもいます。で、このブログにも右上にあるんですけどもね。このブログのカウンタは wwwcount というのを利用しています。 FreeBSD の ports では www/wwwcount になりますが、 ports からインストールされるバージョンは 2.5 なんですね。けど、ウェブページを見に行くと 2.6 が存在しているようです。

そもそも wwwcount の IPv6 対応パッチとはなんぞや? ということになるのですが、 wwwcount では同一アドレスから連続してアクセスがあったときにはカウントをアップしないという機能があります。要はリロードしてもカウントがアップしない機能ということになるんですけども。

で、その処理をするために data/count.dat ファイル内にカウンタ数と直前にアクセスがあった IP アドレスを保持しています。直前にアクセスがあった IP アドレスは IPv4 にしか対応してないんですね。それもそのはず。カウンタ数と IP アドレスの区切り文字が “:” だからなんですね。アタタタ。orz。

直前にアクセスのあった IP アドレスが IPv6 アドレスの場合、正しく動作しないのでリロードするとカウンタがどんどん上がっていくのが今のところの仕様です。なので、IPv6 に対応したパッチを書きました。以下の URL に置いときます。

http://icmpv6.org/Prog/wwwcount2.6-IPv6.patch.gz

このパッチを適用するとカウンタ数と IP アドレスの区切り文字が “;” になるので IPv6 でアクセスがあった場合でもリロードでカウントアップするのが防げます。

上にも書きましたが FreeBSD の ports の wwwcount は 2.5 です。このパッチは 2.6 用です。ソースから make してください;-)。

2月 202012
 

それにしても ports で提供されている snmpd、つまりは net-mgmt/net-snmp なんですけども、最近のバージョンはあまりにひどすぎる。エラーログを延々とはき続けているは、CPU 食いまくっているわでロクなモンじゃない。いい加減使うのイヤになって来た。

で、思いついたのが bsnmpd。FreeBSD に標準で付加されるようになった snmpd なんだけども、やっぱり net-snmp があまりにもヒサンなので「自前で持ってしまえーっ!!」ってんで開発が始まったのかなぁ?経緯は知らないんですけども。

と、いうことで今回は net-snmp を利用するのをやめて、bsnmpd を利用することにしたのですが、その顛末を書いてみたいと思います。まず、最初に書いてしまいますが、僕的には net-snmp の代用に十分になることが確認できました。なので自宅のサーバは bsnmpd を稼働するようにしました。

まず、はじめの手順ですが、 ports からインストールする net-mgmt/net-snmp を停止します。ただし、snmpd を停止するのみで pkg_delete はしませんでした。snmpwalk は利用したいしねー。みたいな感じです。そしてその後、bsnmpd を起動するように /etc/rc.conf に以下の設定を追加します。

bsnmpd_enable="YES"

 
が、その前に /etc/snmpd.config の設定があるんですね。

あ。今回利用した FreeBSD のバージョンは 9.0-STABLE です。 /etc/snmpd.config の設定自体は SNMPv3 や ACL に対応したようでずいぶんと長くなりました。が、要らない部分も多いのでサクっと消して起動。って感じです。
あと、ports 的には net-mgmt/bsnmp-ucd もインストールしておきましょう。これ重要です;-)。

でもって今回は以下のポリシで設定してみました。

・ネットワークインターフェースからトラフィック情報を取得します。
・ただし snmp_netgraph.so や snmp_bridge.so 、 snmp_wlan.so などのモジュールは利用しません。
・SNMPv1・v2c でアクセスします。
・プライベートアドレスからのアクセスのため ACL は設定しません。
・Read な MIB のみを参照します。

設定はそんなに苦痛ではなかったですね。 /etc/snmpd.config の default の設定では基本的に system とか if MIB の情報しか取れないので ports でインストールした net-mgmt/bsnmp-ucd がディスク・メモリ・ロードアベレージと、net-snmp の exec にも対応してくれます。すごいっ!!

porst の net-mgmt/bsnmp-ucd をインストールすると /usr/local/share/examples/bsnmp-ucd/snmpd.config.sample がインストールされるので、これを編集して /etc/snmpd.config で include するか /etc/snmpd.config に直接書いてしまうのが手っ取り早いです。

以下は僕が設定した /etc/snmpd.config になります。

1  # Set some common variables
2  location := "FreeBSD World."
3  contact  := "takachan@running-dog.net"
4  system   := 1   # FreeBSD
5  read     := "HelloWorld"
6
7  # Declarations for SNMP-USER-BASED-SM-MIB
8  NoAuthProtocol          := 1.3.6.1.6.3.10.1.1.1
9  HMACMD5AuthProtocol     := 1.3.6.1.6.3.10.1.1.2
10  HMACSHAAuthProtocol     := 1.3.6.1.6.3.10.1.1.3
11  NoPrivProtocol          := 1.3.6.1.6.3.10.1.2.1
12  DESPrivProtocol         := 1.3.6.1.6.3.10.1.2.2
13  AesCfb128Protocol       := 1.3.6.1.6.3.10.1.2.4
14
15  # Enumerations from SNMP-FRAMEWORK-MIB
16  securityModelAny        := 0
17  securityModelSNMPv1     := 1
18  securityModelSNMPv2c    := 2
19  securityModelUSM        := 3
20
21  # Message Processing models
22  MPmodelSNMPv1           := 0
23  MPmodelSNMPv2c          := 1
24  MPmodelSNMPv3           := 3
25
26  # Security levels
27  noAuthNoPriv := 1
28  authNoPriv := 2
29  authPriv := 3
30
31  # Configuration
32  %snmpd
33  begemotSnmpdDebugDumpPdus       = 2
34  begemotSnmpdDebugSyslogPri      = 7
35
36  begemotSnmpdCommunityString.0.1 = $(read)
37  begemotSnmpdCommunityDisable    = 1
38
39  # open standard SNMP ports
40  begemotSnmpdPortStatus.0.0.0.0.161 = 1
41
42  # open a unix domain socket
43  begemotSnmpdLocalPortStatus."/var/run/snmpd.sock" = 1
44  begemotSnmpdLocalPortType."/var/run/snmpd.sock" = 4
45
46  sysContact      = $(contact)
47  sysLocation     = $(location)
48  sysObjectId     = 1.3.6.1.4.1.12325.1.1.2.1.$(system)
49
50  # Load MIB-2 module
51  begemotSnmpdModulePath."mibII"  = "/usr/lib/snmp_mibII.so"
52
53  # bsnmp-ucd (8)
54  begemotSnmpdModulePath."ucd" = "/usr/local/lib/snmp_ucd.so"
55  %ucd
56  memMinimumSwap = 1600
57  memSwapErrorMsg = "No free swap!"
58
59  laConfig.1 = "6.0"
60  laConfig.2 = "5.0"
61  laConfig.3 = "4.0"
62
63  laErrMessage.1 = "1min load average is high!"
64  laErrMessage.2 = "5min load average is high!"
65  laErrMessage.3 = "15min load average is high!"
66
67  # Process table
68  prNames.1 = "sendmail"
69  prMin.1 = 1
70  prMax.1 = 3
71  prNames.2 = "httpd"
72  prMin.2 = 3
73  prMax.2 = 100
74
75  # Extension commands (extTable)
76  extNames.1   = "CPUTemp"
77  extCommand.1 = "/usr/local/bin/cputz.sh CPU"
78  extNames.2   = "HDDTemp"
79  extCommand.2 = "/usr/local/bin/cputz.sh HDD"
80  extNames.3   = "CPUAUTO"
81  extCommand.3 = "/usr/local/bin/cpuspeed.sh AUTO"
82  extNames.4   = "CPUFULL"
83  extCommand.4 = "/usr/local/bin/cpuspeed.sh FULL"

 
default の部分を残してある設定もありますが、ほぼ不要と思われる設定を消しました。そして、

・54 行目で /usr/local/lib/snmp_ucd.so をロードしています。
・56 行目はメモリの設定
・63 行目は CPU ロードアベレージの設定
・68 行目でプロセス数の設定。今回は .1 で sendmail 、 .2 で httpd の数を取得することにしました。
・76 行目以降は net-snmp の exec に相当する機能です。僕の場合は CPU 温度と CPU 速度を返すスクリプトを呼ぶようにしています。

こんな感じで記述して後は /etc/rc.d/bsnmpd start とかして起動すれば OK です。

net-snmp をインストールしていると snmpwalk があるのですが、削除してしまった場合には net-mgmt/bsnmptools をインストールするとそれに対応するコマンドがインストールされます。僕の場合、クライアントは net-snmp のを利用するので動作確認はしていませんが;-)。

デーモンである bsnmpd を利用した感じですが、net-snmp の snmpd より軽いですね。 CPU 負荷が低い。あと、要らんログが出力されないのも良い。それでいて net-snmp のと同等機能で動作するのでこれまた良い感じです。

ただ、一点だけ。bsnmpd を起動して netstat -a で確認してみると udp6 のポートが空いてないんですね。と、いうことは bsnmpd は IPv6 に対応してないのかなぁ? という気がちょっとしています。オプションを調べても IPv6 のが無いですし・・。あ。ソースコードは読んでないです;-)。

と、いうことで、いいかげん嫌気がさしてきた net-snmp を置き換えて利用する bsnmpd ですが、今のところは十分に利用可能だと思われます。サーバ系では特に。情報収集のためのデーモンが一番 CPU を消費していてもらっては困りますしねX-|。

6月 162011
 

さてさて。このブログでは過去三回ほど、MRTG の IPv6 化と言うか対応について書いたことがあります。

mrtg が IPv6 で動作しない。
net-snmpd+mrtg の IPv6 化とその他もろもろ。(2)
net-snmpd+mrtg の IPv6 化とその他もろもろ。

今回は過去に検証したものについて、再度の検証を行い、実際にはどういう動作になったのかを確認してみたいと思います。

と、言うのも最近の perl は 5.14.0 になって IPv6 回りに改良が加えられました。 Socket モジュールがちょっと変更になったんですね。そして、mrtg 自体も以前からはバージョンが上がっているので IPv6 回りに改修が入ったのではないかと思い、再度の検証とするのであります。

今回利用するのは最新の ports-current です。このエントリーの一日前に csup したものを利用します。mrtg が動作するのに必要なものは以下辺りでしょうかねぇ。

    perl-5.14.0
    p5-IO-Socket-INET6-2.67
    p5-Net-SNMP-6.0.1
    p5-SNMP_Session-1.13
    p5-Socket6-0.23
    mrtg-2.17.1
    net-snmp-5.5_4

今回の検証はこれで試してみました。ports の net-mgmt/mrtg は WITH_IPV6=true で make config します。すると関連性で net/p5-IO-Socket-INET6 と net/p5-Socket6 がインストールされ、IPv6 Ready な mrtg となります。

IPv6 の機器に対応した設定ファイルである mrtg.cfg を書いて、早速 env LANG=C mrtg mrtg.cfg とかを実行します。が・・。エラーが出て動作しませんでした。

一個目は SNMP_Session.pm が以下のメッセージを出力します。長いので改行してあります。

% env LANG=C mrtg mrtg.cfg
Subroutine SNMP_Session::pack_sockaddr_in6 redefined at \
/usr/local/lib/perl5/5.14.0/Exporter.pm line 67. at\
/usr/local/lib/perl5/site_perl/5.14.0/SNMP_Session.pm line 149
Subroutine SNMPv1_Session::pack_sockaddr_in6 redefined at \
/usr/local/lib/perl5/5.14.0/Exporter.pm line 67. at\
/usr/local/lib/perl5/site_perl/5.14.0/SNMP_Session.pm line 608

 
このメッセージはエラーだと思い込んでいたのですが、ただのワーニングメッセージなので一応は mrtg は問題なく動作するようです。

しかし、インストールした mrtg コマンド、つまり /usr/local/bin/mrtg のほうが別のエラーを出力してまともに動作してくれません。エラーメッセージは以下の通り。

% env LANG=C mrtg mrtg.cfg
Undefined subroutine &main::AF_UNSPEC called at /usr/local/bin/mrtg line 2247.
Undefined subroutine &main::AF_UNSPEC called at /usr/local/bin/mrtg line 2247.

 
AF_UNSPEC が無い。と言われるんですね。このメッセージは本当にエラーなので、 mrtg はまともに動作しないので問題を取り除く必要があります。

僕は以下のように改修しました。

--- mrtg.orig   2011-06-16 15:40:42.000000000 +0900
+++ mrtg        2011-06-16 17:22:07.000000000 +0900
@@ -2244,7 +2244,7 @@
my @res;
my ($too,$port,$otheropts) = split(':', $$target{SnmpOpt}, 3);
$port = 161 unless defined $port;
-            @res = getaddrinfo($hostname, $port, AF_UNSPEC(), SOCK_DGRAM());
+            @res = getaddrinfo($hostname, $port, &Socket::AF_UNSPEC(), &Socket::SOCK_DGRAM());
if (scalar (@res) < 5) {
warn "$NOW: WARNING: Skipping host $hostname as \
it does not resolve to an IPv4 or IPv6 address\n";
return 'DEADHOST';

 
AF_UNSPEC がどこにあるのか解らないみたいなので、明示的に Socket モジュールの中のを利用するように記述しました。あと、SOCK_DGRAM も「&main には無いよ。」と言われるのでこっちも直します。しかし、他にもっと美しい改修の方法があるんでしょうなぁ。とは思いますが・・f(^^;;。

これで実行すると無事に mrtg が動作するようになりました。良かったです。

さてさて。ここまでで一応 mrtg コマンドは動作しました。実は順番が逆になっているかもしれないのですが、続いて mrtg.cfg のほうを見ていきたいと思います。

以前の「net-snmpd+mrtg の IPv6 化とその他もろもろ。(2)」のエントリーのところで Target 節のパラメータに ifIndex しか指定できない。などと書いたのですが、この点は結構重要になってきます。

ifIndex と NIC なんてのは増設すると同期が取れなくなるので ifIndex で mrtg は取得してくないですよね。今回試したのは以下の四パターン。

Target[server_bge0]: 1:public@[2001:3e0:a71::f:10]:::::2
Target[server_bge1]: \bge1:public@ipv6.running-dog.net:::::2
Target[router_gi01]: 32:public@2001:3e0:a71::f:1]:::::2
Target[router_gi02]: \GigabitEthernet0/1:public@cisco.running-dog.net:::::2

 
ふむ。以前試した時は ifDescription では mrtg で情報が取得ができず ifIndex でのみしかダメだったのですが、今回は無事に上のどのパータンでもトラフィック情報を取得することができました。インターフェースだけでなく、フツーの MIB も IPv6 アドレスでも FQDN でもどちらでもきっちり取れるようになりました。これは非常に嬉しいことですね。

あと、MRTG の公式サイト http://oss.oetiker.ch/mrtg/doc/mrtg-ipv6.en.html を見れば色々書いてありますが、FQDN で問い合せた時、当該機器の snmp が IPv6 に対応していない場合 IPv4 に fall back せずにそのまま終わってしまう件ですが、

1. EnableIPv6: yes の設定で
2. Target: 節に FQDN を書いていて
3. その機器は IPv4 にしか対応していない場合は mrtg が取れない。
4. そんな時は IPv4Only: 節を利用すると良いですよ。

と、言うことらしいです。つまりは IPv4Only: 節がある機器の場合は最初から IPv4 で mrtg が動作するみたいです。これは良かった;-)。

Target[macosx_en0]: \en0:public@mac.running-dog.net:
IPv4Only[macosx_en0]: yes

 
こんな感じで mrtg.cfg を書けば IPv4 にしか対応していない MacOSX SL の snmpd に対しても無事に mrtg が取得できます。

過去、何回かこのブログに書いた mrtg ですが、これで多分は全部大丈夫っぽいかなぁ。

いやぁ。良かった良かった。それにしても CentOS 5.6 では IPv6 対応の mrtg がまともに動作していなんだよなぁ。今回は FreeBSD で検証したんだけど、CentOS の Final でも再度検証が必要かなぁ。

と、おもーちょります。

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月 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 的はまり道を書いたのであります。