4月 012011
 

以前のエントリーで「kdepim4 を日本語化する。」と言うのを書きました。このとき書いた内容としては

・KDE-4.6.1 が出ました。
・しかし、kdepim は 4.4.10 です。
・なので、ja-kde-l10n-4.6.1 の ports/packages では kdepim4 は日本語が表示できません。
・それならは古い packages から「ポ・ファイル」 を持ってきてインストールしてしまいましょう。

って感じだったのであります。

現在 JKUG のサーバは計画停電と、言うか、電気をなるべく使わないようにしましょう。キャンペーン展開中で電源断しているので ML も動作していません。なのでメンバとは、少数の人々と Twitter で話しただけでまだ真剣には議論されていません。

と、言うことで、僕が先行して ja-kde-l10n-4.6.1 の ports を作ってみました。この ports は ja-kde-l10n-4.4.5 の kdepim の日本語テキストを抜き出して 4.6.1 にパッチとして組み込んだものになります。

現在の kidepim は 4.4.10 なのでちょっと古いとは思うのですが、 JKUG の ML が止まっているので、kdepim4 の最新の日本語テキストが手に入らないためです。

後、ja-kde-l10n-4.4.5 は kdepim の日本語「ポ・ファイル」が含まれている、KDE からリリースされた最後のものになるのでそこから引っこ抜いています。あ。kdepim の「ポ・ファイル」だけで、全部で 55 個あります。akonadi 関係のファイルもたくさんあります;-)。

以下の URL に ports を置きました。

http://icmpv6.org/Prog/FreeBSD_ports/ports-ja-kde4-l10n-20110331.tgz

これを /usr/ports/japanense/ 辺りで展開して make install してください。 kdepim4 を含めて KDE-4.6.1 が日本語で表示できるようになります。

今回のこの ports を作成するに辺り、kdepim4 の日本語化には二段回あると思ってます。

1. KDE 側でリリースしている kde-l10n-ja-4.6.1.tar.bz2 で kdepim4 を日本語化する。
2. FreeBSD の ports 側で kdepim4 を日本語化する。

1. に付いては上でも書きましたが ML が止まっている状態なので、現在議論することができていません。なので、2. として僕が先に ports としてリリースした状態になっています。

JKUG で話をして KDE 本家に取り込んでもらうか、Linux 方面の人とかどうしているの?とか話す必要があると当然思っています。 1. で無理そうだったら、今回僕が作成した ports のパッチを kde@freebsd.org に投げる予定でいます。

kdepim4 は楽しいのよー。日本語化されると嬉しいのよー。と、言うことで、ちょっと頑張ってみます。
今すぐに日本語化したい方は上記 URL から ports をダウンロードしてインストールしてください。

3月 312011
 

さてさて。前回のエントリで kdepim4 が日本語対応になりました。そーするともうっ!! すっかりと色々やってみたくなるのであります。

と、言うことで、今回登場するのは KOrganizer です。スケジュール管理のアプリですね。以前に 「Thunderbird+Lightning の日本語化。」というのを書いているのですが、今回は KDE アプリで DAViCal と連携してみたいと思います。

DAViCal についても以前「DAViCal サーバを FreeBSD で。」と「DAViCal サーバを FreeBSD で。そのに。」の二度にわたって書いているので是非参照して頂ければと思います。

なお、KOrganizer と言えば、更に以前に「KOrganizer と google カレンダーの sync。」というのも書いているのですが、そっちともビミョーにリンクしたりしますのでこうご期待;-)。

まず、事の発端は「KOrganizer は iCal サーバと同期できるんかい?」とか思って情報を収集するところからなのであります。
が、しかし、かなかな見つからない。でもって日本語化された KOrganizer で再度カレンダーと言うか akonadi が提供してくれるサービスを調べてみると・・。ふむ。それらしいのがあるじゃーん。となるわけです;-)。
ちなみに akonadi については「KOrganizer と google カレンダーの sync。」のところでチロッと書いているのでそっちを参照してください。

今回利用する API はこれ。「リモートファイルのカレンダー」と言うヤツですね。

korganaizer2_1.png

カレンダーを新規登録する時に指定します。すると次に以下の画面が表示されます。で、ここに DAViCal のカレンダーの URL を指定すれば OK です。多分 MacOSX Server の iCal サーバの URL も指定できると思います。

korganaizer2_2.png

“Download from:” は読み込み用、”Upload to:” は更新用と言う意味ですが、参照して更新するので同じ URL を指定しても全然問題ありません。後はデッドロックが発生しないようにするだけなので、その下のオプションを適意設定してあげれば大丈夫なのであります。

こっちは google カレンダーと連携するよりもずっと簡単に KOrganizer に表示してくれるのでありました。

って・・。ちょっと待てよっ!! 以前、google カレンダーと連携するために「KOrganizer と google カレンダーの sync。」ってネタを書いた時には ports から databases/akonadi-googledata というのをインストールして、それを利用して google カレンダーを読み込むようにしました。

しかし、今の goolge カレンダーって確か iCal でも提供していたよねぇ? っつーことは、ワザワザ akonadi-googledata をインストールせずとも「リモートファイルのカレンダー」を選択すれば登録できるのではないだろうか?などと思い、早速試してみました。

まずは google カレンダー側の情報を確認してみます。google にログインして「カレンダー設定」から以下の情報を取得します。

korganaizer2_3.png

今回利用した google カレンダー側の情報は “限定公開 URL:” の 「ICAL」ってヤツです。この緑のボタン(たぬきではない;-)をクリックして表示される URL を KOrganizer の 「リモートファイルのカレンダー」の設定のところに指定してあげるだけで・・。あぁらぁ・・。いとも簡単に KOrganizer に表示できてしまうのでありました;-)。はい。シューリョーみたいな。そんな感じでサクっと行くのであります。

と、言うことで KOrganizer は DAViCal サーバ(iCal サーバ)にも google カレンダーにも簡単に接続して、そして情報を持ってきてくれてしまうのでありました。すばらしー。と、言うか、akonadi。やるなおまえっ!! って感じなのであります;-)。

これは本当に kdepim4 が日本語表示してくれたからここまでやって、試してみよう。と言う気になるのであります。

ただ、JKUG の人とちろっと話した感じだと、kdepim4 で日本語表示できないのはどうやら FreebSD だけのようですね。この辺り、今後 JKUG 内でも色々話していってみたいと思います。

が、なんせ、日本語表示してくれると色々やってみたくなります。いやぁ。KDE4 はまだまだ楽しいことたくさんありますよー。皆さんも是非使ってみてくださいねー;-)。

3月 292011
 

kde-4.6.1 がリリースされましたなぁ。FreeBSD の ports-current を追いかけていると最新のモノが利用できるようになります。皆さん是非試してみてください。

kde-4.5.5 との違いは・・。まぁ、一言で言うとより安定版。と言う感じでしょうかf(^^;;。

後、気がついた点としては qt が 4.7.2 になりました。IRC クライアントの konversation が新しくなりました。Twitter クライアントの choqok がちょっとおしゃれになりました。日本語訳はちょっと怪しいですけどねぇ;-)。

さてさて。今回のネタは kdepim4 なのであります。 KDE4 における kdepim4 の立場は kde-4.5.0 になったら開発のペースがガタ落ちになったと聞いています。なので kde-4.5.1 がリリースされた段階で kdepim は 4.4.6 とか 4.4.7 とかそんな状態なのであります。

でもって kde-4.6.1 が FreeBSD でリリースされたときの kdepim のバージョンは 4.4.10 になっております。ふむー。もう KDE 本体とのバージョン追随はあきらめた雰囲気が感じられ、koffice みたいに独自バージョンを歩むのか?みたいにさえ思えてきます。

そして、困ったことに kdepim4 の日本語テキストがちぃともリリースされないと言う事態に陥っているのであります。 kaddressbook とか kmail とか kontact、korganizer などは日本語化されてないと全く使えない、使えたとしても利用したくない状態なのであります。困ったなぁ・・。

こちらが日本語を表示してくれない kontact のキャプチャです。

kontact_1.png

これじゃ、使う気にもならない・・。orz。

と、言うことで、今回は kdepim4 を日本語化させることにしましょう。

そもそも、最新の ports である japanese/kde4-l10n に kdepim4 周りの日本語テキスト(僕はこれを “ポ・ファイル”と言っていますが)が入ってないのがいけない。以前はちゃんと日本語を表示していたので、以前の ports/packages を持ってきてインストールすればええやん。となるのであります。

で、ウェブ上を探し回ったら以下の URL にありました。

http://ftp.riken.go.jp/pub/FreeBSD/ports/i386/packages-9-current/kde/ja-kde-l10n-4.4.5.tbz

このファイルをお取り寄せします。あ、早く取ってこないと無くなってしまうかもしれません。いつ無くなるかについては僕にはわかりません。
基本的には “ポ・ファイル” なのでアーキテクチャは特に問題ありません。僕は FreeBSD/amd64 8.2-STABLE を利用しているのですが、上記の packages を持ってきました。

以下はインストール方法です。

# cd /usr/local/src
# mkdir kde4
# cd kde4
# ftp -a http://ftp.riken.go.jp/pub/FreeBSD/ports/i386/packages-9-current/kde/ja-kde-l10n-4.4.5.tbz
# tar xvzfp ja-kde-l10n-4.4.5.tbz
# cd share/locale/ja/LC_MESSAGES
# cp kontact.mo /usr/local/kde4/share/locale/ja/LC_MESSAGES/kontact.mo
#

 
とりあえず kontact.mo フアイルだけをコピーしてみました。

その後、kontact を起動してみました。

kontact_2.png

おー。日本語が無事に表示できるようになりました。こんな感じで、自分が必要と思われるファイルをどんどんコピーしてあげれば良いだけですねぇー。

注意点としては既に /usr/local/kde4/share/locale/ja/LC_MESSAGES/ にあるものを上書きしてしまっては悲しいので cp -i とかでコピーしたほうが良いでしょうかね。kaddressbook.mo korganizer.mo kmail.mo (kmail* はいっぱいあるので確認しながらコピーしたほうが良いですね) などなど、自分が本当は利用する必要のある kdepim4 のアプリの日本語ファイルをコピーしてあげると無事に、順番に日本語を表示してくれるようになります。

ちなみに、”ポ・ファイル” が “モ・ファイル” になるので、 FreeBSD の pakcages を Linux に持って行ってインストールしても多分無事に表示できると思います。なので kubuntu や Vine を利用している人も多分そのままコピーしても大丈夫だと思います。

とわいえですよ。これってやっぱり JKUG でなんとかしないとダメだと思う。KDE の各リリースごとに kde-l10n-ja-4.6.1.tar.bz2 と言うのを作成しているんだけど、ここに kdepim の古いバージョンでも messages の中に kdepim のファイルを入れる必要が絶対にあると思う。

僕も JKUG の一員なので、この点についてはしっかりと対応して行きたいと思います。それまでの手段として、まぁ、今回の手がありますよ。と、言うことでf(^^;;。

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

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 を取得する人がいましたら、上記のようにするのが良いかと思われます。

12月 222010
 

Mozilla の製品の中にカレンダーアプリがあります。「カレンダープロジェクト」と言うヤツですね。でもってこれを利用して Thunderbird に Lightning をインストールすると google カレンダーと連携できて、Thunderbird の別タブとして Lightning が起動してカレンダーが利用できる。と言う感じです。

google カレンダーと連携したい場合は Lightning の他にアドオンとして「Provider for Google Calendar」と言うのが必要になります。これら全てが揃うと google のアカウントを設定するたけで google カレンダーと連携できるようになります。

FreeBSD 的に言うと ports/mail/thunderbird と日本語化するための ports/mail/thunderbird-i18n が、後は Lightning の ports として ports/deskutils/lightning-thunderbird をインストールする必要があります。 Provider for Google Calendar は Thunderbird からアドオンとしてインストールする必要があります。

が・・。FreeBSD の ports からインストールする lightning-thunderbird-1.0 は日本語化されていないんですな・・。orz。 Thunderbird は日本語化されているのにカレンダーは英語表示。スケジュール自体は日本語で表示してくれるのにメニューなどは英語表示。ちょっと悲しいな。と、言う感じなのであります。

Widnows 上で動作している Thunderbird+Lightning は日本語で表示できるのに悲しいねぇ。

と、言うことで FreeBSD 上で動作している Thunderbird+Lightning のカレンダー部分を日本語化することにしましょうかね。

スクリーンショットはこんな感じ。一応日本語化できました;-)。

thunderbird-ja-2.png

まず最初に Windows 版の Thunderbird+Lightning の環境をじっくりと眺めます。ふむふむ。Application Data\Thunderbird\Profiles\乱数\extensions\ の下には {e2fda1a4-762b-4020-b5ad-a41df1933103} と言うのがあって、その下の \chrome\ の中に日本語テキストがあるみたいですね。この中の calendar-ja.jar と lightning-ja.jar が Lightning を日本語化するために必要なファイルみたいです。

では、このファイルを抽出して FreeBSD 上に持って行ってみましょうか。 FreeBSD の Thunderbird の個人用設定は ~/.thunderbird/乱数/extensions/ ぽいですね。ここにやはり {e2fda1a4-762b-4020-b5ad-a41df1933103} があり、その下に /chrome/ があるのでそこにほーりこんでみましょうか。でもって再起動。

どーだっ!!?? ダメだぁ・・。orz。きっと何かファイルが足りないと思うので再度、Windows 側で色々調査します。すると Windows 側と FreeBSD 側のファイルで圧倒的に記述が少ないファイルがありました。 {e2fda1a4-762b-4020-b5ad-a41df1933103} の直下の chrome.manifest と言うファイルです。このフアイルの中を覗いてみるとローカル言語設定が記述されているようですね。FreeBSD 版では en-US しか無いのですが、Windows 版には色々な言語の情報が記述されています。なるほど。このファイルを FreeBSD 側に持っていくことにしましょう。

で、再起動。おぉーーっ!! Lightning のカレンダーが日本語表示してくれるようになりました。良かった;-)。

ちなみに、Windows 版 Thunderbird が無い人のために以下、 URL に言語パックを置いておきました。

http://icmpv6.org/Prog/FreeBSD_ports/lightning-thunderbird-1.0-ja-pack.tgz

ダウンロードしたら以下の要領でインストールしてみてください。

$ cd  ~/.thunderbird/乱数/extensions/
$ cd \{e2fda1a4-762b-4020-b5ad-a41df1933103}/
$ tar xvzfp ~/lightning-thunderbird-1.0-ja-pack.tgz

 
古い chrome.manifest は chrome.manifest.ORG として保存されます。と言うか、展開されます。

後は Thunderbird を再起動して Lightning が日本語化されたか確認してみてください。

なお、今回は Thunderbird+Lightning で google カレンダーと同期する方法などは一切書いていません。その情報はウェブ上を探せばゴロゴロ出てくるのでここではあえて書きませんでした。あくまで FreeBSD における Lightning の日本語化に特化したものとなります;-)。

ちなみに、Windows から全ての言語パックを持ってきて、上記、僕が作成した tgz ファイルの中に突っ込むと lightning-thunderbird-1.0-i18n みたいな ports が簡単に作れると思うのですが、どなたか ports を作る方いらっしゃいませんか?

僕は言語パックを自分で作ってしまったので ports は作らない予定なんでけども;-)。

12月 152010
 

さてさて。 前回のエントリで「iOS4.2・AirPrint で体験する CUPS。」ってのを書きましたが、その続編です。いきなりこちらから読むと内容がちぃとも解らないかもしれないので前編から読んで頂ければと思います。

前回は確か、cups-pdf インストールして airprint.types というファイルを /usr/local/share/cups/mime/ に設置したけど、ダメだったー。ってところで終わりました。

iPhone4 に FreeBSD 上のプリンタを認識させるには CUPS ではなく avahi-daemon のほうであるようなので、実は avahi-daemon に設定ファイルを用意する必要があるのでありました。MacOSX や Windows では “Bonjour” と呼ばれている実装が FreeBSD 的には “avahi” になります。

ports 的には net/avahi になるのですが KDE4 をインストールしていると net/avahi-app のみがインストールされると思います。今のところはそれで十分でしょう。gnome の場合も net/avahi-app はインストールされるのかなぁ?僕は知らないのですが。もしインストールされていないようでしたらインストールして avahi-daemon と avahi-dnsconfd を起動してください。

avahi の設定ファイルは /usr/local/etc/avahi/ と言うディレクトリで管理されていますが、その中に /services/ と言うディレクトリがあります。ここに何かしらの名前で、今回は例えば AirPrint-PDF_Printer.service と言うファイルをしましょうか。ファイルを一個おけば、それが iPhone4 上のプリンタメニューに表示されるのであります。

AirPrint_avahi_1.jpg

では、AirPrint-PDF_Printer.service の中身はどう書けば良いのか?ってことですよね。以下は例です。

<?xml version="1.0" ?>
<!DOCTYPE service-group  SYSTEM 'avahi-service.dtd'>
<service-group>
    <name replace-wildcards="yes">AirPrint PDF_Printer @ %h</name>
    <service>
        <type>_ipp._tcp</type>
        <subtype>_universal._sub._ipp._tcp</subtype>
        <port>631</port>
        <txt-record>txtvers=1</txt-record>
        <txt-record>qtotal=1</txt-record>
        <txt-record>Transparent=T</txt-record>
        <txt-record>URF=none</txt-record>
        <txt-record>rp=printers/PDF_Printer</txt-record>
        <txt-record>note=FreeBSD/amd64</txt-record>
        <txt-record>product=(GPL Ghostscript)</txt-record>
        <txt-record>printer-state=3</txt-record>
        <txt-record>printer-type=0x80f04c</txt-record>
        <txt-record>pdl=application/octet-stream,
                application/pdf,
                application/postscript,
                application/vnd.cups-banner,
                application/vnd.cups-command,
                application/vnd.cups-postscript,
                application/vnd.cups-raw,
                image/gif,
                image/jpeg,
                image/png,
                image/tiff,
                text/html,
                text/plain
        </txt-record>
    </service>
</service-group>

 
途中、”pdl= ” の行だけ改行していますが、実際は一行で書く必要があります。

後、avahi のサービスの設定と CUPS に登録してあるプリンタはどこで結び付くのだ? と思いますがそれは “rp=printers/PDF_Printer” の行になります。CUPS の URL http://localhost:631/ にアクセスして [プリンター] タブに表示されているプリンタをクリックすると URL が表示される(http://localhost:631/printers/PDF_Printer)と思いますが、その http://localhost:631/ を取ったヤツになります。

後、設定を見ると type タグの中に情報が書かれていますが、ipp に対するサービスの設定である必要があります。良くわからないのが “printer-type=” ですが、まぁ、これで多分大丈夫だと思いますf(^^;;。

あ。そーそー。前回設定した /usr/local/share/cups/mime/airprint.types は削除しました。これで一応設定は完了です。avahi-daemon と avahi-dnsconfd、cupsd を再起動します。

でもって早速 iPhone4 のブラウザを開いて「プリント」を見てみましょう。無事に表示されたでしょうか?そして、印刷してみましょう。前回も書いた通り、FreeBSD の場合は /var/spool/cups-pdf/ にユーザ名のディレクトリができて、その中に PDF ファイルが出力されます。無事に出来ていたら完成です;-)。

え?ダメですか・・。ではここからはトラブルシューティングです。

まず、CUPS の管理ページにアクセスして [管理] タブの右側の一番下にある 「トラブルシューティングのためにデバッグ情報を保存」にチェックを入れて設定を保存します。すると、/var/log/cups/error_log に iPhone4 からアクセスがあった場合にログが出力されるのでその様子を見ます。

後、tcpdump -i re0 port ipp とかして iPhone4 からパケットが正常に流れてきているか確認するのも良いでしょう。

tcpdump から解ることとして、IPv4、IPv6 のどちらでパケットが到達しているか確認するのも良いかもしれないです。筆者の環境では 2001:c90:609:: でお互いに LISTEN にしていたのでガクゼンとして慌てて BB ルータの IPv6 ブリッジを切りました・・orz。iPhone4 恐るべし。NTT の IPv6 閉域網のアドレスで LAN 内をアクセスしていたんかいっ!! って感じで・・。

自宅のネットワークがデアルスタクの人はまず、ネットワークの状態を確認しておいたほうが良いでしょう。

続いて、CUPS のエラーログを見ます。無事に印刷できないログの原因としてパッと思いつくのが以下でしょうか。

cupsdAuthorize: No authentication data provided.

 
このログは後で解ったのですが、 PDF の出力には特に関係は無いので無視してよさそうです。もう一個のログのほうが重要でした。

Request from "192.168.1.200" using invalid Host: field "wanchan.local"

 
“192.168.1.200” と言うアドレスは iPhone4 のアドレスです。IPv6 でアクセスしている場合にはここに IPv6 が入ると思います。もう一個の “wanchan.local” と言うのは CUPS が動作している FreeBSD マシン名です。ホスト名の FQDN 的には wanchan.running-dog.net なのですが、mdns・avahi 的には wanchan.local になるんですな。

けど、何故か知らないですが、CUPS 自体がこの “wanchan.local” と言う「ホスト名」を認識しないみたいです。なので、/usr/local/etc/cups/cupsd.conf に以下の行を追加して上げてください。

ServerAlias wanchan.local

 
これで cupsd を再起動します。で、再度 iPhone4 からチャレンジ。こんどはどうだぁ? 無事に印刷されました?

あ。無事に印刷されない場合 iPhone4 はプリントクライアントが動きっぱなしになります。パケットキャプチャしているとずっとパケット送り続けてきます。タスクリストに表示されているので job をキャンセルしましょう。
#あ。iPhone3G ではマルチタスクが無くて、この画面を表示できないから AirPrint に対応してないのねー。なるほど。

AirPrint_avahi_2.jpg

仮に、無事に印刷ができたと仮定して FreeBSD 側を見てみると /var/spool/cups-pdf/ANONYMOUS/ と言うディレクトリが出来ていると思います。オーナーは nobody:nobody。認証がなくとも無事に印刷できたようですね。よかった。よかった;-)。

以上で「iPhone4 から PDF プリンタへの印刷」は完了です。

さてと。avahi についてですが、僕もあまりよく知らないのですが、知っている限りの情報をちょっと書いてみましょう。

まず、mdns・cups・avahi を起動するとネットワーク上の色々なサービスが、許可されていれば相互に利用できます。ports 的には net/avahi-gtk と言うのがあり、こいつをインストールすると avahi-discover-standalone コマンドがインストールされ GUI で、現在利用できるサービスの一覧が表示されます。サービス・NIC と後、IPv4/IPv6 の情報が表示されます。表示されている情報をクリックするとこれまたなかなか面白いですがf(^^;;。一回確認してみると面白いかもしれません;-)。

ただ、サーバにプリンタを付けているので X なんざねーよ。って場合があるかもしれません。そんな時は 以下のコマンドを叩いてみると良いでしょう。

$ avahi-browse -rat

 
CUI で現在提供されているサービスの一覧が表示されます。今回のオプションは -rat を指定しています。

例えば、僕の環境では MacOSX に接続されている HL-2040 プリンタが見えるわけです。そいつの情報は “= re0 IPv6 Brother HL-2040 series @ macosx-host _ipp._tcp local” として表示されます。情報がややこしいのでここには書きませんが、上記コマンドを叩くとだいたい想像が付くと思います。表示される内容は avahi-discover-standalone の GUI で表示されるものと基本的には一緒です。

実は、ここに表示された内容を /usr/local/etc/avahi/services/ の下に置いた services ファイルの XML に記述することになります。なので、僕の場合は MacOSX に接続されている HL-2040 プリンタの XML ファイルを書いて、それをサも自分の PC のサービスの如く iPhone4 に見せて、

iPhone4 -> FreeBSD(wanchan) -> MacOSX -> プリンタ -> 印刷

と言うことも可能になるわけですね。ややこしいけど;-)。

ただ、残念なことに FreeBSD に直に接続しているプリンタが無いので avahi-browse の出力結果がどのようになるのか解らないのが悲しいところです。

今回は iPhone4 対応の PDF プリンタが準備できたのでヨシとしておきましょうか。

ちなみに、僕の場合は、多分 MacOSX 上に PDF プリンタを準備したほうが圧倒的に早いしらくちんだったと自分でも思います。が、それだとあまりネタにならないしねぇ;-)。

非常に疲れた・・。ふぅ。

11月 272010
 

ThinkPad X100e 内蔵の Intel Centrino Advanced-N + WiMAX 6250 って無線 LAN は 8.1-STABLE を利用すると iwn0 として認識するんだけど、利用できない。9-CURRENT では if_iwn.c とかビミョーに更新されているので、もしかしたら動作するかもしれませんが・・。

と、言うことで、USB の無線 LAN を利用することにしました。でもってできることなら小型が良いなぁ。と思い、既に持っているもの二つと、新たに三個も購入してしまいました・・。orz。

IMG_0145_RadioLan_1.jpg

これが僕が持っている USB 無線 LAN のオールスターキャストです。右側の白い、大きいヤツは前回書いていますね。if_rum と if_run で認識されるヤツです。

今回新たに購入したのは左側の黒いの二つと、下のちっこい白いの一つ。順番に見ていくことにしましょう。

一つ目。いちばんちっこい、黒いヤツ。

PLANEX GW-USValue-EZ

こいつは FreeBSD では動作しません。チップセットは Realtek RTL8192CU を利用しています。現在、FreeBSD では Realtek RTL8192CU に対応したドライバはありません。orz。

ただ、このまま、何もせずに使わないのはちょっともったいないので、ちょっと if_ndis ドライバで試してみることにしました。 FreeBSD の ndis ドライバは以前は PCMCIA カードにしか対応していなかったのですが、最近は USB デバイスにも対応したので、試してみる価値あり。と言う感じなのですね。

まずは Windows7 x64 用のドライバを持ってきます。そして、FreeBSD 上で ndisgen コマンドを叩きます。

# ndisgen net8192cu.inf rtl8192cu.sys

 
試してみると ndisgen コマンドがエラーになります。 net8192cu.inf の最後の行に改行コードが無いのでエラーになっているようです。なのでエディタで net8192cu.inf を開いてリターンキーを一発叩いてあげて再度実行すると、おぉ。できました。rtl8192cu_sys.ko が完成したので /boot/modules/ に入れた後、kldload します。が・・。

Windows7 x64 のフツーのドライバを利用すると ugen に落ちてしまい ndis0 では認識してくれません。 XLINK 用のドライバを kldload するとカーネルが凍り付きます。と、言うことで、今のところ、Realtek RTL8192CU なチップの USB 無線 LAN は使えないかなぁ。と言う感じなのであります。

続いて二個目。ちょっと大きめの黒いヤツ。

Buffalo WLI-UC-GN

一個目の PLANEX GW-USValue-EZ は usbdevs をろくすっぽ見ずに購入したので大失敗です。今度はちゃんと下調べして購入しました。この USB デバイスは if_run で動作するようです。9-CURRENT には man に run(4) が存在していて、そこにはちゃんと Buffalo WLI-UC-GN と書いてあるのです。

がっ!! こいつも動作しませんでした。と、言うか素直に AP に接続できない・・。 orz

usbdevs にもちゃんとエントリがあって kldload if_run するとサクっと認識してくれます。おっ。やったーっ!! ってなるんですけどね。しかし、WPA で接続しようと思い /etc/wpa_supplicant.conf を以下のように書くんですけど・・。

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
eapol_version=1 ap_scan=1 fast_reauth=1
network={ ssid="SSID-AP" scan_ssid=1 key_mgmt=WPA-PSK psk="PassWord" }

 
ドライバ的には認識するのですが WPA を利用して AP を検索しようとしても WLI-UC-GN 本体のほうで wpa_supplicant.conf に記述した内容を上書きしてしまいます。ap_scan=2 で AP を探索したりとか・・。

なので、ドライバ的にはちゃんと認識するのですが、デバイス的には利用できないのでありました。ただ、利用できない(AP に接続できない)だけでないのがこれまた痛い。あるタイミングで突然 AP に接続できたりするし、全然全く AP に接続できない場合もある。

ブート時には全く AP に接続できないので実質的には FreeBSD では利用できない USB 無線 LAN の内の一つです。購入時には十分に注意しましょう。

で。三個目。

PLANEX GW-USMicroN

いやぁ。小型で、ようやっと動作するものに巡り会えました。man run に掲載されているものをウェブで調べて Amazon.co.jp で購入しました。999yen。ふぅ。

こいつは Ralink の RT3020 チップセットを利用しています。FreeBSD のファームウェアは RT2870 を利用しています。runfw.ko を kldload します。

今度は WPA でもちゃんと接続できるのでホッとしました。大きさ的にもまぁ、とりあえず小型なので嬉しいです。ただ、色が黒いほうが良かったかな。と言う感じはしますが。

と、言うことで NotePC に内蔵な無線 LAN の他に USB のヤツもそろそろ色々動くものが出てきたような感じがします。ただ、if_run 対応のチップは ieee802.11n に対応しているのに if_run 自体は 802.11g の速さでしか認識してくれないのでちょっと悲しいかなぁ。と言うのはありますが、FreeBSD で USB な 無線 LAN デバイスを利用する場合には if_rum もしくは if_run 対応のものが安心でしょうなぁ。と思うのであります・・。

がっ!! WLI-UC-GN はハマリ道で、GW-USValue-EZ は FreeBSD においてはドライバが存在しない。と言う結果になったのでありました・・。

11月 112010
 

最近、ThinkPad X100e を購入したのですが、こいつはグラフィックスカードが ATI の HD3200 相当だったので X11 のドライバの xf86-video-ati とか色々触っていたわけなのであります。

で、色々いじってみると、 X11 の ati の radeon ドライバでは HD5450 が動作するみたいだったのでいよいよ満を持してグラフィックスカードを交換してトライしてみよう。と言うことになったのであります。

購入したのは玄人志向の RH5450-LE512HD/D3/HS。ドスパラで購入したのですが、その時、ASUS の HD5570 が5,980yen だったのでどっちにしようか悩み、店員さんに確認したのですが、僕の PC は AthlonX2 4600+ で電源は 350W。店員さん曰く「350W で HD5570 はきついかもしれないですねー。」と言うことで HD5450 にしたのでありました。

IMG_0049_RadeonHD5450_1.jpg

ファンレス・ロープロファイルなのであります。

まずはこのグラフィックスカードを Windows7 で試してみました。Windows エクスペリエンスで確認してみると、以前使っていたHD 4350と比較です。以前比較したのはここにあますね。

hd5450_winperie.jpg

グラフィックス性能がちょっぴりアップした。と言う感じでしょうか。それでも(僕は多分使う機会は無いとは思いますが) DirectX11 に対応しているのでね。まぁ、よしとしましょう。

後、Windows7 で HDMI 出力する時の注意点があります。ディスプレーの画面全体に表示できないので CCC で設定を見てあげる必要があります。以下の URL を参考にすれば良いかと思います。

http://www.ask-corp.jp/supports/ati2/hdmi_scaling.html

DVI 出力だと問題無いのですけどね。HDMI でフル DH 出力すると画面が小さく表示され、周りが黒くなります。

さて。Windows で動作確認が終わったので次はいよいよ FreeBSD でトライです。

が・・。ブートして X が起動した段階でブラックアウト、フリーズしてしまいますな・・。orz。

もう少し詳しく書くと、drm.ko・radeon.ko を kldload しない状態で HD5450 を利用するとディスプレはブラックアウトします。 リモートから ssh して shutdown するか power ボタンを押して S5 ステートでシャットダウンするかしか方法がありません。

drm.ko・radeon.ko を kldload した場合は、カーネル自体が凍り付きます。orz。

xf86-video-ati を 6.13.0 や 6.13.2、はたまた master にしてもカーネル自体が凍り付きます。orz。

なんだかなー。X11 のドライバは対応しているみたいなんだけど、カーネル側で対応していないのかなぁ・・。カーネルモジュールの drm.ko・radeon.ko をロードしない場合はカーネルは関係ないはずで X11 の radeon ドライバのみで動作している(libdrm も使われるのかな?)のだけど、けど、それさえも正常に動作しないのでありました・・。orz。

それにしても 玄人志向の RH5450-LE512HD/D3/HS は調べてみるとイワク付きのグラフィックスカードみたいなのでその辺りが問題になっているのかもしれませんが・・。

と、言うことで、もう少し HD4350 を利用することにしたのでありました・・。

ちなみに Radeon HD の 5000 番台が正常に動作している。という方いますか?いましたらコメント頂ければと思います。