カテゴリー:FreeBSD

検索



Please click now!!

PRIMERGY MX130 S2 を FreeBSD で利用する。

前回のエントリーでは「購入した。」って書いたのですが、今回は実際に FreeBSD で動作確認したことについて書いてみます。

インストールには FreeBSD/amd64 9.0-RELEASE を利用したのですが、その後 9.0-STABLE にしました。なので今の環境は 9.0-STABLE です。そしてこの記事の内容も 9.0-STABLE についてです。気がついた点をツラツラと書いてみます。

1. 温度取れない
どーあがいても CPU 温度が取れません。amdtemp.ko や ports の sysutils/k8temp を利用しても CPU の温度が取れません・・。orz。 CPU のステッピングの問題なのかマザーボード(とか ACPI)の問題なのか定かではありません。ただファンの音だけで大体の温度を感じることしかできません・・。


2. Cool`n'Quiet 2.0 は無事に動作する
sysctrl の dev.cpu.0.freq_levels で CPU 可変になります。ただ、BIOS の設定で表示が二種類できます。前回のエントリで掲載した sysctrl の結果では以下のように表示されています。

dev.cpu.0.freq_levels: 3300/-1 2887/-1 2475/-1 2062/-1 1650/-1 1237/-1 825/-1 412/-1

ところが BIOS の設定で HPC (High Performance Computing) というのがあって、この設定を disable にすると以下のように表示されるようになります。

dev.cpu.0.freq_levels: 3300/13635 3000/10925 2625/9559 2400/7417 2100/6489 1800/4620
1575/4042 1400/3195 1225/2795 1050/2396 875/1996 700/1597 525/1198 350/798 175/399

BIOS の設定で HPC を無効にしたほうが良いですね。PRIMERGY MX130 S2 というのはラックにドドドと入れて HPC にも対応する製品のようですしね。

ちなみに HPC disable 時の dev.cpu.0.freq_levels の値には消費電力が表示されるようになりましたが、この値はちょっと変ですね。FX-6100 は Max 3.3GHz での動作時には 95W のはずなので、表示されている値を七倍する必要があります。しかし、FX-6100 ってのは CPU クロック変動の幅が広いですなぁ。


3. powerd 起動っ!! しかし・・
上記のように Cool`n'Quiet 2.0 が動作するので powerd を起動したら以下のようなメッセージを延々吐き出すようになってしまいました。

hwpstate0: set freq failed, err 6

dev.cpu.0.freq では速度が可変になっているので動作的には問題が無いのですが、結構ウザいです。ウェブで色々探してみると powerd を落とせとか /boot/loader.conf に以下の設定をしろ。みたいに書かれています。

hint.acpi_throttle.0.disabled="1"

が、これらの対処法を適用すると CPU クロックが Max の 3.3GHz に張り付いてしまうのでもったいない。じゃ。ということでソースコードを改修し、このログを出ないようにしました;-)。 /usr/src/sys/kern/kern_cpu.c の 406,407 行目の device_printf の部分をコメントアウトしてカーネルを再構築するだけで作業は終了です。ただ単にメッセージを出力しなくするだけの改修です。


4. smartctl でディスクの温度を取る
こちらも BIOS の設定で取れる場合と取れない場合があります。 BIOS の SATA Configuration の設定で External SATA Port を enable にすると smartctl が /dev/ada0 を見つけられなくなります。このオプションは disable にしておいたほうが良いでしょう。

僕は Seagate の ST1000DM003-9YN162 という、 1 テラ、 1 スピンドル、 1TB の HDD を利用しているのですが、smartctl の Airflow_Temperature_Cel を見ると今のところ温度は 20 度前後で推移しているので PC 内の換気が上手く行っているとか HDD 自体の温度が高くならないとか、そんな印象を受けました。


5. シリアルポート
シリアルポートのある PC をいじるのは随分と久しぶりです。随分前から sio0 から uart0 に変更になっているのでどうだろう?と思いトライして見ました。以前よりも設定はグっと楽になりましたね。順番にその設定内容を見ていくことにしましょう。

o. /etc/ttys の変更
ttyu0 というのが uart0 に対応したシリアルポートになります。default の設定から以下のように変更します。

ttyu0 "/usr/libexec/getty std.9600" vt100 on secure

速度は 9600 のままとしておきました。

o. /boot/loader.conf に追加設定
以下の行を追加します。

boot_multicons="YES"
hint.uart.0.flags="0x10"
console="comconsole,vidconsole"

設定が完了したら PC を再起動します。するとあとは無事にシリアルポートが利用できるようになるかと思います。 /boot.config も設定してないし、boot2 とかも変更する必要がありませんでした。

あ。しかし、uart0 の認識にも二パターンありました。

起動時の認識がこのパターンだと利用できません。

uart0: <Non-standard ns8250 class UART with FIFOs> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0

こちらのパターンで認識すると利用できるようになります。

uart0: <16550 or compatible> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
uart0: console (9600,n,8,1)

どうして上記のようになるのか解らないのですが、 kldload uart0.ko すると上のようになるような気がします。僕の場合は結局カーネルモジュールは利用せずに、カーネルコンフィグのファイルに device uart と書いてしまいました。


まぁ、 uart に限らず、今回はカスタムカーネルのコンフィグファイルを利用したのですが、 GENERIC カーネルでは無事に動作するのにカスタムカーネル+ロードモジュールでは動作しないということが多々おきました。以下にその一例を書いておきます。

・パーティションを認識してくれなかった -> options GEOM_PART_GPT を消したのを復活
・cs0 を認識せずリブート -> ロードするカーネルモジュールの見直し
・カーネルパニック -> bvox のモジュールを /boot/loader.conf に書くのをやめた

などなど・・。けっこう苦労が多かったのは PC が駄々っ子なのか 9.0-STABLE が駄々っ子なのか・・。もう既に何台も 9.0-STABLE を利用しているので安心しきっていた部分はありましたね。


これでだいたいサーバとしての設定が完了したかなー。と、言う感じはします。良かった。それにしても CPU 温度が取れないのはちょっと痛いですね。STABLE 利用してバージョンが上がるのを待つかなぁ。と言う感じがしないでもないです。

まぁ、僕的には今回のお買い物は一応満足の行くものとなりました。ちなみに今ではもう既に virtualbox-ose-4.0.14 で Windows Server 2008 R2 が動作しています。ゲスト OS には二個の CPU と 4GB のメモリを上げているのですが、そーすると Windows Server 2008 R2 ってのはサクサク動作するんですねぇ。感激;-)。

PRIMERGY MX130 S2 のネタはこれで終りですが、機会があれば、また update があれば書いてみたいと思います。

自宅サーバを新調。

自宅で動作しているサーバがあるのですが、このたび新調しました。今回購入したのは今話題となっている富士通の PRIMERGY MX130 S2 です。定価で 12,800yen ですが 1,000yen 割引でした。

最初のスペックはたいしたこと無いのでここにアキバで PC パーツを買ってきてドドドっとハデにパワーアップしてみました;-)。

IMG_2772_PRIMERGY_1.jpg

強化・変更した点は以下の通り。

・CPU: FX-6100 (6Core 95W)
・メモリ: 16GB (4GB x 4)
・HDD 1TB (1 プラッタ 1GB)
・NIC の追加

かかった費用は CPU 12,000yen、メモリ 6,000yen、HDD、9,500yen、NIC 1,000yen って感じでしょうか。本体含めて 40,000yen 弱で豪華な構成となりました;-)。

それにしてもデスクトップ PC を購入するのってどれくらいぶりだろう?今使っているのが Socket AM2 のAthlon64 X2 なのでもうずいぶん古いので 4,5 年ぶり?って感じです;-)。

さてさて。この PC は自宅サーバ用なので早速 FreeBSD/amd64 9.0-RELEASEをインストールしてみました。ここから先は FreeBSD でのインストールや使い勝手についてちょっと書いてみたいと思います。


・FreeBSD/amd64 9.0-RELEASE のインストール
CD-ROM からブートして FreeBSD Installer でインストールしていきます。 HDD のパーティションのところで auto を選択したら GPT(GUIDパーティションテーブル)になってしまいました。 MBR が好きな方は明示的に指定したほうが良いです。

8.2-RELEASE などと同様の MBR でインストールするとパーティション名は ada0s1 とかになるのですが、GPT を利用すると ada0p1 になります。 MBR は "s" で GPT は "p" ですね。

後もう一点。GPT を利用する場合はカーネルコンフィグファイルから options GEOM_PART_GPT を消さないようにしましょう。もし消してしまった場合はカーネルモジュールから geom_part_gpt.ko をロードするようにしましょう。
GPT を利用していてこのオプションが無い場合、 mount root fs のところで mountroot> プロンプトが表示されデバイスを指定してもマウントできない状態になってしまいます。

注意点はこの一点だけでした。後は比較的すんなりと動作します。以下は FreeBSD/amd64 9.0-RELEASE の情報です。必要であれば見てください。

dmesg
sysctrl -a
pciconf -lv

・FreeBSD を利用していて気がついた点
1. FX-6100 もサクっと認識するしメモリも 16GB 利用できる状態です;-)。

2.snd_hda が存在するので pcm0 が生えてきます。が、スピーカを接続する端子がないので音が出ません。マザーボード上にフロントに出すピンがあればそこから利用かのなのですがねぇ。PCI スロットがもったいないとか、ロープロファイルに対応していないサウンドカードとかあるので、USB-DAC を利用したほうが良いかもしれません。

・ベンチマーク
FreeBSD をインストールした誰もが一度はベンチマークとして確認する行為をしてみました;-)。 /usr/bin/time make buildworld の結果です。

比較は現在サーバとして利用している PC と同じスペックの PCで、以下の二つでの比較です。

AMD Athlon 64 X2 Dual Core Processor 4600+ (2456.27-MHz K8-class CPU)
AMD FX-6100 Six-Core Processor (3300.07-MHz K8-class CPU)

・FX-6100
o./usr/bin/time make -j6 buildworld
    2057.94 real 7609.08 user 1234.47 sys

o./usr/bin/time make -j6 buildkernel
      436.09 real 786.07 user 137.37 sys

・Athlon64 X2
o./usr/bin/time make -j2 buildworld
    57596.74 real 8917.03 user 1011.26 sys

o./usr/bin/time make -j2 buildkernel
      846.78 real 948.68 user 120.66 sys

この二つの違いは以下かな。

・CPU クロック
・コア数
・メモリ

CPU の数だけ -j オプションに付加します。 FX-6100 は 上記の違いもあるので Athlon64 X2 の三倍くらい行ってくれるかなぁ? とか思ったのですが 2.5 倍程度でしょうかね。シャア専用にはなれない;-)。


さてさて。この PC は 6Core でメモリを 16GB 積んだので何にしようか悩んだのですが、ベース OS は FreeBSD にしてそこに Virtualbox をインストールして Windows Server 2008 R2 を動作させ、自宅で SharePoint Server でも起動するかねぇ。とか、漠然と思っています;-)。と、いうか、Windows Server は検証の意味も込めてインストールすることは決まっているのですけどもね。

と、いうことで PRIMERGY S2 は FreeBSD においてもいとも簡単に動作しております。

あ。一点。シリアルポートがイマイチ動作しないのは今から再度確認する予定;-)。

Lightning の自動日本語化。

以前のエントリで「Thunderbird+Lightning の日本語化。」というのを書きました。 FreeBSD の ports からインストールされる Thunderbird のアドオンとして動作する Lightning は日本語化されていないので日本語化するための方法を書いたわけですけども。

それにしても最近の mozilla は 12 週間に一回メジャーバージョンアップすることにしたので、 Thunderbird をインストールすると Lightning も合わせてインストールできるようになったのは嬉しいんだけど、それにしてもバージョンアップの頻度が高すぎるX-(。

毎回 Windows のディレクトリから手動で持ってくるのはもうイヤだ。ってんで、自動日本語化スクリプトを書きました。以下の URL に置いときます。

http://icmpv6.org/Prog/lightning-ja-20111227.tgz

展開すると二つのファイルがあると思います。一個はシェルスクリプト、もう一個は設定ファイルへのパッチです。

動作については lightning-ja.sh の中を見て頂ければと解ると思いますが、簡単に説明すると以下の通りです。


まず、前準備ですが、既に Thunderbird と Lightning がインストールされている場合、lightning アドオンのバージョンを自動で取ってきます。もし、正しいバージョンが取れないようだったらスクリプト中の lightningversion 変数に指定します。

そしてコマンド実行;-)。

1. mozilla.org の lightning アドオンのサイトに Linux 版を取りに行きます。
2. 取ってきて展開後、中から必要なファイル二つをインストールします。
3. chrome.manifest を更新します。

以上で Lightning が日本語化されます。非常に簡単です;-)。


これだけで日本語化できるので、どなたか ports など作って頂けると嬉しいのですけどねぇ。 japanese/lightning 辺りに。ただ、12 週間に一回 ports を更新しないといけないので誰も ports 作りたくないですよねぇ・・。解ります。その気持ち・・。

Thunderbird の ports のどこかでこれを吸収してくれると嬉しいのだけどなぁ。誰かやってくれないかなぁ・・。

mozc ports を最新にしました。

以前のエントリに二回くらい書いているのでのすが、今回は三回目になるかな? mozc の ノラ ports を本日付の最新バージョンにしたものを以下の URL に置いておきます。

http://icmpv6.org/Prog/FreeBSD_ports/ports-mozcs-20111201.tgz

以前のバージョンは 1.1.773.102 ですが、今回のバージョンは 1.3.911.102 になります。だた、どこが変わったのか、いまいち解りません・・f(^^;;。


実は最近、ブラウザに opera を利用するようになったんですね。 ports からの make install も早しい、KDE ライクだし。みたいな感じなのですが。

で、 opera に対して日本語を入力しようとすると Ctrl キーを押した段階で確定してしまうので、それが何とかならないか? とか思い色々調べていたのでありますが・・。

uim-skk でも問題になっているようですね。以下の URL がその参考になるかと思いますが。

http://my.opera.com/japanese/forums/topic.dml?id=950112

この事象は、僕が現在利用している ibus-mozc でも起きていて、なんか回避策はないんかいな? と思い色々調べていたんですけども・・。

とある掲示板には「ubuntu では ibus-mosc で Ctrl キーの制約を受けずに opera に日本語入力ができる。」とあったので、むむむ。とか思い、最新版の mozc の ports を作ってみたんですけどもね。

しかし、結局ダメでした。 mozc の 1.3.911.10 でも opera に対して日本語を入力しようとするとやはり Ctrl キーで入力した内容が確定されてしまいます。残念。ただ、せっかく作った ports なのでここに公開しておきます。

send-pr はしないです。 send-pr してもメンテナが全然全くこれっぽっちも対応してくれないんだもの。


と、いうことで現在は opera で正しく日本語が入力できるように、ubuntu の mozc deb のソース取り寄せてパッチを眺めたりしているところです。まぁ、手元に ubuntu が無いので実際にどういう動作しているのか全くわからないの出ありますがね;-)。

ちなみに opera は www/opera と www/opera-devel の両方を試しましたが ibus-mozc では Ctrl が押された段階で日本語が確定してしまいますね。なので、実際問題として、opera っちゅーのは使えない状態になっている。と、言う感じでしょうか。

USB 無線 LAN 色々、FreeBSD で試してみた。そのに。

以前に一回「USB 無線 LAN 色々、FreeBSD で試してみた。」と言うエントリを書いているのですが今回のその続編。二回目です。

今回は FreeBSD のバージョンを 9.0-RC1 にして、新たに購入した機器の動作確認をしてみました。とわいつつ、実は前回も書いているのですが、if_run と if_rum の機器を持ってくればほとんどが動作するんですけどねぇ・・。

今回試した USB 無線 LAN 機器は以下の通り。まずは写真を。

IMG_2549_RadioLan2_1.jpg

順番に見ていくとしましょう。


1. Planex GW-USNano2-G
写真の上のほうにある黒くてチッコイやつです。こいつは FreeBSD で動作しない、ドライバが書かれていない、例の Realtek RTL8192CU を使っているヤツです。またまたま買ってしまい大失敗しました・・。orz。 NetBSD だと動作するんですけどねぇ。

で、今回も ndis でトライしてみたんですが、USB 機器はどうしたら if_ndis に結びつけるのか結局解りませんでした。sys/dev/usb/usbdevs にエントリー書けば良いのかなぁ? ndis での USB 機器の使い方がいまいち解らないんですよねぇ。そんなデバイスは知らん。と言われて ugen にアタッチされてしまいます・・。orz。


2. Planex GW-US54Mini2
これはアキバの某お店で 499yen で売っていたので買ってきて試しました。 FreeBSD では if_rum で動作します。 802.11g でリンクアップするのでこれはまぁ、中々良い感じでしょうか。ただし、今はもう販売終了となっていると思いますが・・。


3. Logitec LAN-W300N/U2
これは FreeBSD では if_run で動作します。けっこう高速で利用できます。続きはちょっと下のほうで書きます。


4. BUFFALO WLI-UC-GNM
これも FreeBSD では if_run で動作します。802.11b/g/n に対応しているので 150Mbps 出る。と言われていますが、そこそこな感じでしょうか。


と、言うことで今回は四打数三安打でした。それにしても最近は ちっこい USB 無線 LAN アダプタが RealTek のだったり Ralink のだったりするので購入する場合にはちゃんと下調べしたほうが良いと思われます。

で、どうして今回、再度の検証を行なったかと言うと、以前利用していた PCI GW-US300MiniW が壊れてしまったので、手持ちであるあるやつを利用し始めたんだけどこいつらみんな遅いっ!! 例えば NFS 上にある動画を再生しようとするとブチブチコマ落ちするし止まるしで到底実用には耐えられない遅さなのであります。

じゃ。ってんで、今回二回目の買い出しに出たのであります。結論から言うは if_run でも通信速度が速いものと遅いものがあります。僕が思うに小さいのはアンテナの影響から来るのか、遅いですね。BUFFALO WLI-UC-GNM は小さくてスルっと収まるんだけど遅いのが難点。
Logitec LAN-W300N/U2 はちょっと出っ張るんだけど、こいつは速いです。WLI-UC-GNM よりも速い。あと、以前使っていて壊れてしまった GW-US300MiniW も大きくて邪魔だったんだけど速かった。

あ、体感的には if_rum よりも if_run のほうが速いですね。まぁ、これはチップとドライバの問題で、当然 if_run のほうが速いのだろうと思いますが。

と、言うわけで教訓。

・if_run を買いましょう。
・300M と書いてあるのは多分速い。けど、その分でかい。
・速さを求めるならでかいのを買いましょう。

って感じでしょうか。デバイスが認識したあとに ifconfig wlan0 の media の部分を見ると良いと思います。


さてさて。どうして僕がこんなに USB 無線 LAN アダプタに凝るのか? と言えば、ThinkPad X100e 内蔵の 無線 LAN カード Advanced-N + WiMAX 6250 が正常に動作しないので USB アダプタに走るのでありました。

が、この間別のエントリにコメントしました<が、Advanced-N + WiMAX 6250 は動作するようになりました。 ここに書かれているように if_iwn.c を改修すると動作します。

それにしてもちゃんと動作する if_iwn はむちゃくちゃ速いです。 802.11n でリンクアップします。実際に計測してみると 24,5Mbps は出ています。すげーーっ(@_o)。けど、しょっちゅう通信が切れるんですよね。リンクの up/down はしないんだけど 30 秒くらい平気で止まってしまい、利用できるんだけど実用には耐えられない。速いだけに非常にもったいない・・。orz

と、言うことで Advanced-N + WiMAX 6250 の次に速いのが GW-US300MiniW、その次が LAN-W300N/U2 です。こいつは 12,3Mbps くらい出てくれます。 WLI-UC-GNM になると if_rum の速い機器と同等程度の速度になりますかねぇ。

あくまでも僕の実測と体感からの感想です。

と、言うことで if_run が今のところは一番良い感じだと思います。利用できるのは当たり前。更に速度を求めるのであればもっと他に色々試してみたいものですねぇ;-)。

xterm の日本語表示。

ウェブで検索すると、もう既にたくさんの人がこの題材で色々書いているようですね。なのであえて書く必要も無いのではないか。と、ちょっと思うのですが、僕も書いてみます;-)。

ちょっと変わった方向性から書こうと思っています。

まず、xterm とか emacs などは X11 のリソース設定しているのですが、今回はそれについては一切は書きません。コマンドプロンプトから以下のコマンドを投入し、リソース情報を全てさっぱり削除しそこから xterm を起動します。

% xrdb -remove

このあと、プロンプトから xterm を起動します。まずはオプション無しで。すると以下のような状態で xterm が起動すると思います。そして jman ls と打った状態です。

xterm-default.png

なお、このブログでは写真のサイズは横幅 500 ピクセルと決めているので、今後は全て横幅 500 ピクセルで表示します。上記のキャプチャのみは横幅が 488 ピクセルなのでちょっと小さめ。

まぁ、半角文字も日本語文字も Fixed フォントで表示されているので一応は無事に起動して、無事に表示できるようです。


問題はここからで、せっかくなので自分好みのフォントを利用したい。はたまた xterm は pango やcairo をリンクしているのでアンチエイリアスを有効にしたい。などと思い、色々な人が格闘しているわけですね。
しかし、全くダメ・・。利用に耐えられない表示のしかたをしてくれます。これについて、皆さん色々書いているんですね。


xterm 自体は X11 のリソースとは別にオプションでフォントを指定できます。~/.Xresources では XLFD でフォントを記述するのですが、 -fa オプションでは fc-list で表示されるフォント名を指定します。

以下、2,3 のフォントを指定したときのコマンドラインとキャプチャを掲載してみます。

-.フォントサイズは 10 で画面の大きさは 80x30 です。
-. LANG は ja_JP.UTF-8 です。


o.メイリオフォントを指定して起動

% xterm -fa メイリオ -fs 10 -geometry 80x30

xterm-meiryo_500x400.png


o.Osaka の UNICODE フォントを指定して起動

% xterm -fa osaka_unicode -fs 10 -geometry 80x30

xterm-osaka_unicode_500x400.png

osaka_unicode は比較的良い線行っているんですが、もうひといきっ!! って感じ・・。

それにしても皆さん、この表示を嫌うんですな。カーソールの四角は全角四角ちっく。あげくの果てには全角文字の間に半角スペースが入る。非常に横長な xterm の起動画面になってしまう。

ports から xterm を make するときには WITH_WIDE_CHARS=true を指定する必要があるのでこれは有効になっています。そして、xterm でマルチバイト、CJK フォントを正しく表示するためのオプションとしては -cjk_width ってのがあるのですが、この -cjk_width がまるで有効になっていない。と、言うことですね。

いやぁ・・。まいったまいった・・。

UTF-8 を扱う場合、日本語の表示には 4Byte 必要なのだそうで、その影響が出て文字の間に半角スペースが入るとか入らないとか。考えてみると MySQL で UTF-8 を利用すると Key のサイズが既定値未満なはずなのに「キー値が長すぎる。」とエラーになる時があるのですが、その現象とも確かに似ているような似ていないような気がしますね。


で、本当に正しく表示できんのかい?とか思い、自分の持っている(インストールされている)フォント全てを xterm に指定して確認してみました。

% fc-list | wc -l
     487

ふむ。僕の FreeBSD には 487 個のフォントがインストールされているようですね;-)。では、以下のコマンドを実行してコマンドイメージを出力し、早速確認してみましょう。

% fc-list | awk -F, '{print "xterm -fa \"" $1 "\" -fs 10 -geometry 80x30 &"}'

これを | sh -X とかするととんでもないことになるので、5,6 個ずつ起動することにします。

確認してみたところ、有名どころなフォントは全て全滅でしたね。正しい表示を全くしてくれません。
あと、日本語を持っていないフォントは日本語部分は表示してくれない。コード自体を持っていてもフォント自体が無いフォントは豆腐が表示されます。


そんな中、一個だけありましたよ。正しく日本語を表示してくれるフォントが;-)。

% xterm -fa "細明體" -fs 10 -geometry 80x30

xterm-03_500x400.png

おぉ。ちゃんと日本語が表示できて、文字と文字の間に半角スペースが入ることなく表示してくれていますね。

「けっ。そんなこと言ったってオメーの持っているフォントだろっ。」とか思うんですが、このフォント名で検索してみると、あややややや? このフォントはフリーなの? (@_o)。
いやね。自分自身、このフォントを、いつ、どー言うタイミングでインストールしたか全く覚えてないんですよf(^^;;。

以下のサイトからダウンロード可能なフォントのようです。

http://ja.cooltext.com/Download-Font-細明體+MingLiU

ダウンロードしたあと、インストールして、そのあと fc-cache すれば利用可能になるかと思います。

ちょっと明朝体チックでそれでいて色が薄いので常用に耐えられるかはちょっと疑問ですが、一応は正しい表示をしてくれてアンチエイリアスが有効になって xterm が起動してくれます。


あと、この 細明體 ってフォントは上記サイトでは「日本語フォント」ではなく「中国語フォント」のカテゴリの中に入っているんですね。 中国語のフォントの中に日本語の文字のパタンが埋め込まれている、なんともすごいフォントなのでしょうなぁ。

と、言うことで、今の段階の xterm は、もしかしたらフォント側で対応できていれば綺麗に表示できるんではないかなぁ。と思った僕の考え、合ってる?

あと、「僕も私も xterm で表示が綺麗になるフォント持っているよー。」ってのがあったら教えて頂けませんでしょうか。等幅ゴシックなフォントがあれば嬉しいなぁ。と、ちょっち思っております;-)。

ThinkPad X100e で suspend/resume OK;-)。

いやね。とあるタイミングで ports を csup したら KDE のバージョンが KDE-4.6.5 から KDE-4.7 系にアップデートしていたので「お。新しい KDE4 がリリースされたっ!!」とか思い portupgrade -arR しようかと思ったのだけど FreeBSD 自体も 9 系が CURRENT から RELENG_9 になったので、せっかくだから RELENG_8 から RELENG_9 にしてしまえーーっ!! ってことで、 NotePC にインストールされている FreeBSD を FreeBSD 9.0-RC1 にしてしまったのでありました。

バージョンアップしたのはデスクトップと NotePC の両方。で、今回の記事は ThinkPad X100e についてになります。


それにしてもこの NotePC、夏はてんでダメですな。温度が上がりすぎて勝手に shutdown が走ってしまう。裏を返すと正常に ACPI が動作している。とも言うんですが、Windows7 なんかは夏場の暑い時期だと起動後五分も持たずに shutdown、FreeBSD でも hw.acpi.thermal.tz0._PSV=80.0C とか設定入れて CPU クロックを落としたりするんだけど、自動 shutdown してしまう。メッセージを出力しつつ・・。orz。

熱い CPU っちゅーのはツライですなぁ・・。


と、言うことで本題の suspend/resume についてですが、以前、一回記事にしていますよね。そのとき試したのは RELENG_8 だったのだけど、今回は RELENG_9 でトライっ!! って感じ。で、見事に supend/resume してくれます。わーーいっ!!


そもそも ThinkPad X100e は無線 LAN カードに if_iwn を利用しているのですが、こいつがまた FreeBSD では動作しない・・。orz RELENG_8 では、以前は一時的に動作していたのに 2011/07/05 くらいに改修が入ってそれ以降は動作しなくなってしまった・・。RELENG_9 でも試したんだけどやっぱり動作しない。

しょーがないので僕の場合、無線 LAN は USB の if_run を利用していたのであります。が、こいつは suspend/resume の時に悪さすることが解りました。


suspend/resume するマシンの僕の環境は以下の通り

0. 僕の環境
・FreebBSD 9.0-RC 2011/10/19 10:00 頃に csup して来たものを利用
・Xorg-7.5.1 + dri-7.6.1,2 + xf86-video-ati-6.14.2
・KDE-4.7.2 しかし、なぜだか解りませんがデスクトップ効果が有効になりません・・。orz


では、実際に suspend/resume する時の手順を以下に書いてみましょう。

1. Xorg の画面を抜ける
X が起動していてその上で動作している端末上で acpiconf -s3 や KDE4 の[スリープ]を押しただけだと suspend はしますが resume してくれません。X を起動している人は Ctrl+Alt+F1 などでいったん X を抜けてコンソールの画面を表示させます。

なお、sysctl にはこれを自動でやってくれる hw.syscons.sc_no_suspend_vtswitch という MIB があるのですが、これが有効になってないんですよねぇ・・。なので手動で X を抜けます。


2. とりあえず無線 LAN の利用を停止する
僕の場合は run0 で認識している USB NIC を引っこ抜きました。その後で acpiconf-s3 とたたきました。すると suspend してくれます。その後、フタを閉じて開くと PC と言うか OS が目覚めるのでリターンキーを 2,3 発叩きます。するとコンソールが現れると思います。sync 連打して無事を確認します。おーー。 resume しましたねぇー。パチパチパチ。

ここで run0 で認識する USB NIC を接続すると無線 LAN が利用できるようになります。後は Ctrl+Alt+F2|3|4 などを押して X を表示させれば無事に X の画面が表示してくれると思います。

RELENG_8 の頃はコンソールのプロンプトが返ってきても X の再表示ができなくて drm.ko が暴走していたんだけど、 RELENG_9 ではそんなことは無いようです。それが大きな違いでしょうかね。


3. USB NIC は実はくせ者?
さてさて、上記 2. で suspend/resume が利用できるようになりました。もう一回、上記の手順で suspnd/resume すんべかと思い試してみると・・。あいや。orz resume は一回限り有効で、二回目の resume ではコンソールが凍り付きますね。

この場合は、無線 LAN の利用をきっぱりとあきらめましょう。一回目の suspend 前に X の画面を抜けた後、USB NIC を引っこ抜きます。その後で if_run を kldunload します。これがミソです。

有線 NIC を利用する場合、つまり if_re を利用している限りでは何回も suspend/resume してくれます(僕が試したのは連続四回ですが;-)。

そう考えると usb か、 if_run のどちらかに問題があるような気がしないでもないですが、今の段階ではカーネルがそれらしいログを出力してくれないのでちょっとまだ原因がわかりません。また、if_run 以外の 無線 LAN ドライバではどうなのか?もちょっと解りません。

もし if_iwn が動作したとしたら、それは多分 PCI バスに接続されているので、なんか動作しそうな感じはしないでもないんですけどねぇ。


以上は、僕が持っている ThinkPad X100e で RELENG_9 な FreeBSD を走らせたときの suspend/resume の動作になります。
けども RELENG_9 も生ものなので今日動いたものは明日は動かないかもしれない部分も多々あるので、今の環境を保持しておいたほうが良いのかなぁ?


どっちにしても FreeBSD において supend/resume したのは実に CASIO FIVA MPC-206 以来の快挙なのであります。嬉しいですなぁ;-)。わーーいっ!!


後はデスクトップ機で suspend/resume してくれるとすんげー嬉しいんですけどね;-)。


ブラウザ色々試してみました。

Firefox が 12 週間に一回バージョンアップするというとんでもない所業に出て、つい最近 Firefox6 が出たんですが、こいつがなんかむちゃくちゃ CPU を食いまくる。起動直後なんて一人で一個の CPU を使いやがる。ってんで Firefox の利用は最近断念しつつあります。

と、言うことで何か別のブラウザを捜すべ。とか思って色々調べてみたのですが、 QT ベースのブラウザってのは結構色々あるんですね。 arora だとか rekonq とか QtWeb (これは ports になってない) とか。

けど、結局 QT ベースブラウザってどうあがいても emacs キーバインドが利用できないみたい。


ちょっと話はそれますが KDE4 のアプリケーション群の中で emacs キーバインドが設定できるのは kwrite だけなんですよね。で、こいつの設定の「ショートカットを設定」を見ると 「Kateコンポーネント」ってのがあって、これが編集時のショートカットキーの変更を可能としている。

ちゅーこって KDE4 ではショートカットの設定のところで「Kateコンポーネント」を全てで編集できるようにすれば emacs キーバインドが可能になるのになぁ。と思うのでありました。どっかで呼びたせたりしないのかなぁ。


で、ここで話はブラウザ全般のネタに戻るのですが、以下ちょっと色々書いてみます。


・chromium
QT ベースのブラウザは emacs キーバインドが利用できないので www/chromium をインストールしてみました。 Chrome のオープンソース版と言えば良いのかな? こいつは Firefox6 よりも CPU 利用率が低いみたいなのでまぁ常用できるかもしれない。

それにしても chromium で emacs キーバインドはできないのかな?とか調べたら GTK2 側で emacs キーバインドの設定をすれば良いと言うことが解ったので早速やってみました。

% cd /usr/local/share/themes/Emacs/gtk-2.0-key/
% cp gtkrc ~/.gtkrc-2.0

これだけ。普段 KDE4 とか利用していると GTK2 のこととかほんとにわかんない。僕だけかもしれないけど。で、この設定を入れるとほぼ全ての GTK2 アプリは emacs キーバインドになるみたいです。Firefox の場合はアドオンで firemacs 入れているので気にならないのですが、 Thunderbird3 とかも emacs キーバインドになってくれたりします。すげー;-)。


・midori
GTK2 的なブラウザとしてはもう一個 www/midori を試してみました。インストールしてから起動すると・・。ふむー。随分と前時代的な雰囲気を醸し出していますf(^^;;。細かい設定は「設定」→[エクステンション]として全て項目にチェック付けてと・・。とかします。

ツールバーの設定などはブラウザではできなくて、~/.gtkrc-2.0 に項目を追加していくと言ういかにも UNIX ライクな設定方法ですf(^^;;。そして、見かけは本当に"GTK2 ベース"って感じです。多分常用はしないと思われますが pkg_delete もしていません;-)。


・arora
QT ベースのブラウザです。まぁ、非常に質素である意味 midori に通じるものがあるかもしれません。konqueror の不要な部分を全部削ぎ落して軽量化したって感じのブラウザです。けどもまぁ、QT ベースなので KDE4 上で利用する分には割としっくり来ますかね。

フツーに問題なく利用できます;-)。


・QtWeb
QT ベースのブラウザです。Windows 版もバイナリで配布されています。arora と一緒で本当に質素・軽量なブラウザです。 FreeBSD では ports になってないので自分で make して、チロッと起動して動作確認などをしただけです。

FreeBSD で make するには QT4 の CJK なプラグインが必要になります。 japanese/qt4-codecs-jp 相当の中国・韓国・台湾版をインストールします。まぁ、ソースを変えて libqjpcodecs.so しか呼ばない(リンクしない)ようにすれば良いだけなんですけどね。 一応 make は通って起動はできます。ただ、 ports する意味あるの?って感じがするので僕は ports を作ってませんが;-)。


・rekonq
僕的には本命のブラウザですなぁ www/rekonq 。名前的に「konqueror よ再び。」みたいな感じ、車輪の再開発とか。 konqueror の悪いところを削ぎ落して再度作り直しましょう。みたいな感じのブラウザらしいです。

とりあえずキャプチャなどを。下が konqueror 、上が rekonq です。

rekonq.png

見た感じ・使った感じは Safari と Chrome の良いところを取り込んで konqueror の悪いところがちょっと残った。と言うような感じでしょうか;-)。

機能も konqueror 程度にはあるし、何よりも konqueror よりも安定している感があります。 kubuntu では rekonq が default ブラウザになったんだっけか?

FreeBSD では ports からインストールしても日本語対応していません。 ja な mo ファイルが無いんですな。あいや・・。しょーがないので kubuntu のを持ってきてしまいましょう;-)。

以下の URL から language-pack-kde-ja-base_10.10+20110618_all.deb を拾ってきます。

http://pkgs.org/ubuntu-10.10/ubuntu-proposed-main-i386/language-pack-kde-ja-base_10.10+20110618_all.deb.html

そのあとは以下の要領でインストールすると rekonq の日本語化ができます。

% mkdir deb
% cd deb/
% mv ~/language-pack-kde-ja-base_10.10+20110618_all.deb ./
% ar -vx language-pack-kde-ja-base_10.10+20110618_all.deb 
% tar xvzfp data.tar.bz2
% cd usr/share/locale-langpack/ja/LC_MESSAGES
# cp rekonq.mo /usr/local/kde4/share/locale/ja/LC_MESSAGES/

一部翻訳されていないところも有りますがほぼ問題ないほどに利用できるでしょう。

利用した感想ですが、konqueror よりは遙かに良いと僕は思います。これが default ブラウザでも問題無いと思います。「KDEシステム設定」の中の「デフォルトのアプリケーション」のブラウザとして設定しましたが、各アプリの URL をクリックするとスルスルっと konqueror よりも軽やかに起動するみたいな感じでしょうか。

ただ、本当に KDE4 のアプリと言うか QT ベースなのでやはり emacs キーバインドは利用できないですね。長文書く時、僕はダメです。


と、言うことで Firefox6 と言うか、 Firefox がこれからドンドン変な方向に進んで行きそうなのでそろそろ潮時かぁ? とか思いブラウザを試してみましたが、サイトを見るときは rekonq 、文章を書く時には chromium 。って感じになりそうです。


あ。最後にですが、筆者は Flash などいうのはまるで見ません。プラグインインストールしていません。ブラウザの設定で「プラグインはロードしない。」をわざわざ選択しています。iOS ユーザにとって Flash プラグインは必要無い。みたいな;-)。

ports の japanese/mozc-el が最新版っ!!

以前、このブログのエントリで「mozc-emacs(mozc.el) な ports 作りました。」ってのを書きました。でもってノラ pors を作って置いておいたのですが、NakataMaho さん が commt してくだり、ports として組み込まれました。ありがとうございました。

で、前回の記事とコメントに書いているのですが、 FreeBSD の ports になっている mozc は随分とバージョンが古い。おかげで mozc-el はかな入力に対応していない。など書いていたのてすが、本日 csup したら japanese/mozc-el が mozc の最新版になりましたね。うれしーっ!!

ってんで、早速 japanese/mozc-el を make install したのですが、なんとなっ!! mozc-server のバージョンが古いので mozc.el と一緒にインストールされる mozc_emacs_helper が mozc-server と通信できない・・。orz。

daichi さん はいつ japanese/mozc-server をバージョンアップしてくれるのだろう・・。とか思いつつ、やっぱり ports ができる(リリースされる)まで待ってられないのでとっとと自力で最新版を make してしまいましょう。


その手順を今から書きます。

1. フツーに ports から japanese/mozc-server、 japanese/mozc-tool 、japanese/mozc-additions をインストールします。この段階では mozc は 0.13.523.102 がインストールされます。
2. インストールが完了したら mozc_tool とか mozc_tool_config などを起動して、入力設定とか全部の設定を済ませてしまいます。

以上が前準備です。続いていよいよ mozc-el のインストールです。

3. japanese/mozc-el をインストールします。これで mozc の 1.1.773.102 のバージョンのソースコードを持ってきて mozc.el と mozc_emacs_helper の最新版がインストールされます。
4. japanese/mozc-server の環境を以下のように整えます。

# cd /usr/ports/japanese/mozc-server
# mv files files.orig
# cp -pr ../mozc-el/files ./
# cp -pr ../mozc-el/distinfo ./
#vi Makefile

5. japanese/mozc-server の Makefile の以下の行を変更します。

    :
PORTVERSION=    1.1.773.102
#PORTREVISION=   1
    :
                ${PYTHON_CMD} build_mozc.py build_tools \
                        -c ${BUILD_MODE} ; \
                ${PYTHON_CMD} build_mozc.py build \
                        -c ${BUILD_MODE} \
                        server/server.gyp:mozc_server
    :

ちょっと説明すると、
・PORTVERSION は最新版のバージョンにします。
・PORTREVISIONの行は削除します。
・--qtdir=${QT_LIBDIR} オプションを消します。

後は make NO_CHECKSUM=yes (distinfo をコピーした場合は NO_CHECKSUM=yes は必要無し) して make 、 その後は make deinstall;make reinstall すれば mozc-server も最新のものになって mozc.el と通信できるモノがインストールされます。

今回は japanese/mozc-tool はインストールしてないので古いバージョンのままとなっていて、多分正常に動作しないと思われます。なので、一番最初に mozc の設定をばっちりとやってしまいましょう。となるのであります;-)。


さてさて。mozc が最新版のバージョンになると mozc.el が動作し、emacs ではミニバッファで文字の選択ができるようになります。また emacs -nw の状態でも日本語入力ができるようになるので、 WITH_CANNA のときみたいに emacs が非常に嬉しく使えるようになるのであります。

それにしても mozc-server の ports は、メンテナの方、早く更新してくれないかなぁ。と思うのでありますが、今回のインストール方法は ports の japanese/mozc-server のバージョンがアップするまでの一時的な策ということで;-)。

それにしても NakataMaho さん。ありがとうございました。

FreeBSD 9.0-BETA1 試してみました。

現在、自宅のサーバは 7.4-STABLE でデスクトップ PC と NotePC は 8.2-STABLE にしています。そして、IPv6 ルータとして動作しているちょっとワンパクな EeePC は 7.4-STABLE だったんだけど、これを 9.0-BETA1 にしてみました。

このブログでは過去に何回か EeePC について取り上げていたのですが、8 系 STABLE もちょっと怪しい動作だったので 7.4-STABLE にしていたのだけど、それでも動作が怪しいので今回自宅内の FreeBSD の中ではいち早く 9.0-BETA1 にしてみた。という感じです。まぁ、インストールされている ports の数が一番少ない。ってのもあるんですけどね;-)。

では早速 9.0-BETA1 をインストールした感想などを書いてみたいと思います。


0. EeePC のシステム構成
EeePC は内蔵の SSD が 4GB しかないので 60GB の外付け USB HDD を接続し、そこに FreeBSD をインストールして起動しています。

ルータなので NIC は二個利用しています。一個は内蔵 NIC の ae0 です。もう一個は USB の BUFFALO LUA2-TX LUA2-TX と言うヤツで、これは 7.4-STABLE では aue0 として認識されていました。

内蔵無線である ath0 は今回利用していません。


1. インストーラ変わったね
最初、9.0-BETA1 を CD-R に焼いて、母艦に EeePC で利用する HDD を接続して久しぶりにクリーンインストールしようかと思ったのですが、インストーラが大きく変更されていて焦りました。母艦の HDD をケーブルからはずせば良かったんだけど、接続したまま CD で起動したら母艦の HDD しか認識してくれない。
USB HDD は通常 /dev/da0 とかで認識されるんだけど、見えなかったのでシューリョー。って感じ。結局、CD-R からのクリーンインストールは諦めました。


2. csup からバージョンアップ
EeePC は 7.4-STABLE の状態で起動するのでこの状態で csup して一気に CURRENT に持って行きます。 EeePC の CPU は遅いので make buildworld+make buildkernel は大体 14 時間位かかりました。orz。

9.0-BETA1 の起動後に注意する点としてはやはり USB 回りですね。以前に書いた「FreeBSD RELENG_8 で USB 機器からブートする。」って設定が必要です。
あと、7.4-STABLE からのバージョンアップの場合、すっかりと忘れていた(8 系 では既にそうなっいる)のですが、USB コントローラもカーネルモジュールになっていたのですね。カスタマイズカーネルを利用する場合には /boot/loader.conf に uhci.ko ohci.ko ehci.ko をロードするようにしないと、USB が一切認識してくれないです。

とまぁ、こんな感じで /usr/src/Makefile の中に書いてある手順に従うとバージョンアップが終わります。

あ。一点書いておきましょう。make delete-old とか make delete-old-libs するとひたすら "y" と打たなければならずかぁなりしんどい。そんな場合は以下のコマンドを;-)。

# yes | make delete-old

ドドドと削除してくれます;-)。


4. ports のインストール
ports の make config のときの青い画面の動作がちょっと変わってビビリました。[X] hoge でメニューを選択したあとに TAB キーを押すと [ OK ] から [ CANCEL ] にカーソルが動いてしまう。選択したら TAB キーを押さずにそのままリターン。みたいな感じになりました。

それにしても emacs のインストール時、全てのオプションを WITHOUT_hohe=true にしたのに X をインストールしようとしてしまう。 /etc/make.conf には WITHOUT_X11=yes って書いてあるのにねぇ。なので emacs は結局 ports からインストールせずノラビルドでインストールしました。

ちなみに サーバの場合、/etc/make.conf には以下が書いてあると良いかと思われます。

WITHOUT_X11=yes
WITH_THREADS=yes

WITH_THREADS=yes を書くと perl とか python は -threaded でインストールされます;-)。


3. 起動後の各種設定
/etc/rc.conf のネットワーク設定がガラリと変わりました。これはじっくり見て正しい設定をしたほうが良いかと思われます。

IPv6 回りで気がついた点として ipv6_enable="YES" が無くなり ipv6_activate_all_interfaces="YES" になりました。

でもって ipv6_activate_all_interfaces は "YES" でない場合は ifconfig_IF_ipv6 で判断して、 "_IF_" のインターフェースにしか link local アドレスが付加されません。今までは全てのインターフェースに link local が付いていただけに「すげー。」とか、ちょっと思います;-)。
ちなみに link local が付加されないインターフェースってのは「IPv6 を利用しないインターフェース」って認識で良いと思います。

あとは、alias アドレスの設定方法が変わりましたね。 IPv4/IPv6 で同一の設定になりました。

ipv6_prefix_IF="" の設定も驚きました。今までは最後に "::" とか付けていたのですが、これを付けるとダメみたいです。

以下、簡単な例です。

defaultrouter="192.168.1.254"
gateway_enable="NO"
ipv6_defaultrouter="NO" ipv6_gateway_enable="YES"
ifconfig_ae0="inet 192.168.1.192 netmask 255.255.255.0" ifconfig_ae0_alias0="inet 192.168.1.253 netmask 255.255.255.0"
ifconfig_ue0="DHCP"
ipv6_activate_all_interfaces="YES" #ipv6_network_interfaces="auto" #ipv6_default_interface="ae0"
ipv6_ipv4mapping="NO"
ipv6_prefix_ae0="3ffe:3e0:a71:fee1"
ifconfig_ae0_ipv6="inet6 3ffe:f3e0:fa71::1 prefixlen 64"
ifconfig_ae0_alias1="inet6 3ffe:f3e0:fa71::ffff:2 prefixlen 64" ifconfig_ae0_alias2="inet6 3ffe:f3e0:fa71::22:1 prefixlen 64"
rtadvd_enable="YES" rtadvd_interfaces="ae0"

あ。aue0 名前が変わりました。8 系からかな?僕は 8 系で aue0 使ったことないので解らないのて゛すが ue0 になりました。wlan0 と一緒で USB NIC は全て ue0 になるのかなぁ? USB NIC は一種類しか持ってないので良く解らないのですが。


4. はまり道
上記 IPv6 のネットワーク設定をしたのですが、一番はまったのは gif0 に link local アドレスが付加されない。ってところでしょうか。gif0 に link local が無いので IPv6 ルーテイングができずにかぁなり焦りました。

で、詳しい方に irc で教えてもらったのですが、 /etc/rc.d/auto_linklocal があるとダメらしいです。合わせて /etc/rc.d/network_ipv6 も残っていたりする。この二つの rc ファイルは 8 系までのファイルで 9 系というか、現在の CURRENT では不要なファイルになっています。

/usr/src/Makefile 内に書かれている内容でバージョンアップするのですが、そのとき 9. mergemaster ってのがあって、それを実行します。この時、以下のように聞かれます。

   *** Checking /etc/rc.d for stale files
*** The following files exist in /etc/rc.d but not in /var/tmp/temproot/etc/rc.d/:
auto_linklocal network_ipv6
The presence of stale files in this directory can cause the dreaded unpredictable results, and therefore it is highly recommended that you delete them.
*** Delete them now? [n]

ここで「削除するのはイヤ。」とか思いとどまって "n" などと叩いてしまうと gif0 に link local アドレスが付加されることは無いのであります。上記二つのファイル (auto_linklocal と network_ipv6) は CURRENT では既に不要なファイルなので、サクッと "y" を叩いて削除してしまいましょう;-)。


あとは ipfw の設定とかまだもう少し残っていたりしますが、一応ここまでがこの週末に行なった作業なのであります。
あとはもう少し使い込んでみてから色々やってみたいと思います。 ath0 なんかも試してみたいですね。

CURRENT に慣れてきたら NotePC とかデスクトップ PC に導入したいと思います。

それにしても /etc/default/rc.conf はじっくりと眺めたほうが良いかもしれないです;-)。あ。あと man rc.conf(5) も;-)。

okular での日本語表示。

okular というのは KDE をインストールすると利用できる PDF を閲覧するためのソフトです。Acroread よりも軽いので僕は Acroread をインストールせずにこればっかり利用しているのですが、時々日本語が表示できない PDF ファイルが存在するのでちょっとコマリモノなのでありました。

最初はほっといてそー言う PDF ファイルはあきらめることにしていたのですが「まぁ。いっちょ調べてみるか。」と言う気になったのでありました。

あ。今回は多分、FreeBSD に特化したネタになると思います。 ubuntu には多分、まぁるで関係の無いお話だと思います。


で、調査を開始したのですが、まずは「敵」つまり PDF ファイルを知るところから始めます。 okular で日本語が表示できない PDF ファイルを Windows 版の Acroread10 で表示させ色々情報を取得するのですが、大体以下のようなことが解ってきました。

o. iText と言う PDF プリンタを利用した PDF ファイル。
o. どうやら PDF 自体にフォントが無いようだ。
o. Windows 版 Acroread では代替フォントで表示してくれるねぇ。
o. PDF ファイル自体のフォントは HeiseiKakuGo-W5 と言う名前ですねぇ。

iText というのは今回ちゃんと調べてないんですけども、Java ベースの Acrobat4,5 互換の PDF プリンターってイメージです。出力された PDF ファイル自体にはフォントは埋め込まずビューワのほうでフォントをマッチさせるみたいですね。

さてと。以上が日本語表示できない PDF ファイル自体の調査ですが、ここからは okular の調査の開始です。

そもそも、okular が代替フォントに日本語を含むフォントを指定できないのが問題でないの?と思うわけです。[設定]のところに「代替フォント」とか項目があれば簡単に話は済んでしまうんですけどもそんなのはありはせんのです・・。orz。

で、 okular の調査は更に続くのですが、PDF ファイルの表示には poppler というのが深く絡んできていてこいつは fontconfig とも密接に絡んでくる。ということが解りました。 poppler というのは xpdf からの派生と言うか発展形のモノらしいです。こいつは graphics/poppler や graphics/poppler-data とからみ合って日本語を表示してくれるらしいんですな。

けれど、その poppler が okular とどこで結びついているのか全く解らない。okular のコード見ると Qt と絡んでいるは伺えるんだけどもね。あー。Qt 的には graphics/poppler-qt4 というのもありますねぇ。


okular を起動して [ファイル]→[プロパティ]から表示されるダイアログの「フォント」タブに現在利用しているフォントが表示されます。

このキャプチャは日本語が表示できないときのフォント。

Okular_font1.png

HeiseiKakuGo-W5 に対応するフォントとしては Bitstream Vera が選択されたことが解ります。この Bitstream Vera は日本語を持ってないので日本語が表示できない。ある意味納得。けど、そしたらどうしてそのフォントが選択されるんだろう?と悩むわけです。


そーこーしている間に「これはどうやらまじめに ~/.fonts.conf を書かなければならない。」と思えるようになってくるわけです。

色々調べて書きましたよ。fontconfig の設定は /usr/local/etc/fonts/ になるんですけども、この中に conf.avail/50-user.conf と言うファイルがあるんですね。このファイルの中を見ると、参照先が書かれているのでそこにファイルを一個用意してあげます。

僕の場合、 mkdir ~/.fonts.conf.d/ したあとにこのディレクトリの中に以下のフアイルを置きました。ファイル名は 51-HeiseiKakuGo-W5.conf にしました。 50-user.conf の次の番号ということで 51 にしました。そのあとの HeiseiKakuGo-W5 の部分は好きな文字列を指定できます。数値と .conf は変更することができません。

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>/usr/local/lib/X11/fonts/sitefont</dir>
<alias>
  <family>HeiseiKakuGo</family>
    <prefer>
      <family>MS ゴシック</family>
    </prefer>
</alias>  
</fontconfig>

さてと。設定が終わったので再度 okular を起動します。どうだっ!! あやや・・。orz

実は family の部分ですが、 HeiseiKakuGo-W5 と書いてもダメでした。上のように HeiseiKakuGo と書いたら Bold フォントは MS ゴシックになったのですが Regular フォントは相変わらず日本語が表示されない。

上記のダイアログはこんな感じ・・。そんなバナナ・・。orz。

Okular_font2.png

上二個のフォントは MS ゴシックを利用できるようになりましたが、下の二個のフォントは今まで通り Bitstream Vera を参照しているようです。orz。ダメだこりゃ (c)いかりや長介。


もう一度仕切り直し。各種設定を眺めます。また、ウェブで探し回ります。で、思ったのが、ubuntu のほうは日本語環境ちゃんとできているのねぇ。ってこと。それなら ubuntu の設定をちょっとパクってしまえ。ってんで、 /usr/local/etc/fonts/conf.d/ 辺りを眺めます。

ubuntu 的に言うと「default のフォントの設定を削除するパッチ」ってのがあるので「あれ? FreeBSD 的だと default が Bitstream Vera の設定なので、それを削除すれば良いんじゃね?」と思いつくわけです。それが解ればあとは簡単。 /usr/local/etc/fonts/conf.d/ で grep "Bitstream Vera" * します。で、その結果、 60-latin.conf を改修すれば良いわけねー。というのが解りました。


以下の URL に /usr/local/etc/fonts/conf.avail/60-latin.conf に適用すべきパッチを置いておきました。

http://icmpv6.org/Prog/KDE/okular_ja-60-latin.conf.patch

まぁ、パッチなんてたいそうなものは必要無いとは思うのですが、簡単に説明すると、60-latin.conf では一番最初に利用されるフォントが Bitstream Vera になります。こいつは日本語を持たないフォントですね。それならば、それよりも上の行に ume フォントを追加してしまえーっ!! って感じです。

なので、上記パッチを適用した場合には japanese/font-ume をインストールする必要があります。自分の好みのフォントに設定したい場合には "Ume Gothic" の部分を好きな文字列に変更すればそれで OK です。

で、このパッチを適用したフォントのダイアログはと言うと、

Okular_font3.png

んー。ちゃんと ume フォントが利用されていますね。そして okular でも日本語がバッチリ表示できるようになりました。いやー。良かった良かった。

もしかしたら /usr/local/etc/fonts/conf.avail/60-latin.conf はそのままで、パッチ適用後の 60-latin.conf を ~/.fonts.conf.d/ の下に置いても同じ動作をするかもしれません。が、私は試していません。


それにしてもこれで okular が無事にちゃんと利用できるようになりました。良かった。

wpa_supplicant の GUI。

なんとっ!! 自宅のネットワーク環境において、無線 LAN 環境のネットワークが二つできてしまい、SSID をネットワーク毎に切り替える必要性がでてきてしまいました。

Windows なんかの場合だと比較的容易にアクセスポイントを切り替えられるのだけど、 FreeBSD の場合は CUI がメインかなぁ。なので「なんか GUI ないかなぁ?」とか思い探しまわったら ports に net-mgmt/wifimgr というのがあったので早速インストールしてみました。

まぁ、QT ベースの KDE4 を利用している僕にとって、gtk ベースのアプリっちゅーのはどうもしっくりこないんだけどもそれはそれしょーがない。 QT ベースのものを利用したい場合には net/wpa_gui ちゅーのがあります。こっちは FreeBSD でインストールされている wpa_cui の GUI 版なんだけど、wpa_supplicant のバージョンがずいぶんと古い。でもって実際に起動してみてもたともに動作しているようにみえなかったんですね。

なので、今回は net-mgmt/wifimgr を利用しました。 ports からインストールして wifimgr と叩いて起動するだけです。コンパイルも早いですしね。非常に簡単。

起動する時に /etc/rc.conf の ifconfig_ をチェックして WPA と言う文字があった場合にのみ起動します。最初、ifconfig_wlan0="DHCP ssid test" だけしか書いてない状態で wifimgr を起動したんだけど、動作しなくて・・。で、ソースコード見たら WPA って文字をチェックしているみたいだったので ifconfig_wlan0="DHCP ssid test WPA" とか書いたら無事に起動しました;-)。

起動後は root のパスワードを聞かれ、そのあとで管理画面が表示されます。

スクリーンキャプチャを掲載しようと思ったのですが、表示されているのが SSID とかパスフレーズだったのでちょっとやめました。実際に自分で起動して確認してみてください;-)。


起動したあとは Windows 上でよく見る Wi-Fi マネージャとほぼ一緒です。まだあまり使い込んでないのですが、使い方も直感的で解りやすいです。

新しいアクセスポイントを利用するようにした場合、その設定情報は /etc/wpa_supplicant.conf にダイレクトに書き込まれます。そのあとで「保存と再起動」ボタンを押すと wpa_supplicant が再起動されて指定したアクセスポイントに接続されるようになります。すげーぞ。


以上が動作です。さてと。ソースコードを見てみると po ファイルがあるのでこらー日本語化は簡単だな。とか思い覗いてみると、今のところは英語とフランス語にのみ対応しているようですね。

まぁ、せっかくなので ja.po を書きました;-)。

日本語に対応した ports は以下にあるので良かったら皆さん試してみて頂けませんでしょうか。

http://icmpv6.org/Prog/FreeBSD_ports/ports-wifimgr-20110708.tgz

po ファイルの追加だけなら簡単だっんですけど、 src/Makefile にも手を加える必要があったので新しい ports にしてしまいました。

po ファイルだけは別に切りだしてあって以下の URL にあります。「日本語変だよ。」とか思われた方、改修して頂ければと思います。

http://icmpv6.org/Prog/ja.po/wifimgr-20110708.po


もし、問題がなければ作者さんにメールを送って、実際に ja.po ファイルをソースコードに取り込んでもらおうかなどと思っています。


と、言うことで、wifimgr と言う、GUI インターフェースが利用できる Wi-Fi マネージャなのでありました。ところで、ソースをちろっと眺めただけなんだけど、wlan が 0,1 と複数あったらどう言う動作するんだろうなぁ・・。


mozc-emacs(mozc.el) な ports 作りました。

emacs-23.3 になったら ibus.el 経由の mozc がインラインで日本語入力できなくなってしまいました。

以前のエントリで「ibus-mozc を使う。」というのを書いているので詳細についてはそっちを参考にしてください。

それにしても emacs 上でインラインで日本語入力ができないのはちょっと悲しいなぁ。と思い、ibus.el とか眺めたり、ウェブで調べてみたりしたのですが、 Vine のほうでは無事に吸収できたようですね。 FreeBSD ではそーは行かないみたい・・。

ちなみにインラインで日本語が入力できると何か嬉しいかと言うと、Ctrl や Esc キーなどがかな漢字変換システムに食われることなく emacs のキーバインドが利用できる点ですね。これは実際にやってみると結構重要です。


なので、他に何か別の emacs で利用できる日本語入力無いかなぁ?とか思い調べてみたら、mozc 自体が emacs lisp として mozc.el というのを提供しているのねぇ。

早速試してみました。が・・。
mozc 関連の FreeBSD の ports としては japanese/mozc-server 、 japanese/mozc-tool があるのですが、このどちらでも mozc.el をインストールしてくれない。きっと ports の作者さんは emacs との関連性をつけるのを嫌ったのでしょうなぁ;-P。

mozc のソースの中に unix/emacs/mozc.el があります。が、こいつは mozc_emacs_helper という、同じディレクトリにあるソースをコンパイルしたものをインストールしてあげないと動作しないんですな・・。orz。

ちゅーこって mozc-emacs とか言う ports を作りましたよー。そもそも、mozc のコンパイルは python を利用しているので非常にややこしい。試行錯誤した結果 mozc のソースツリーで以下のコマンドをたたけば mozc_emacs_helper の make ができます。

# setenv BUILD_COMMAND gmake
# ./build_mozc.py gyp
# ./build_mozc.py build -c Release --qtdir= /usr/local/lib/qt4 \
unix/emacs/emacs.gyp:mozc_emacs_helper
# cp out_linux/Release/mozc_emacs_helper /usr/local/bin/
# cp unix/emacs/mozc.el /usr/local/share/emacs/23.3/site-lisp/

これで mozc.el が動き出します。あ。当然 GTK_IM_MODULE 環境変数などの設定は必要ですよ。
僕の場合、emacs 以外は ibus-mozc を利用するようにして、 emacs からは ibus 経由ではなく、直接 mozc と通信できるように、あとで下のほうに出てきますが ~/.emacs に設定しました。


で、これらをやってくれる ports は以下に置きました。

http://icmpv6.org/Prog/FreeBSD_ports/ports-mozc-el-20110614.tgz

基本的には emacs に関連した部分のみを切り出したので mozc-el と言う ports にしました。ports/textproc 辺りに展開してください。 mozc_emacs_helper を make してインストールしてくれます。あと、 mozc.el と mozc.elc をインストールします。関連性で editor/emacs が必要がです。
また、当然ですが、 make deinstall にも対応しています。


で、~/.emacas への設定ですが、以下のような感じでしょうかね。

(require 'mozc)
(set-language-environment "Japanese")
(setq default-input-method "japanese-mozc")
(global-set-key (kbd "C-o") 'toggle-input-method)

早速入力してみると。おぉっ!! ちゃんとインライン入力ができますね。すげー。試しに emacs -nw な状態でも試してみましたがこちらでも日本語入力ができます。ibus-mozc よりもちょっと良い感じです。


さてとー。僕の場合、もう何回もここに書いていますが、かな入力の人なんですよ。で、その設定はあるのかなー?とか思って色々調べてみましたが、今の段階では mozc.el にはカナ入力の設定は無いみたいで、mozc.el には 「;; TODO(yuizumi): Supports Kana input.」などと書かれていました。orz。

通常、mozc の設定は mozc_tool_config で、行うのですが、ここではちゃんとかな入力になっているのですが、やはり ibus.el もそうですが emacs lisp の側でも何かしら対応しなければならないんでしょうなぁ。


と、言うことで、かな入力の僕にはいまいちご利益が無いのですが、ふつーにローマ字入力をする人にはベタに mozc が利用できるのと、あと tty 上の emacs でネーテェブというかインラインで日本語入力ができるというのは非常に嬉しいことではないでしょうか。

是非とも ports になってもしくは ports からインストールできるようになって頂きたいものだと、僕は思いました;-)。

ports の graphics/netpbm について。

いやね。最近 ports-current から csup して来て portupgrade -arR すると graphics/netpbm だけコンパイルエラーになって make が完了しなかった。

その後「今インストールしてあるやつを先に deinstall しろ。」ってメッセージが出力されるようになったのでその通りに試したら、おぉっ!! ちゃんと make が完了してインストールできるようになった。ヨカッタヨカッタ。

しかし、サーバ上で graphics/netpbm をインストールしようとしたらなんとこいつは libX11 などと言う、サーバにはまぁるで関係のないライブラリと言うか ports をインストールするようになっていた。アイタタタタ・・。orz。

ちょっと前までは netpbm-10.26.64 と、言うバージョンをインストールしていた。csup したら netpbm-10.35.80 をインストールしようとする。こいつがなんとっ!! X11 の ports をガサゴソとインストールしてくれちゃうんですな。 graphics/netpbm/Makefile を眺めても USE_XORG= x11 なんて書いてある。でもってどう見ても WITHOUT_X11=yes ってのが有効にならない・・。


サーバで X は要らんだろう。ということで irc の皆さんと話したり色々調べたりした結果どうやら /usr/local/bin/pamx というのが X のライブラリをリンクしているのを発見。ソースコード的には netpbm-10.35.80/other/pamx。 こいつは 10.26.64 のころには存在しないソースなわけね。

では pamx は何をするコマンドなのか調べてみたら、画面にイメージを表示するコマンドみたい。X-Window の壁紙設定コマンドみたいな感じかな。そんなの既にたくさんあるのでわざわざ netpbm で車輪の再開発することもなかろうに・・。などと思ったのであります。

と、言うことで、 graphics/netpbm の make 時に make WITHOUT_X11=yes と指定できる Makefile を用意したので X11 が必要無い環境で netpbm を利用する方は参考にしてみてください。

http://icmpv6.org/Prog/FreeBSD_ports/ports-netpbm-10.35.80_WITHOUT_X11_Makefile

WITHOUT_X11=yes を指定すると pamx を make、install しないので X11 のライブラリは要らなくなるようにしています。 ただ、 pkg-plist はいじってないので make deinstall 時に実際にインストールされなかった bin/pamx が無いよ。と言われますが、まぁ、その点は許してください;-)。


ちなみに僕はサーバ上で graphics/netpbm を利用していますが、ひとつは photo_gallery を利用しているため、もうひとつは、日本道路交通情報センターの交通情報の画像を取ってきて携帯電話からアクセスして表示できるように 90 度傾けたりサイズを変更したりするために利用しているのであります。

サーバ上では X11 は要らん。しかし graphics/netpbm は利用しているのであります;-)。

KOrganizer と DAViCal サーバの連携。

さてさて。前回のエントリで 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 はまだまだ楽しいことたくさんありますよー。皆さんも是非使ってみてくださいねー;-)。

kdepim4 を日本語化する。

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(^^;;。

DAViCal サーバを FreeBSD で。そのに。

さてさて。前々回のエントリで 「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 から動作確認は取れています;-)。

DAViCal サーバを FreeBSD で。

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

mrtg が IPv6 で動作しない。

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

Thunderbird+Lightning の日本語化。

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 は作らない予定なんでけども;-)。

iOS4.2・AirPrint で体験する avahi。

さてさて。 前回のエントリで「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 プリンタを準備したほうが圧倒的に早いしらくちんだったと自分でも思います。が、それだとあまりネタにならないしねぇ;-)。

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

USB 無線 LAN 色々、FreeBSD で試してみた。

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 においてはドライバが存在しない。と言う結果になったのでありました・・。

Radeon HD5450 にしてみました。

最近、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 番台が正常に動作している。という方いますか?いましたらコメント頂ければと思います。

最新の xf86-video-ati ドライバを追いかける。

前回のエントリーで「ThinkPad X100e がサスペンド/レジュームしない。」って書いたんだけど、FreeBSD/amd64 8.1-STABLE 自体はもうバリバリサスペンド/レジュームします。ただ、X の画面がエラー吐いてちぃとも復活しない。って感じなのであります。

ati ドライバ(の radeon)や radeonhd を試したり、後 vesa も試しました。 vesa の場合はレジューム後に X の画面が戻ってきて X が使える場合もあります。ただ、サイズが 1024x768 なのとレジューム後に利用はできるのだけどログを吐きまくっている状態なので使い続けるのはどうかな。などと思うのでありました。

こうなったら xf86-video-ati の radeon ドライバでバグが治ってくれるのを待つばかりですが、せっかくなので、絶えず最新版が利用できるような環境を用意しておこうなどと思ったのであります。

http://cgit.freedesktop.org/xorg/driver/xf86-video-ati/

この辺りを見ていると、コツコツと更新はされているようです。で、snapshot は "master" と言う文字列が付加されて公開されているようなので、それ用の ports を作ってみました。以下に転がしておきます。

結構トリッキーなのでコミットはしません。また、もし利用するのであれば ports に詳しい人限定です;-)。
後、 automake-1.11.1 が必要です。利用する場合には portupgrade して automake のバージョンを上げてください。

http://www.icmpv6.org/Prog/FreeBSD_ports/ports-xf86-video-ati-master.tgz

このファイルをダウンロードしたら /usr/ports/x11-drivers/ 辺りに展開します。 そーすると xf86-video-ati-master/ と言うディレクトリができたかと思います。

ちなみに ports の雛形は x11-drivers/xf86-video-radeonhd-devel を参考にさせてもらっています。nork さんありがとー;-)。

# cd /usr/ports/x11-drivers
# tar xvzfp ~/ports-xf86-video-ati-master.tgz
# cd xf86-video-ati-master
# rm /usr/ports/distfiles/xorg/driver/xf86-video-ati-master.tar.bz2
# make NO_CHECKSUM=yes configure
# cat patch-man_Makefile | patch
# make NO_CHECKSUM=yes install

こんな感じですかねー。man がインストールできないので patch-man_Makefile を実行しますが、ports の Makefile で吸収することができませんでした。ダサくてすみません・・。

後、絶えず最新版の xf86-video-ati-master.tar.bz2 を取ってくるので make NO_CHECKSUM=yes します。 distinfo はオマケみたいなものですが、 xf86-video-ati-master.tar.bz2 がダウンロードできない時は distinfo の SIZE を書き換える必要があるかもしれません。

一回インストールしている場合は make deinstall してから make reinstall になると思います。


ThinkPad X100e のグラフィックスチップは RADEON HD 3200 の RS780M になります。フツーであれば x11-drivers/xf86-video-radeonhd を利用するのですが、最近の ATI ドライバには radeon ドライバが吸収されていてこっちのほうが進んでいるようです。

xf86-video-ati の ports は 6.13.0 なんですが、上記 URL が示すとおり最新版は 6.13.2 になります。 x11-drivers/xf86-video-ati の Makefile の PORTVERSION= を 6.13.2 にして make NO_CHECKSUM=yes install って手もあります。この場合 xorg.conf のドライバは Driver "radeon" にすると良いです。

で、xf86-video-ati のドライバを使うと何が良いか?と言うことなのですが、僕は持ってませんが DH5000 番台のグラフィックカードが利用できるみたいなんですね。

最新の ATI のグラフィックスチップを利用している人は xf86-video-ati の 6.13.2 もしくは開発中版の master を利用して、トライしてみるのもひとつの手かと思います。


ちなみに ThinkPad X100e の RADEON HD 3200 は前のエントリでも書きましたが、レジューム後に以下のメッセージが出力されて、利用できなくなります。

info: [drm] wait idle failed status : 0xA0003030 0x00000003

この文字列で gogo ってみると以下の URL が出てくるので、問題点については認識されていると思うので、早く改修されて、まずは master 版で提供されないかなー。

https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-ati/+bug/608665

などと思っているのでありすます。

これからは一週間に一度位の割合で xf86-video-ati を更新するのであります;-)。

あ。もっと美しい ports を書いてくれる方、絶賛募集中;-)。

ThinkPad X100e を FreeBSD で Suspend/Resume。

ThinkPad X100e の三回目です。これで最後になるか?! と、言う感じなのですが、僕がこの X100e を購入した後に Lenovo から新製品が出たり DELL から AthonII X2 な CPU の NotePC が出たりしてちょっと悲しいことが続いている、つまりはまぁ、僕が購入したタイミングが非常に悪かった。と言うことになるのですけども・・。orz。

と、言うことで今回は X100e で FreeBSD を利用した時の Suspend と Resume についてのお話です。「ThinkPad X100e で FreeBSD。気がついた点。」のエントリーでは「サスペンド・レジューム動きません。」とキッパリと書いたのですが、色々試したら、X 無しだと Suspend して Resume することが確認できました。FreeBSD もドンドンと進んでいると言うことですねぇ・・。大変失礼しました・・。

試した方法ですが、全てのカーネルモジュールを unload します。でもって必要最小限のカーネルもシュールのみで起動します。以下はそのモジュールのリストです。

kernel
acpi_ibm.ko
random.ko
if_re.ko
miibus.ko
procfs.ko
pseudofs.ko
ipfw.ko
libalias.ko
radeon.ko
drm.ko
agp.ko

ファイルシステム系のモジュールはあってもなくても大丈夫でしょう。ネットワーク系モジュールはリモートから ssh する用です。後、random もですね。その他に X 系のモジュールをロードしました。
僕は ATA 系周りはモジュールにしていません。

この状態で色々試したわけです。acpi_video は動作が怪しい kldunload acpi_video するとマシンがフリーズするので利用しないことにしました。後は sysctl の設定ですが、 /etc/sysctl.conf には以下の設定を入れました。

#hw.acpi.standby_state=S3
hw.acpi.suspend_state=S3
hw.acpi.thermal.min_runtime=300
hw.acpi.battery.info_expire=30
hw.acpi.power_button_state=S5
hw.acpi.sleep_button_state=S3
hw.acpi.lid_switch_state=NONE
hw.acpi.reset_video=1 hw.syscons.sc_no_suspend_vtswitch=1
vfs.usermount=1 hw.snd.default_unit=1

hw.acpi.reset_video と hw.syscons.sc_no_suspend_vtswitch を 1 にするとレジューム後に画面が表示されるようになります。

まずは X を起動せずにコンソールから acpiconf -s3 と叩くと「ヒューン」とか言ってスリープします。でもってパワーボタンはブリンクします。その後しばらくしてからパワーボタンを押すと。おぉーーっ!! 無事に復活するのであります。リモートからの ssh も接続が復活していてコマンドも受け付けてくれます。また、コンソールからもコマンドがバシバシ打てるのであります。

この辺りはミョーに感動です;-)。

と、言うことで、次に X を起動して KDE4 でログインしてから acpiconf -s3 を試してみます。スリープした後にパワーボタンを押すとバックライトは点灯するのですが、X の画面が出てきません。

ssh は利用可能なので、dev.acpi_ibm.0.lcd_brightness や dev.acpi_ibm.0.events 、そして hw.acpi.reset_video などの値を変更してみるのですが、復活する兆しは全く無いのでありました。

しゃーないので shutdown します。

次に試したのは X を起動して KDE4 でログインした後に CTRL-ALT-F1 して X の画面を一旦閉じてコンソールの画面にします。この時、コンソールではベコベコ文字が打てる状態なので acpiconf -s3 します。でもってサスペンドした後にパワーボタンを押すと、おぉっ!! コンソール画面は無事に返ってました。ここでコマンドもベコベコ打てます。

では、さっき CTRL-ALT-F1 しているので、今度は CTRL-ALT-F2 や CTRL-ALT-F3 を押して X の画面を戻すべ。とか思うのですが、ここで再度ブラックアウト。orz バックライトが点いているだけにちょっと悲しい状態なのですが、レジューム後に X が表示されることはないのでありました・・。orz

ちなみに、この状態の時、drm.ko は膨大な量のログを吐きまくっております。以下のようなログなんですけども。

info: [drm] wait idle failed status : 0xA0003030 0x00000003

なので問題は drm.ko 側にあるのかなぁ?などとも思えるのですが、vesa.ko でやったらどうなんだ?とか、色々あるわけなんですけどもね。

とりあえず、xf86-video なドライバは radeonhd と radeonhd-devel を試してみましたが、とちらも症状は一緒でした。とほほ。vesa ドライバでも試してみましたが、vesa の場合、ちょっと症状が変わって、壊れた X の画面が表示されたりましたが、X がまともに使える状態ではありませんでした。vesa の場合は drm.ko とか kldunload したら症状変わったりするかなぁ・・。

と、言うことで、X 無しでは無事にサスペンド・レジュームすることを確認しました。ただ、必要最低限のカーネルモジュールをロードしての確認なのですけどね。そもそも、X が動かないので、これ以上、カーネルモジュールをロードしてテストしても仕方がない。と言うのが素直な僕の感想なのですけども・・。

ThinkPadX100e は Radeon なんだけど、Core2Duo の Intel 系のグラフィックスチップの場合、無事に drm.ko も動作するのかなぁ? それがちっくと疑問なのですけども。

if_rum と if_run について。

さて。ThinkPad X100e を購入して色々試している最中です。「ThinkPad X100e で FreeBSD。気がついた点。」のエントリーで書いた通り、if_iwn が動作しないので手元にある USB 接続の WiFi デバイスを試してみました。

手元にあるのは二つ。

MELCO WLR-UC-G
PCI GW-US300MiniW

上の MELCO WLR-UC-G は Ralink の 802.11a/b/g に対応した RT2500W のチップを載せています。こいつは FreeBSD 8.1-STABLE においては usbdevs にエントリが無いのでパッチを書きました。以下の URL にパッチはあります。

http://icmpv6.org/Prog/FreeBSD_patches/MELCO_WLR-UC-G_8.1-STABLE.patch

そして、このパッチは send-pr したので近いうちにパッチを適用せずとも利用できるようになるのでは。と思います。
なお、MELCO WLR-UC-G は ディップスイッチで AOSS(AP モード)とクライアントモードの両方に対応していますが、USB の deviceid は両方とも登録しておきました。

下の PCI GW-US300MiniW は 8.1-STABLE にはドライバは用意されていますが、man ページが存在していないようですね。if_run で認識するデバイスです。 if_run は Ralink の 802.11a/b/g/n に対応した RT2700U / RT2800U / RT3000U のチップに対応したデバイスです。

if_rum_run_0.jpg

では、FreeBSD/amd64 8.1-STABLE で利用できるのか? 検証した結果をちょっと書いておきます。

まず、if_rum の MELCO WLR-UC-G ですが、パッチを適用して kldload if_rum した後に USB に接続すると無事に認識します。認識するとこんな感じになります。

ugen2.2: <Buffalo> at usbus2
rum0: <Buffalo WLR-UC-G, class 0/0, rev 2.00/0.01, addr 2> on usbus2
rum0: MAC/BBP RT2573 (rev 0x2573a), RF RT2528

今回は一番簡単な wep で接続しています。全ての機器はこれで利用するようにコマンドを投入しました。rum0、run0 とオンボードの iwn0 は以下のコマンドで検証しています。

# ifconfig wlan0 create wlandev rum0
# ifconfig wlan0 ssid SS-ID wepmode on wepkey 0x313131 weptxkey 1 up
# dhclient wlan0

パッチ適用後の MELCO WLR-UC-G はこれで無事に動作することを確認しました。DHCP サーバからアドレスを取得して、ネットワークに接続できることを確認しました。ただ、問題もまたあって、どうやらマルチキャストパケットが通らないようです。

最近の FreeBSD と言うか KDE は mDNS が動作していて、Apple の Bonjour などと連携してプリンタが利用できたりするんですが、 mDNSResponder が以下のメッセージを出力し正常に動作していないように見えます。あれま・・。orz。

mDNSResponder: mDNS_AddDNSServer: Lock not held! mDNS_busy (0) mDNS_reentrancy (0)

ユニキャストなどが無事に通信ができるデバイスなだけにちょっと残念です。ちなみに mDNS 関係のソースは追ってないのであります・・。

次に if_run の PCI GW-US300MiniW についてですが、僕は 9-CURRENT を追っかけていないのでよく解らないのですが、 8.1-STABLE に man が無いと言うことはまだ STABLE に降りてきて時間が経ってないと言うことなんでしょうかね?

kldload if_run した後に USB に接続すると、既にエントリーが登録されているようで特にパッチを書く必要もなくサクっと認識しました;-)。

ugen2.2: <Ralink> at usbus2
run0: <1.0> on usbus2
run0: MAC/BBP RT2860 (rev 0x0102), RF RT2820 (MIMO 2T2R), address 00:90:cc:fd:86:e7
run0: firmware RT2870 loaded

上に書いてある ifconfig コマンドを投入し、こちらも wep で動作確認します。run0、wlan0 ともに status: associated になっているのですが、DHCP でアドレスをもらうことができませんでした。orz。

パケットが全く外に出て行ってない感じで手動で IP アドレスを付加して ping を打ってもまぁるで利用できない状態なのでありました・・。orz。

後、run0 で気になったのは if_run のコードをチロっと見てみると 802.11n に対応しているコードが入っているようです。でもって、今回接続したPCI GW-US300MiniW は 802.11n に対応しているデバイスなのですが、こいつは 802.11g で認識してしまいました。あぁれぇ・・。

ドライバがアップデートされるのをちっくと待ちましょうかねぇ。


さてと。ThinkPad X100e に付属の fi_iwn が利用できない。USB の if_run が利用できない。USB の if_rum は利用できるみたいだけどマルチキャストがどうもあやすぃ。みたいな感じとなりました。さてと、どうすっかなぁ・・。

ThinkPad X100e で FreeBSD。気がついた点。

前回のエントリーで ThinkPad X100e 買いました−。っての書きました。でもって Windows7 x64 と FreeBSD/amd64 8.1-STABLE が動いているわけですが、今回は FreeBSD での動作についてちょっとまとめてみたいと思います。

1. サスペンド・レジューム動きません。
acpiconf -s3 で寝ることはできます。パワー LED もちゃんとブリンクするので「お。寝たか?」とか思うのですが、電源投入するとそこでフリーズします。 s5 も動きません。
FreeBSD の サスペンド・レジューム は SMP カーネルの場合、コードがスパっと抜け落ちているそうなので絶対に動作しないのでありますね。はい。ただ、シングル CPU カーネルの場合は動作するのかなぁ?試していませんし、試そうとも思いませんが・・。

2010/10/19 加筆
サスペンド・レジュームについては「ThinkPad X100e を FreeBSD で Suspend/Resume。」を参照してください。

2. 無線 LAN if_iwn は動作しません。
ThinkPad X100e は AMD のアーキテクチャなのに無線 LAN 周りは Intel のセントリーノ技術を使ってイいるんですね。利用しているチップは if_iwn 対応で Intel(R) PRO/Wireless 6250 と、言うヤツです。これと USB 接続の WiMAX 対応チップがセットになったヤツらしいのですが、以下のメッセージが出力され動作しません。

iwn0: iwn5000_send_calibration: could not send calibration result, error 22
iwn0: iwn_init_locked: could not initialize hardware, error 22

if_iwn.c のソースコードをチロっと眺めたところ、本来であれば iwn6250 版台(ファームウェア的には 6050 かなぁ?)なのに if_iwn.c のコード的には iwn5000 のファームウェアで動いているっぽいのでその辺りが影響しているのかもしれません。

なお、Intel(R) PRO/Wireless 625 は 802.11n に対応しているので 300Mbps 出る(論理値)のですが、ドライバ側では 802.11a/b/g にしか対応してないので 54Mbps しか速度が出ません。コード的には #if 0 って部分ですが、更に必要な define が無いのでどうしようもない状態・・。

3.サウンドチップは特殊でした。
NotePC 的にはスピーカがついているのにそこから音は出ない。けど、イヤホンジャックにヘッドホンを接続すると音が出ている。あれあれあれ?って感じですが、cat /dev/sndstat してみるとデバイスが二つ認識しているようです。

$ cat /dev/sndstat 
FreeBSD Audio Driver (newpcm: 64bit 2009061500/amd64)
Installed devices:
pcm0: <HDA Conexant CX20582 (Pebble) PCM #0 Analog> (play/rec)
pcm1: <HDA Conexant CX20582 (Pebble) PCM #1 Analog> (play/rec) default

なんとっ!! pcm1 がスピーカ側のデバイスで、pcm0 がヘッドホン側のデバイスです。普段は sysctl -w hw.snd.default_unit=1 しておいて、ヘッドホンで聞く時は hw.snd.default_unit=0 する必要があります。

これは KDE-4.5.1 の Kmix (サウンドミキサーアプリ)のキャプチャですが、それぞれのデバイスのためにボリューム(「OSS Audio Mixier」ってヤツのタブ)が二つあります。ヘッドホン用とスピーカー用ですね。いやぁ。ちょっと驚き。最近の NotePC ってみんなこうなのかな?

thinkpadx100e2_1.png

mplayer とか立ち上げて映画とか見ていた場合、最初はスピーカーで聞いていたけど、ヘッドホンにしたい場合は sysctl -w hw.snd.default_unit=0 とか打つ必要があります。てもって音の出力先が変わったので mplayer は再起動し直しとなります。ふむー。

4. Fn+F?? キー使えません。
Fn+ テンキーって、ベンダ向けに用意されている acpi_*.ko をロードすれば Fn+ テンキー が利用できると思っていたのだけど、acpi_ibm.ko をkldload してもキーがマッピングされないので、音のボリューム・無線 LAN のオン/オフ・ディスプレーの明るさが変更できません。orz。 僕が最近の NotePC を知らないだけなのかも。技を知っている方、教えてください。

無線 LAN はそもそも利用しないのでずっとオフでも良いかも;-|。まぁ、仮に動作するようになったとしたら kldload/kldunload if_iwn.ko すればいーや。とか思っているんですが;-)。
音の大きさはミキサーアプリで調整するのでこれまたなんとかなりそう。
ディスプレーの明るさは acpi_video.ko を kldload すると sysctl MIB として hw.acpi.video.lcd0.brightness と言うのが生えてくるのでそこで明るさを指定します。以下のようなスクリプトを書けば良いかなー。って感じなのでありますが・・。

#!/bin/sh
sudo sysctl -w hw.acpi.video.lcd0.brightness=$1


多少使い込んで気がついたのはこんな感じでしょうか。まぁ、多分、標準的な「NotePC にインストールした FreeBSD の動作。」だと、僕は思っているのですけどねぇ;-P。

if_iwn は当分更新される予定は無いみたいなので半分あきらめです。最近は Windows7+IE9 も中々良いと思えるのでどうしても無線 LAN が必要な場合は Windows7 利用するかも;-P。まぁ、その前に iPhone4 があるので、多分めったに NotePC を門外に持ち出すことは無いと思うのだけどねぇ;-)。

ThinkPad X100e 購入。

久しぶりに AT 互換機の NotePC を購入しました。今まで利用していたのが 4,5 年前の DELL X1 。もう「遅いっ!!」などと感じ始めていたので新しい NotePC の購入に踏み切ったのでありました。

で、新しく購入したのが Levono の ThinkPad X100e。僕的に ThinkPad の購入は実に 535E 以来なのであります。二台並んだ写真。

ThinkPadX100e_1.jpg

自分でも思うけんど、この新旧二台が並んだ写真てのは中々無いとおもうぜぉ;-)。貴重な写真なのであります;-)。

と、言うことで、DELL X1 から大きく変わった点をちっくと書いておきます。

・CPU が Intel PentiumM 900MHz から Athlon Neo X2 L335 の 1.6GHz になった。
・チップセットが Intel から AMD になった。
・メモリが 2GHz から 4GByte になった(実際に積んでいるのは 3GByte)。
・HDD が 1.8 インチ 60GByte から 2.5 インチ 320GByte になった。
・無線 LAN が 802.11n に対応した。

みたいな感じでしょうか。

CPU がデアルコアになってクロックアップしたのと、HDD が 1.8 インチから 2.5 インチになったので、体感的に随分速くなったように感じます。
当初 DELL X1 の HDD を SSD に交換しようかと思ったのだけど、1.8 インチの東芝 50pin IDE タイプの SSD は 60GB だと 30,000yen を遙かに上回る値段なので購入を断念。後 30,000yen 出せば新品買えるじゃん。みたいな感じだったのでありました。

それにしても、僕はデスクトップは Intel 買わなくなって随分久しいのですが、NotePC もいよいよ AMD 系になったかー。と言う感じなのであります。今は Apple MacBook だけか。 Intel 系なのは。そんな感じなのであります。

では、ThinkPad X100e の気がついた点を少々。

例のごとく、初期インストールの Windows7 はブートもせずにサクっと消しました。後、HDD に入っていた Windows7 のリカバリー CD イメージもサクッと消したので、純正アプリに何が入っているのか全く知りません;-)。 320GB の HDD は余計なの全て消して、FreeBSD/amd64 8.1-STABLE に 80GB、Windows7 に 220GB の二つにしました。

Windows7 は Profetional x64 をインストールしました。リカバリー CD イメージはもうないので Microsoft TechnetPlus のをインストールしたので、このマシンも検証機器になりました;-)。

後で Levono に電話してリカバリー CD イメージを送ってもらおうと思っています。

Windows7 はサクっとインストールが完了しました。唯一 WiMAX のカードが認識しなかったので Levono からドライバーをダウンロードして動作するようになりました。あ。そーそー。このマシン、CPU とチップセットは AMD 、 NIC は re0 、 無線 LAN チップが Intel のセントリーノを利用してる(Centrino Advanced-N+WiMAX 6250 の組み合わせ) んですね。ある意味面白い;-)。

USB カメラがあるみたいなんだけど、使い方はイマイチ解りませんf(^^;;。まぁ、必要ないかな。

続いて FreeBSD/amd64 ですが、特に問題無くインストールは終了。pciconf -lv しても none0 が一個だけ。Centrino Advanced-N+WiMAX 6250 って FreeBSD のドライバってあるのかなぁ? GENERIC カーネルで none なんだけど・・。

後、USB デバイスが三つついています。 usbconfig list によると

ugen4.2: <USB2.0-CRW Generic> at usb
ugen4.3: <Integrated Camera Image Processor>
ugen4.4: <Intel(R) Centrino(R) Advanced-N + WiMAX 6250 Intel(R) Corporation>

らしいですが、あれ? NIC は USB なのかー。後はカメラと SD スロットみたいですね。SD スロットはフツーに認識しました。 Centrino Advanced-N は後で試してみよう。if_u のどれかを kldload したら認識するかなぁ?

現在は カーネルを 8.1-STABLE にして KDE4 を make している最中です。X も RADEONHD ドライバで RS780M/RS780MN [Radeon HD 3200 Graphics] と認識し、サクっと動いております;-)。

まぁ、2,3 世代古い構成なので枯れている。って感じでしょうか。特に難もなくどっちの OS も動作しているのであります;-)。

このネタ続くかなぁ?比較的容易に動作してしまったので特にネタは無いかも・・;-)。

あ、最後に一点。僕のパーティションの切り方の問題かもしれないですが、この PC、 Windows7 をインストールしたにも関わらず Windows7 側のブートマネージャを利用せず、以前の通り、F1 で Windows、F2 で FreeBSD がブートするようになりました。Windows7 側の bcdedit を利用して FreeBSD をブートしようとしたら「できねいぜぃ。」みたいに言われてしまいました。

難儀したのはそれくらいでしょうかねぇ。

DELL X1 と比べて随分と速くなったので今晩中に KDE4 の make は完了するかなぁ?楽しみなのであります;-)。

あ。dmesg とか pciconf -lv とか xorg.conf など見せて。って言う人いましたらコメントください。掲載しますので。


2010/10/04 加筆
dmesg とか pciconf -lv とか xorg.conf などが見たいですー。と言うコメントを頂いたので公開します。
以下の URL に色々な情報を置いたので良ければ参考にしてください。

http://icmpv6.org/Prog/tmp/ThinkPadX100e/

wine で Evernote クライアントを動かす(努力をする)。

Evernote ってのが世の中にはあるみたいです。僕は iPhone4 ユーザなのですが、ファイルをクラウド上にアップして、色々な機器から利用できるみたいです。詳細については以下の URL を参照してください。

http://www.evernote.com/about/intl/jp/

さて、iPhone4 上ではデータを同期するクライアントがあります。あと、MacOSX とか Windows、他の携帯端末用のクライアントもあるのですが、Linux や FreeBSD のためのクライアントは無いようです。

Linux の人が頑張っているのは wine で Windows 版 Evernote クライアントを動かすと言うワザなんですね。FreeBSD でも ports に emulators/wine があるので早速試してみましょう。

まず、 ports から wine をインストールして、上記 Evernote のサイトから Windows 版クライアントをダウンロードします。その後、以下の要領で実行します。

$ wine ./Evernote_3.5.6.2848.exe
fixme:heap:HeapSetInformation 0x0 1 0x0 0
wine: Install the Windows version of Mono to run .NET executables
$

あいやまぁ・・。Evernote は .NET はレームワークを利用しているようです。しかし、 wine の default の環境では .NET はレームワーク が無いのでインストールできないみたいです。

ちなみに wine の環境は ~/.wine/ になり、 ~/.wine/drive_c/ が Windows で言うところの c:\ になります。それにしても .NET フレームワークをインストールする必要があるのでインストールすることにしましょう。

世の中を探しまわっていたら wine の環境をサクっとインストールしてくれるスクリプとがあるようです。

http://www.kegel.com/wine/ から winetricks と言うスクリプトをダウンロードしてくればよいみたいです。

$ ftp -a http://www.kegel.com/wine/winetricks
$ chmod 755 winetricks
# mv winetricks /usr/local/bin/
$ rehash
$

winetricks を実行するためには一個 ports をインストールする必要があります。 archivers/cabextract をインストールしましょう。これで winetricks を実行する準備が整いました。

オプション無しで実行するとウィンドウが一個現れたと思います。winetricks -h と実行すると、バババと文字が表示されたかと思います。ウィンドのメニューやオプションに dotnet30 を選択もしくは指定すると ~/.wine/drive_c/ に .NET Framework をインストールしてくれます。他にも色々インストールしてくれるヤツがあるので winetricks -h で表示されたものをじっくりと眺めてみても面白いです;-)。

と、言うことで今回は winetricks dotnet30 と叩くのでありました。

wine_evernote1.png

こんな感じでインストールが始まります。おぉっ!! これはラクチンだぁ;-)。.NET Framework がインストールするのをしばし待ちます。また、必要であればその他色々インストールしてみるのも良いかもしれません。

でもって今度はいよいよ次は Evernote のインストールです;-)。上で実行した wine コマンドを投入します。すると今度はインストーラが起動したようです。うひひひ;-)。

wine_evernote2.png

以降、フツーのインストールと同じように進むと無事にインストールが終わりました。おぉっ!!これは素晴らしい。

続いて早速実行してみることにしましょう。インストールされた Evernote.exe は ~/.wine/drive_c/Program Files/Evernote/Evernote3.5/Evernote.exe にあります。これを wine コマンドのオプションとして実行してあげます。

するとー。

wine_evernote3.png

orz。今日はこの辺りまでにしておきましょう・・。

筆者自身まだよく wine を把握しておりません。Windows ディレクトリにどういったものがインストールされているか、どういったものが必要なのか、Windows について、筆者はあまりよく知らないんですねf(^^;;。

今回の目的としては winetricks の使い方が解って良かったよねー。これ使うと wine の環境整えるのが楽だよねぇ。みたいな。そんな感じでこれにて終わるのでありました。


中途半端でどうもすみません・・。

FreeBSD RELENG_8 で USB 機器からブートする。

自宅の PC はそろそろ FreeBSD 7 系から 8 系にバージョンアップしているのであります。が、我が家にはちょっとワンパクな EeePC がいるのであります。最終型は FreeBSD 7.3-STABLE に落ち着いていたのですが、各種デバイスが動作しないので早いところ FreeBSD 8 系にしたいものだ。と何回もトライしていたのですが・・。

今回やはりバージョンアップにトライしました。 EeePC に USB 接続の 2.5 インチ HDD を接続します。

それとは別に USB メモリからブートしてイントールするためのブートイメージを作成します。参考にしたのは「USBメモリからFreeBSDをインストールする」こちらのサイト。

ここに書かれている USB メモリの dd や newfs などを参考にさせてもらいした。ありがとうございました。ただし一点だけ。僕は USB メモリからブートしたあとにネットワークインストールする予定なので CD-ROM イメージ全ては必要ありません。上記 URL の cp -pR /cdrom/* /usbmem の部分は以下のようにします。

# cd /cdrom
# cp -pr /boot boot.catarog cdrom.inf /usbmem

/boot だけを USB メモリにコピーする。って感じです。これだと USB メモリの容量は 64MB のもので済みます。あとはブートしたあとにネットワークインストールするだけ。FreeBSD の iso イメージ的には FreeBSD-8.1-RELEASE-i386-bootonly.iso を用意すれば十分。て感じでしょうか。

と、言うことで、ブート用の USB メモリと USB 接続の 2.5 インチの HDD (今回はここに FreeBSD 8.1-RELEASE をインストールします)が用意できました。これでインストールします。が・・。EeePC では USB 接続の HDD を認識してくれませんでした。orz。FreeBSD のインストーラは起動するのですが、HDD 選択の画面で USB 接続の HDD を認識してくれないのであります。ブート用の USB メモリは問題無くブートしました。


しょーがないので普段利用しているデスクトップ PC で再度トライ。BIOS 設定を変更して USB メモリからブートするようにします。でもってブート。おぉ。今度はちゃんと USB 接続 の HDD を認識したのでこちらに対して FreeBSD 8.1-RELEASE をインストールし、無事に完了するのでありました。

母艦 PC (インストールに利用したデスクトップ PC) をシャットダウンしたあとに USB メモリと USB 接続の HDD を抜きます。でもって USB 接続の HDD を EeePC に接続してブートするのであります。

おぉっ!! ブートしたっ!! と思ったのもつかの間・・。umass0:0:1 など、 USB デバイスは認識するのですが、HDD が認識しないので FreeBSD が root バーティションはどこだ?と聞いてきます。

ufs:/dev/da0s1a

とか打つ画面ですね。ここから先に行かない・・。orz。dmesg 的には以下のような感じ。

uhub0: 2 ports with 2 removable, self powered
uhub1: 2 ports with 2 removable, self powered
uhub2: 2 ports with 2 removable, self powered
uhub3: 2 ports with 2 removable, self powered
ugen0.2: <Initio> at usbus0
umass0: <Initio 0M9AT00, class 0/0, rev 2.00/1.06, addr 2> on usbus0
umass0:  SCSI over Bulk-Only; quirks = 0x0000
ugen2.2: <ENE> at usbus2
umass1: <ENE UB6225, class 0/0, rev 2.00/1.00, addr 2> on usbus2
umass1:  SCSI over Bulk-Only; quirks = 0x0000
umass0:0:0:-1: Attached to scbus0
umass1:1:1:-1: Attached to scbus1
---> ここまで来たところで ufs:/dev/daos1a ? のプロンプトが出るっ!! ---> ここから下が動いてくれないっ!!
(probe1:umass-sim1:1:0:0): TEST UNIT READY. CDB: 0 0 0 0 0 0 (probe1:umass-sim1:1:0:0): CAM status: SCSI Status Error (probe1:umass-sim1:1:0:0): SCSI status: Check Condition (probe1:umass-sim1:1:0:0): SCSI sense: NOT READY asc:3a,0 (Medium not present) da0 at umass-sim0 bus 0 scbus0 target 0 lun 0 da0: <Initio 0M9AT00 1.06> Fixed Direct Access SCSI-0 device da0: 1.000MB/s transfers da0: 19077MB (39070080 512 byte sectors: 255H 63S/T 2432C) da1 at umass-sim1 bus 1 scbus1 target 0 lun 0 da1: <USB2.0 CardReader SD0 0100> Removable Direct Access SCSI-0 device da1: 1.000MB/s transfers da1: Attempt to query device size failed: NOT READY, Medium not present Trying to mount root from ufs:/dev/da0s1a

どーしたもんかいのぉ・・。と悩んでいるのであります。8-CURRENT や 8-STABLE をインストールした時と全然一緒な状態・・。orz。

そんなバナナっ!! この後におよんでいくら何でも 8.1-R まで行っても USB デバイスからブートできないなんてありえないだろうっ!! とか思い、いよいよ IRC で聞いてしまいました。そしたらとある有名なコミッタの方が以下の設定を /boot/loader.conf に書いてみそ。と言うので言われたとおり書いてみました。

kern.cam.boot_delay=10000

インストール直後の状態でシングルユーザでもブートしてくれないのにどうやって /boot/loader.conf 編集したらえーねん。とか思うのですが、僕は USB HDD を別の FreeBSD に接続して mount /dev/da0s1a /mnt したあとに /boot/loader.conf を編集しました。そのあとで再度 EeePC に接続してブートしたらっ!! おぉー。da0 がようやっと認識できて上のような dmesg となったのでありました;-)。わーいっ!! ありがとうございましたーー。

EeePC では 7 系 STABLEは今まで動作していたのですが、 8 系 STABLE はこの USB の問題で諦めていたのでありました・・。

ちなみに他の FreeBSD を持っていない人は /boot/loader.conf に書き込むこと、できないですよね。そんな人は ブート時のメニューで 6 を選択します。そこで set コマンド叩いてから boot とたたけば良いらしいです。ブートしたあとはすかさず /boot/loader.conf に設定を追加してあげれば OK です。

set kern.cam.boot_delay=10000
load /boot/kernel/kernel
boot

ふぅ。FreeBSD を USB メモリや USB HDD などからブートしたい人は上記設定を入れると、umass の認識でちょっと待ち状態が入るのでそのあとに da0 が認識され、ルートパーティションが取得できると言うわけですね。上記の設定が無い場合、da0 を認識する前にルートバーティションはどこぜお?ってなってしまうのでちっくとまちぃや。って感じで上記の設定を入れるのだそうです。

それにしても無事にブートできて良かったです。うんうん。さてと。今から csup で 8.1-STABLE にしようかなー;-)。

ほんにもう。それにしてもありがとうございました。

CUPS で FreeBSD から簡単印刷。(MacOSX があればだよ)

僕の自宅にはネットワーク上に FreeBSD 二台、Windows7 二台、MacOSX 一台がクライアント PC として存在してます。でもって自宅にはプリンタがあって ブラザー HL-2040 があるのですが、このプリンター、USB とパラレルポートで接続できるのであります。

HL-2040 のパラレルポートは Windows7 に、USB は MacOSX に接続されているので FreeBSD が動作している PC にはプリンタが接続されていないのであります。

そもそも、FreeBSD ではプリンタが動作するようにする設定はややこしいし、無理して FreeBSD から印刷しなくとも、cupsd が動作していて、ベンダがドライバを用意している MacOSX から印刷すれば綺麗に印刷できるのでそれで良いやー。とか思っていたわけですが・・。

しかし、よくよく調べてみるとブラザーは MacOSX と Linux 用に cups ドライバを用意しているので、それを FreeBSD に持ってきたら FreeBSD でも綺麗に印刷できるではないかい?

とか思い、FreeBSD で cupsd を onestart したわけです。で、その後に http://localhost:631 にアクセスするわけです。そしたら・・。

あぁれぇ? MacOSX に接続しているプリンタが FreeBSD から見えるではありませんかっ!! 以下は cupsd に接続した時の「プリンタの管理」の画面です。

cups_printer.png

cupsd で既に認識されているので、後はアプリから使えるのか確認するだけです。まずは GTK アプリの代表格 Firefox からですが、「印刷」を選択するとちゃーんと MacOSX に接続されたプリンターが見えていて、印刷もちゃんとできました。

次は僕がメインで利用しているデスクトップ環境の KDE4 の konqueror で印刷してみましたが、これまたプリンタがちゃんと見えていてちゃんと印刷ができたのでありました。日本語も文字化けせずに綺麗に印刷されております(@_o)。

す、すげーな。って感じなのてありました。

さてと。ここからはただの観測でしかなくて、全くウラは取ってないのですが、MacOSX と、後、KDE4 を利用した僕のデスクトップ環境では mDNS やら avahi やら hald などがガシガシ動いている環境です。なので、MacOSX 上の samba でファイル共有とプリンタ共有がオンになっていると Apple 謹製の cupsd はサクっとお互いを認識しあえるのかなぁ(サクっと認識されたのは多分 mDNS の影響だと、僕は思うのでありますが)。などと思った次第です。

MacOSX に接続され、ネットワーク共有されているプリンタはサクっと利用できると言うことなのでしょうなぁ。

それにしても上のほうに書いた通り HL-2040 のパラレルポートは Windows7 に接続しています。で、Windows7 に接続しているプリンタもネットワーク共有しているのですが、こいつは cupsd からは見ることが出なかったのでありました。

cupsd 同士、後、mDNS などの親和性がすごーく良い。と言うことなんでしょうかねぇ。

最後にですが FreeBSD 上で make した cups-base の make config のオプションを付けておきます。

# This file is auto-generated by 'make config'.
# No user-servicable parts inside!
# Options for cups-base-1.4.3
_OPTIONS_READ=cups-base-1.4.3
WITH_GNUTLS=true
WITHOUT_PHP=true
WITHOUT_PYTHON=true
WITHOUT_LIBPAPER=true
WITH_DNSSD=true
WITHOUT_PAM=true
WITHOUT_LDAP=true
WITHOUT_DBUS=true
WITHOUT_LIBUSB=true
WITH_GHOSTSCRIPT=true
WITHOUT_XPDF=true
WITHOUT_XDG_OPEN=true

本当に良く分からないのですが WITH_DNSSD=true なのかなぁ。 FreeBSD で簡単にプリンタを使いたければ MacOSX に接続されているプリンタで。って感じでしょうか;-)。

kde4-4.4.5+qt-4.6.3 環境の scim-1.4.7。

FreeBSD の最新の ports-current を追いかけていたら KDE4 は kde4-4.4.5 に、 qt4 は qt-4.6.3 になったのだけど、あるときから scim-bridge で日本語の入力ができなくなってしまった。それ以前のバージョンではちゃんと動作していたのになぜなんだよぉ・・。orz

GTK アプリの Firefox とか Thunderbird には日本語が入力できるので KDE4 か QT4 がちょっとあやすぃ。などと思い textproc/scim-bridge や textproc/scim-bridge-qt4 などを再インストールするのだけど、ちぃとも復旧しない。おかしい・・。orz。入力できないのは KDE のアプリと、後 Java アプリで日本語入力ができない状態となっていました。

そして、色々環境変数を見直した所以下の設定で kde4-4.4.5+qt-4.6.3 でも scim-1.4.7 で入力できることが解りました。

o. 動作しない今まで設定していた内容

export QT_IM_MODULE=scim-bridge
export GTK_IM_MODULE=scim
export XMODIFIERS="@im=SCIM"
exec /usr/local/bin/scim -d &

この内容を ~/.xsession に書いていたわけですね。あ。僕は KDE4 の利用時に ~/.xsession を利用するってのは以前書いているのでそちらを参考にしてください。

さてと。この設定では scim で KDE4 アプリに文字入力できない。なので設定を見直してみました。

o. 見直した新しい設定

export QT_IM_MODULE=scim-bridge
export GTK_IM_MODULE=SCIM
export XMODIFIERS="@im=SCIM"
export XIM=SCIM
export XIM_PROGRAM="scim -d"

「scim」と小文字で設定したのを大文字で「SCIM」と記述し、新たに XIM な環境変数を追加してみました。

そして、今までは ~/.xsession で起動していたものを 「KDE システム設定」の [詳細] タブにある「自動起動」に登録して KDE4 側で自動起動するように設定してみました。そしたらなんとっ!! 無事に復活して KDE4 アプリでも scim で文字入力できるようになりました。良かった良かった。

ちなみに ports が scim のインストールに必要なものは textproc/scim textproc/scim-bridge textproc/scim-bridge-qt4 と、後、僕は Canna 使いなので japanese/scim-canna をインストールしています。

それにしても復活して良かった。このためにまるまる二日を費やしてしまったではないか・・。orz。

ONKYO ND-S1 と FreeBSD 8.1-PRERELEASE。

ちょっと前のエントリーで「ONKYO ND-S1 を PC に接続してみる。」と、いうのを書きました。その時は MacOSX と Windows7 では無事に動作したけど FreeBSD では usb.ko 辺りでエラーになって動作しないですねぇ。で終りました。

その時検証した FreeBSD は 7.3-STABLE だったのですが、今回 8.1-PRERELEASE にバージョンアップしたので再度試した所、無事に動作することを確認できました。mp3 や 音楽 CD、後、mp4 の動画についても音が出ることが確認できたので、FreeBSD から ND-S1 はサウンドカードとして無事に認識できました。

kernel: uhub7: 2 ports with 2 removable, self powered
root: Unknown USB device: vendor 0x08bb product 0x2704 bus uhub7
kernel: ugen5.7: <Burr-Brown from TI> at usbus5
kernel: uaudio0: <Burr-Brown from TI USB Audio DAC, class 0/0, rev 1.10/1.00, addr 7> on usbus5
kernel: uaudio0: Play: 48000 Hz, 2 ch, 16-bit S-LE PCM format
kernel: uaudio0: No recording!
kernel: uaudio0: No midi sequencer
kernel: pcm4: <USB audio> on uaudio0

前回書いた通り、サウンドデバイスがたくさんある PC になっている (cat /dev/sndstat の結果) のでサウンドカードを特定する必要があるのですが、以下のコマンドで pcm4 に向けてあげます。

# sysctl hw.snd.default_unit=4

これで無事に音がでるようになったということですね。演奏中は特にエラーを吐くことも無く快調に音が出るのでありました;-)。

さて。 7.3-STABLE と 8.1-PRERELEASE では基本的に USB 周りが改修されているようです。 8 系 FreeBSD では usb.ko から ochi.ko 、 uhci.ko 、 ehci.ko が独立しました。その関係でコードが見直されたのでしょうなぁ。良かった良かった。

筆者はその昔、8.0-STABLE を試しているのですが、この時、USB 接続の HDD が認識しませんでした。その時の顛末は「8.0-STABLE の USB ブート。」に書いているのですが、なるほどー。8 系リリースのことをよく調査もしないで、7 系と同じ感じで usb.ko だけロードすれば USB が使えると思っていて uhci.ko とかロードしていないために USB 接続の HDD が認識しなかったのねぇ。という感じなのでありましたf(^^;;。

最後にですが、ONKYO ND-S1 は USB バスパワーでも動作します。サウンドカードとして利用する分には AC アダプタは必要ありませんでした。 iPhone3G を接続した時に充電するためには AC アダプタが無いと充電できません。なので、実質的には AC アダプタは必要になるかと思うんですけどねぇ。

さてと。これで FreeBSD からもデジタル出力でオーディオ機器に対して音が出るようになったということですね。DVD を mplayer で見た時、5.1 チャンネルで音が出るようになるのかなぁ?だとしたらそれはそれで凄いことだけど;-)。 snd_uaodio.ko はどうなっているんだっけかなぁ。

ONKYO ND-S1 を PC に接続してみる。

オンキョーの CR-D2+D-D2E と言う組み合わせのミニコンポを購入しました。そして、その後に ND-S1 と言う PC と USB で接続できる iPod ドック付きのデジタルメディアトランスポートを購入しました。

音響機材としての感想などについては以下の URL に書いたのでそちらを参照して頂ければと思います。

ここでは ND-S1 を PC のパーツとして利用した場合にどんな感じか、ちょっとまとめてみたいと思います。

まず、ND-S1 と言うデバイス、PC からすると「サウンドカード」と言う扱いになります。USB 接続の外付けサウンドデバイス。 PC に接続すると USB Audio DAC として認識するので Windows・MacOSX・FreeBSD の全てでサクっとデバイスとして認識します(筆者の自宅に Linux は存在しない;-)。

まず、Windows についてですが、簡単に書いておきます。 Windows7 Ultimate x64 に接続するとサクッと認識します。後はコントロールパネルのサウンド設定で出力先を ND-S1 に向けてあげるだけで Windows Media Player や iTunes で音が出ます。また、 iTunes では iPod と Sync も行えます。

MacOSX は製品のカタログでは対応外の OS となっているのですが、こちらも Windows7 と同じくサクッと認識します。

usbdac_1.jpg

これが認識した瞬間ですね。後は iTunes の音も出るし、システム全体の音もステレオに飛ぶようになります。当然 iPod との Sync も行えるのであります。

さてと。ここまで二つの OS でサクッと認識したので、では今回の本命の OS である FreeBSD はどうだ?と言うことで、FreeBSD/amd64 7.3-STABLE に接続してみました。

uhub6: <vendor 0x0409 product 0x005a, class 9/0, rev 2.00/1.00, addr 3> on uhub5
uhub6: single transaction translator
uhub6: 2 ports with 2 removable, self powered
ugen1: <Burr-Brown from TI USB Audio DAC, class 0/0, rev 1.10/1.00, addr 4> on uhub6

一発目。USB ポートに接続したら、あれま。 ugen0 に落ちてしまいました。カーネルモジュールをロードしよう。と言うことで /boot/kernel を眺めるとそれらしいのは snd_uaudio.ko くらいしか見あたらないのでそれをロードしてから再度接続すると。おぉ。pcm として認識しましたね。

uaudio0:  <NBurr-Brown from TI USB Audio DAC, class 0/0, rev 1.10/1.00, addr 4k> on uhub6
uaudio0: audio rev 1.00
pcm4:  <NUSB Audiok> on uaudio0

cat /dev/sndstat してみると以下のような感じ。

$ cat /dev/sndstat
FreeBSD Audio Driver (newpcm: 64bit 2007061600/amd64)
Installed devices:
pcm0:  <NHDA ATI R6xx HDMI PCM #0 HDMIk> at cad 0 nid 1 on hdac0 kld snd_hda
pcm1:  <NHDA Realtek ALC883 PCM #0 Analogk> at cad 0 nid 1 on hdac1 kld snd_hda
pcm2:  <NHDA Realtek ALC883 PCM #1 Analogk> at cad 0 nid 1 on hdac1 kld snd_hda
pcm3:  <NHDA Realtek ALC883 PCM #2 Digitalk> at cad 0 nid 1 on hdac1 kld snd_hda
pcm4:  <NUSB Audiok> at ? kld snd_uaudio [GIANT] (1p:1v/0r:0v channels default)
        mode 1:(output) 2ch, 16/16bit, pcm, 32000,44100,48000Hz
        mode 2:(output) 1ch, 16/16bit, pcm, 32000,44100,48000Hz

おぉ。pcm4 で USB Audio DAC な機器として認識したようです(Realtek ALC883 PCM は長すぎるので後ろの文字列を消しています。今回重要なのは pcm4 になります)。これはすばらしいっ!!

それにしてもこの ND-S1 と言う機器は出力用にコンポジットデジタルとオプティカル光デジタル出力があるので output は二系統あります。そんでもって input は持っていないと言うことが解ります。

これが悲しいのよねぇ。ミニコンポから光デジタル出力して ND-S1 にデジタル入力があったとしたら PC 側でデジタル録音できたのにねぇ。それができない。フツーの PC 用サウンドカードではない。ということが良く分かります。

話を戻しますが、FreeBSD ではここからが泥沼です。まず、デジタル出力のチャンネルが二系統あるのですが、僕は「どっちかの出力チャンネルを指定する」コマンドなり設定を見つけることができませんでした。なので、オプティカル光ケーブルで接続しているほうを優先的に利用することができないので実際に正常に音が出ているのか確認できないのであります。orz。Windows とか MacOSX はどうやって判断しているのだろう・・。

ちなみに sysctl の hw.snd MIB ではそれらしいのを見つけることができませんでした。

けどもまぁ、気を取り直してとりあえず CD でも聞いてみましょう。あれ・・。音が出ない・・。
じゃあ mplayer で mp3 でも聞いてみましょう。あれ・・。音が出ない・・。
それなら dolphin (KDE4 付属のメディアプレーヤー)で動画でも見てみましょう。あれ・・。音が出ない・・。

orz。つまりは全滅。と言う感じなんですね。あげくの果てにはなにやら怪しげなログを出力しているようです。

kernel: pcm4:virtual:dsp4.vp0: play interrupt timeout, channel dead
kernel: usb5: *** WARNING: opening low/full speed device, this does not work yet.
pcm4:virtual:dsp4.vp0: play interrupt timeout, channel dead
kernel: usb5: *** WARNING: opening low/full speed device, this does not work yet.

USB HUB が悪さしていて USB の速度が出ないよ。的なメッセージなんですかね。けど、PC の USB ポートに直接接続したので特に問題は無いのではないかと思えるんですけど・・。また、同一 PC でマルチブートする Windows7 は同じ構成で無事に動作したし。

ちなみにこのメッセージが出力される部分がどこか、一応ソースを眺めたのですが、sys/dev/usb/ の
ehci.c と uhci.c だったので snd_uaoudio 側ではなく、USB 側の問題であろうと言う感じはします。時間ができたらじっくりとソースを眺めてみたいとは思いますが・・。

とまぁ、そんな感じで ONKYO ND-S1 を購入したのですが、ネタ的には音響機器・PC のデバイスと色々な角度から見てネタができて良かったです。

まぁ、FreeBSD で動作して本当に嬉しい?と言われれば何ともいえないのですけどね。 iPhone3G や iTunes での音楽の管理は 全て MacOSX 上で行っているので MacOSX に接続して、そこで動作すれば良いやー。となってしまうのでありますが;-)。


つづきを別のエントリーとして書きました。以下になります。

ONKYO ND-S1 と FreeBSD 8.1-PRERELEASE。

自宅サーバに WindowsServer2008 が仲間入り。

今年の初めあたりに「virtualbox-ose-3.1.2 を X11 無しで利用する。」というエントリーを書いたのですが、FreeBSD の ports の VirtualBox も今はバージョンが virtualbox-ose-3.2.4 というものになりました。

ports から make すると、make config で VNC がサポートされたことが解ります。つまり、X11 無しのサーバ上で VirtualBox を起動して VNC で接続すれば Windows でもラクチンに運用できる。ということですね。

先に起動方法を書いてしまいます。ports から emulators/virtualbox-ose をインストールしますが、 make config で WITH_VNC=true だけ指定して make install します。後は「virtualbox-ose-3.1.2 を X11 無しで利用する。」のエントリーで書いたコマンドを順番に実行していけば良いだけです。

が、コマンドオプションをちょっとだけ追加してみましょう。

$ VBoxHeadless -s "WindowsServer 2008 R2 EPE x64"  -n -m 12345

"-n" は VNC を使いますよー。ってオプションで "-m" は VNC で接続する時のポート番号ですよー。ってオプションです。

僕は自宅で動作している FreeBSD のサーバ上に virtualbox-ose-3.2.4 をインストールして、上記コマンドを実行したのでありました。

後は手元のデスクトップから VNC クライアントで vnc://server:12345 と接続すると、WindowsServer が起動する所から確認することができるのでありました;-)。

ちなみに、今回は Windows7 Ultimate x64 上で動作している VirtualBox にインストールした WindowsServer 2008 R2 EPE x64 を FreeBSD/amd64 7.3-STABLE 上に持っていって起動しました。
あ。FreeBSD/amd64 上で VirtualBox を起動させるためにはカーネルの設定ファイルに options COMPAT_IA32 が必要です。カーネルの再構築が必要ななります。

Windows7 上の \ユーザ\takachan\.VirtualBox\ を samba 経由でサーバ上に ~/.VirtualBox/ としてコピーしました。サーバ上ではパーミッションを直した後に以下のファイルを手で編集します。

  • ~/.VirtualBox/VirtualBox.xml
  • ~/.VirtualBox/Machines/WindowsServer 2008 R2 EPE x64/WindowsServer 2008 R2 EPE x64.xml
上の xml ファイルは VirtualBox 自体の設定を行う XML ファイルです。パスなどに "\" などが入っていたら "/" に書き直してあげる必要があります。

下のファイルは OS の設定用 XML ファイルです。このファイルは手で直すか、VBoxManage で設定するかします。僕の場合、Windows7 のデスクトップ上ではサウンドをオンにしていたのですが、サーバ上ではサウンドをオンにしていないので WindowsServer が起動しなかったため VBoxManage コマンドで --audio off しました。

これで無事に起動しました。後、ネットワーク周りとかでも引っかかったりするのではないかなぁとか思いますが、ダメだったらインストールしなおしてください(^^;;。ちょっとだけ設定ファイルを書いておきます。ネットワークの設定はこんな感じです。

<Network>
  <Adapter slot="0" enabled="true" MACAddress="080123858840" cable="true" speed="0" type="82540EM">
    <BridgedInterface name="re0"/>
  </Adapter>
  <Adapter slot="1" enabled="false" MACAddress="080123328902" cable="true" speed="0" type="82540EM"/>
    :
  <Adapter slot="7" enabled="false" MACAddress="08012319BA1F" cable="true" speed="0" type="82540EM"/>
</Network>

これはブリッジの設定ですが 僕は re0 を利用しているのでデバイス名を指定します。 NAT を利用する場合に <NAT/> と書くだけになります。

なんせ、僕は X11 無し版の VirtualBox 上では OS はインストールしたことがありません。前回は デスクトップ機として利用している FreeBSD/amd64 上で稼働する VirtualBox から、今回は Windows7 x64 上で稼働する VirtualBox から OS イメージと設定ファイルを持って来ています;-)。

しかし、自宅の FreeBSD サーバ上に WindowsServer 2008 が動作するようになりました。何のために利用するかですが、まずは SilverLight なサーバでも構築するか。という感じなのですが、自宅内のために AD を起動したりするのも良いかなぁ。などと思っているのであります;-)。がっ!!そーだった。検証目的のインストールなんだったf(^^;;。

あ。一点書いておきます。VNC クライアントで VirtualBox に接続するとマウスが、その動作に対して追随して来ません。実際のポイントとずいぶんとずれてしまうので難儀は必死です。そんな時は Windows 側のマウスの動作を最速にすると良いかと思います。後、Ctrl+Alt+DEL を利用しないようにするにはレジストリを変更する。ってのは書かなくとも良いですよね;-)。

rpc.statd: Failed to contact。

NFS サーバが時々以下のメッセージを出力していて非常に「ウザい」と感じていた。調べてみると「NFS クライアントが見つからないので接続できないよー。」って言う感じのメッセージで実害は無いみたいです。ほっといても良い感じはするんだけど、/var/log/messages が汚れるので美しくは無いですわなー。

hostanme rpc.statd: Failed to contact host remote-host: \
RPC: Port mapper failure - RPC: Timed out

上記メッセージは長いので改行していますけども・・。

で、このメッセージが出力されるのは NFS サーバ側です。NFS サーバは NFS クライアントが見えなくなるとこのメッセージを出力するようになります。

今まで動作していた NFS クライアントが(物理的に)いなくなっても延々と出続けるのでちっとウザい。と言うか、確かにウザい。そんな時は以下のファイルの中を覗いてみましょう。

cat /var/db/statd.status

この中に記述されている NFS クライアントに対して上記のメッセージが出力されていることが解ります。うふっ。

と、言うことでこのファイルの当該の行を消した後に /etc/rc.d/statd restart すれば以降はメッセージが出力されなくなります。んー。良かった。

ちなみに、ほっといてもあるタイミングで /var/db/statd.status の中身は更新されるみたいなんだけど、そのタイミングが解らないので、そんな時はサクっと手でこのファイルを編集してしまうのであります。

tacacs+ + MySQL な ports。

最近の tacacs+ は x86_64 対応ってのが(あんまり)無いのねぇ。その昔の tacacs+ のコードってのは x86 向けなので x86_64 上でコンパイルすると、随分色々なソースのコードを書き換えなければならない。

幸いにして FreeBSD には ports で net/tac_plus-libradius ってのがあるのですが、こいつは tac_plus.F5.0.0.alpha.tar.gz と言うソースコードを使っていて、このバージョンのソースコードは色々問題もあるんだけど、radius・LDAP、そして MySQL に対応している。なおかつ、FreeBSD/amc64 でも make が通るので非常に嬉しいのであります;-)。

書き出しの「x86_64 対応ってのが(あんまり)無いのねぇ。」ってのは外部のツールを使って管理する tacacs+ のソースコード。って意味です;-)。

net/tac_plus-libradius な tacacs+ は radius サーバと連携するように特化されているみたいなので、MySQL サーバに接続できる版の ports を作ってみました。以下の URL に転がしておきます。

http://www.icmpv6.org/Prog/FreeBSD_ports/ports-tac_plus-mysql-20100311.tgz

make install ができて、デーモンが起動したことは確認していますが、激しく使い込んではいないのでもしかしたら何かあるかもしれません。その場合はソースコードを見直してください(^^;;。

後、上にも書きましたが、そもそも元祖となる tacacs+ のコードは x86_64 に対応してないので随分と改修が必要です。Linux で make する時は随分苦労するでしょうねぇ。と、言うことで Linux 版のパッチも書いておきました。

http://www.icmpv6.org/Prog/Linux_x86_64-tac_plus.F5.0.0.alpha.patch.bz2

Centos5.4 ですけど、こちらも一応 make は通るようにて、起動までは確認しました。 Linux の x86_64 で tacacs+ と MySQL を連携したシステムを構築してみたい方、試してみてください。色々動かない場合はソースコードを見直して頂ければと思います(^^;;。

あ。見直して更新したソースコードは是非頂けると嬉しいです。宜しくお願いしますf(^^;;。

virtualbox-ose-3.1.2 を X11 無しで利用する。

FreeBSD の ports current を追いかけていると virtualbox が oes 3.1.2 にバージョンアップしました。でもってこれを make すると X11 有り/無し が選択できるようです。

デスクトップに FreeBSD がある場合には WITH_X11=true で make したほうが全然良いのであります。しかし、WITHOUT_X11=true で make するのはどんな時かなぁ?と、悩むのですが、おぉ。自宅のサーバは FreeBSD/amd64 で運用していて、こいつはサーバなので X11 無しだよー。

ってことは、FreeBSD で稼働しているサーバ上では WITHOUT_X11=true で make して virtualbox をバックグラウンドで起動すれば、Windows 2008 R2 が FreeBSD 上で動作するんでないかい?などと思ってしまうのであります。ハードウェアは一台なんだけど、サーバは FreeBSD と WindowsServer の両方が動作する自宅の環境ができあがるわけです;-)。

#どんな「自宅だっ!!??」って突っ込みは無し。と言うことで;-P。

と、言うことで早速トライしてみましょう。今回用意するものは以下になります。

・FreebSD/amd64 7.3-PRERELEASE X11 がインストールされているデスクトップ機
・FreeBSD/amd64 7.3-PRERELEASE もしくは FreeBSD/amd64 8.0-RELEASE がインストールされているサーバマシン。こちらは X11 が入っていません。

デスクトップ機では WITH_X11=true で emulators/virtualbox-ose を make してインストールします。サーバマシンでは WITHOUT_X11=true で emulators/virtualbox-ose をインストールします。準備は整いました;-)。

まず、デスクトップ機で VirtualBox を起動します。KDE4 の場合、[「K」メニュー] -> [システム] にあります。

過去に一回でも VirtualBox を起動していると $HOME/.VirtualBox/ と、言うディレクトリが存在しているのでこれを一旦 mv ~/.VirtualBox ~/.VirtualBox.save としてから VirtualBox を起動しましょう。

起動後は 新しいバーチャルマシンを作成します。今回はライセンスの関係で Windows7 Profesional x86 を利用しました。バーチャルマシンの「設定」はサーバマシンのハードウェアに合わせます。フロッピーとかサウンドカードが無い場合にはどんどんオフにしたり削除します。

で、Windows の CD イメージをマウントしてインストール作業。インストールができたらデスクトップ機側の作業は完了です。なお、Windows7 の設定は今のうちに色々やっておいたほうがラクチンです。僕の場合は、ネットワークの設定を行いました。ブリッジにしてネットワークは自宅 LAN 内の固定アドレスを指定しています。ネットマスクは 255.255.255.0 です。

・デスクトップ機 192.168.10.110
・サーバマシン 192.168.10.3
・Windows7(ブリッジ) 192.168.10.7

設定ができたら Windows7 をシャットダウンしましょう。あ。ちなみに僕のデスクトップ機とサーバマシンでは共に NIC が re0 なのでラクチンなのであります;-)。

続いてサーバ側で Windows7 を起動するための準備をします。まず、デスクトップ機の ~/.VirtualBox をサーバ側に持っていきます。次に、やはりデスクトップ機でインストールした Windows7 のディクスイメージもサーバ側に持っていきます。この時に、デスクトップの VirtualBox の環境とまるっきり同じにします。

準備ができたらサーバ側で早速 Windows7 を起動してみましょう;-)。起動するためにちゃんと認識しているか確認します。なお、 VirtualBox の起動は一般ユーザ権限で問題ありません。

$ VBoxManage list vms
VirtualBox Command Line Management Interface Version 3.1.2_OSE
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.
"Windows7 Profetional" {0ee9ff0d-8885-4e30-801d-fbc255515d6c}

認識したみたいですね。続いて以下のコマンドはどうでしょう?

$ VBoxManage showvminfo "Windows7 Profetional"
    :

たくさん出力されるので詳細は割愛しますが、Windows7 Profetional と VirtualBox の詳細が表示されます。他にも VBoxManage には色々なオプションがあるので -h で確認してみてください。

$ VBoxManage modifyvm --audio none

などすると オーディオデバイスがオフにできたりします。

では次に Windows7 を VirtualBox 経由で起動してみることにしましょう。

$ VBoxHeadless -s "Windows7 Profetional"

ふふふ。コマンドラインから起動できました。ネットワークの設定はブリッジなので 192.168.10.7 に対して ping など打ってみます。Windows7 の起動時のログは以下に出力されます。確認すると良いでしょう。

cat $HOME/.VirtualBox/Machines/Windows7 Profetional/Logs/VBox.log

ログには色々な情報が出力されますが、その中に

00:00:46.408 Guest Log: VBoxService.exe: Started. Verbose level = 0

と、表示されたら Windows7 が起動したことになります。おーーっ。ぱちぱちぱち。

後は、rdc クライアントで接続っと;-)。

で、試したのですが、ポートは開いているみたいですが、黒い画面で接続できませんでした。orz。RDC プロトコルはライセンスの問題があると言うのだけどねぇ。その影響で画面が表示されないのかしらねぇ・・。

ちなみに、デスクトップ機で VirtualBox を利用せず VBoxHeadless コマンドで Windows7 を起動した場合はちゃんと RDC プロトコルで接続できるんですけどねぇ。X11 が無いと接続できないのはちょっとおかしくね?って感じなのです・・。

しゃーないので、デスクトップ機で再度 Windows7 を起動して VNC サーバをインストールします。再起動後に VNC サーバが有効になっていることを確認したらシャットダウンで再度、サーバマシンに持っていってトライっ!!

って感じでやれば、X11 が無い環境でも Windows7 がブートするのであります。今回はデスクトップ機側で設定した VirtualBox の設定をそのままづるづると引きずるすごい簡単な方法です。環境を準備するのが大変なことがあるかと思います。その場合は VBoxManage をコマンドラインから実行することになるので、ドキュメントとか読んで頑張ることになるのでありますぁ;-)。


あ。Windows のアクティベーションの事には触れていませんが、ディスクイメージがあってあちこちでバーチャルな環境を起動した場合、僕はどうなるか知りません。ライセンスはちゃんと守るのが良いかと思われます。私の場合、これは「検証」です;-)。


更に、あぁ。っ!!。 Windows7 の止め方を書いてなかったですね。以下のコマンドで停止します。オプションは色々あるので好きなのを選んでください。

$ VBoxManage controlvm "Windows7 Profetional" poweroff

かしこ。

libpango が core dump するフォント。

この間、ちょっと前の「Thunderbird-3.0 を FreeBSD/amd64 で。」のエントリーのところで FreeBSD/amd64 上の Thunderbird も Firefox もすぐに core dump して使い物にならない。でもって -g したら libpango がどうもおかしい。と言うのを書きました。

このエントリーに添付してある URL にその結末が載っていましたね。要は pango にとあるフォントを食わせると core dump するものがあるので、そのフォントを fontpath から削除すると良いよ。とのことらしいです。

リンク先のスレッドの内容では xlsfonts コマンドで core dump するフォントを特定すると良いよ。と書かれているのですが、日本語フォントの場合、あんまり役に立たないですね。でもって GNOME や KDE を使っている人は特にフォント名が日本語で表示されるのですから。なので、日本語環境の場合は fc-list(1) を使うことにします。

fc-list コマンドで表示されたフォント名を pango-view と言うコマンドに食わせてあげます。その時に pango-view が core dump するとそのフォントは pango で扱えないフォントになるので /usr/local/lib/X11/fonts/ から削除する必要があります。

僕の環境では fc-list | sort -u | wc -l したら 434 個のフォントが利用可能な状態になっていました。うひひ。/usr/local/lib/X11/fonts/ で du -sk したら 1274754 と表示されたのでフォントだけで 1.2GByte のようです;-)。

さてと。fc-list の結果を pango-view に食わせるコマンドは以下でどうでしょう。

$ fc-list | sort -u | awk -F, '{print "echo \"" $1 "\"; ¥
pango-view --font=\"" $1 "\" -t 'TEST,test,テスト' -q"}' > fontcheck.sh
$ /bin/sh ./fontcheck.sh

一行目は長いので改行していますが、一行で実行して fontcheck.sh と言うファイルを作成してください。その後、fontcheck.sh を実行すれば pango-view が動作します。 core dump するファイルがあった場合には以下のように出力されます。

ヒラギノ丸ゴ Pro
Segmentation fault (core dumped)
ヒラギノ丸ゴ ProN
Segmentation fault (core dumped)
ヒラギノ明朝 Pro
Segmentation fault (core dumped)

表示されたフォント名を持つファイルを /usr/local/lib/X11/fonts/ の中から削除して fc-cache -fv を実行すると core dump するフォントが無くなると思います。

ちなみに僕の環境では MacoSX から持ってきたヒラギノの丸ゴ・角ゴ・明朝の各フォントと平成の明朝・角ゴシックの計 16 個のフォントで core dump が発生したので、これらのフォントを削除しました。

削除した後に Thunderbird3 や Firefox35 を起動すると、おおぉぉっ!! 無事に起動できたのでありました。パチパチパチ。

と、言うことで Thunderbird3 や Firefox35 が libpango で core dump するなんてのはその人の環境によって全然変わる。と言うことですね。僕みたいに(と言い切って良いのか?)たくさんのフォントをインストールしている人はその確率が高くなるわけですが、google で検索しても日本国内でこの現象を書いているのは僕だけみたいなので、もしかして、僕だけが陥った現象なのから?

この問題はオイオイ pango 側で吸収されていくのかなぁ?今回は pango のバージョンは 1.26.2 で特にダウングレードもしていないです。

それにしても復活して良かったです;-)。

そー言えば、MacOSX にフォントをインストールするときに「このフォントは危険です」みたいにアラートが上がってインストールしないこともあるのですが、FreeBSD の場合 fc-cache を実行した時点では何もアラートは上がらないのでインストール前(それはつまり fc-cache コマンドを叩く前と言うことかな)には pango-view を実行するのが良いのかな?

FreeBSD の firefox の検索バーを日本語化。

FreeBSD で firefox を ports/packages からインストールすると中々日本語化ってできないですよね。

例えば ports から最新の firefox-3.5.6 をインストールして、続いて firefox35-i18n-3.5.6 をインストールすると日本語化されるんだけど、csup して portupgrade -arR すると firefox35-i18n-3.5.6 がインストールされているんだけど、英語表示されてしまう。

firefox-3.5.6 が最新になってから firefox35-i18n-3.5.6 をインストールしないと日本語表示してくれないんですな。ports で是非関連性を持たせていただきたい所ではあります。

さて。そんな FreeBSD の firefox ですが、URL バーの横に検索バーがあるのですが、ここに表示されているのは en なサイトがほとんどで日本語のサイトが一個も無い。ヤッテらんねーぜ。ケっ。て感じがするのですが・・。

kensaku-bar.png

日本語のサイトを表示することも可能です。と、言うか http://mozilla.jp/ からダウンロードできる Linux 版の firefox は検索バーのメニューは日本語サイトが登録されているのであります。

なので Linux 版 firefox から 各サイト用の XML ファイルを引っこ抜いて持ってくればそれでおしまい。って感じなのです。

あ。ちなみに上のキャプチャの bing と @nifty は拾ってきたのをインストールしています。


簡単に作業内容を書いておきます。

1. http://mozilla.jp/firefox/download/all/ から Linux 向け firefox の日本語版をダウンロードしてきます。

2. ダウンロードしたアーカイブを展開して firefox/searchplugins の中を覗きます。ここに日本語サイトの XML ファイルが入っています。

3. $HOME/.mozilla/firefox/乱数.default/searchplugins/ に XML ファイルをコピーしてあげます。

4. firefox を起動して検索バーに表示されているアイコンをクリックし「検索バーの管理」で編集します。

作業はこれだけですが、firefox のバージョンが上がるたんびにやる必要があるかもしれません。

ports/packages の firefox35-i18n-3.5.6 で吸収してくれれば良いのだけどねぇ。/usr/local/lib/firefox3/searchplugins がベースとなるディレクトリなんだけどこのディレクトリをまるまる置き換えてくれるようにしてくれれば・・。

するっていと、firefox35-i18n-3.5.6 は各国語の言語パックの他に Linux 版 firefox をダウンロードして来て、展開した後 firefox/searchplugins だけ抜き取って /usr/local/lib/firefox3/searchplugins と置き換える。って作業を追加する必要がありそうです。

できるのか?(アムロ風;-)

emacs-canna の ports。

ports CURRENT の editors/emacs が emacs-22.3 から emacs-23.1 になったようだけど、japanese/ の下の emacs は相変わらず emacs-22.3 ぽいので、以前このブログに掲載した emacs-canna の ports を作ってみました。

基本的には editors/emacs を japanese/ にコピーして Canna for GNU Emacs23 からパッチを取って来て make している感じです。なので、ベースは emacs-23.1 で、インストールされるものも editors/emacs とまるっきり一緒のはずです。

以下の URL に転がしておいたのでもしよろしければ使ってみてください。

http://www.icmpv6.org/Prog/FreeBSD_ports/ports-emacs-canna-20091221.tgz

この ports について、その筋の人に色々お聞きしてみたのですが、一番多い意見が send-pr すればぁ。ってヤツでしたが、正しくその通りだとは思います。が、まぁ、自分で使っている分にはどーでもよいかぁ。みたいな感じで(^^;;。

後、ports の editors/emacs に吸収してもらえばぁ。って意見も頂いて、これは確かに「なるほどー。」とか思いましたね。 options に WITH_CANNA=yes とか指定できれば、 Canna for GNU Emacs23 からパッチをダウンロードして来て適用する。ってので済むのでこれは確かにラクチンだし、emacs の ports があちこちにできなくて済むのでそれはそれで嬉しいのだけどねぇ・・。

とまぁ、そんなそんなことは思っても結局はどっかそのへんに転がしておいて終ってしまいそうな予感なんですけどね(^^;;。

cvsupd を faithd を使って IPv6 化。

以前は cvsup(net/cvsup-without-gui) を利用していたのだけど、最近は csup(1) を利用して ports とか STABLE の最新のソースを持ってくるようになった。

csup(1) は IPv6 に対応しているのだけど、 cvsupd(net/cvsup-mirror) が IPv6 に対応していないくて、IPv4 でしか応えてくれないので、csup の一発目は必ずエラーになる。

あ。僕は自宅のサーバに cvsupd を起動しているので cvsup3.jp.freebsd.org とかから定期的に持ってきているので、自宅の FreeBSD は自宅で起動している cvsupd なサーバから持ってきています。cvsup.icmpv6.org がそれになるわけですけども;-)。

で、自宅のネットワークには IPv6 があってウェブとかメールサーバは IPv6 に対応しているのに cvsupd が IPv6 に対応していないのは非常に悲しいので、今回 cvsupd を IPv6 に対応させてみたいと思います。ただ、net/cvsup-mirror のソースコードを改変して IPv6 対応するのは非常に大変なので、今回はネットワーク的に IPv6 への到達性を確保します。IPv6->IPv4 トランスレータ機能を利用します。お題目は以下です;-)。

faith0 インターフェースと faithd を利用して cvsupd を IPv6 対応にしてみましょう。

まぁ、まずは何はなくとも man faithd と叩いてみましょう。そこから始まりますが、man を読んで解った事は、アドレスプレフィックス部分の /96 と IPv4 アドレス部分の /32 に分かれていて、IPv4 部分で IPv4 サーバを特定してそこにパケットを投げますよ。みたいな感じです。

では早速設定を見ていきましょう。今回のネットワーク構成はこんな感じにしてみました。

ipv6_faith.png

以下にちょっと箇条書きにしてみます。

  • 今回ターゲットとなる cvsupd は IPv4/IPv6 のデュアルスタックなサーバ上で動作します。

  • IPv4 ルータは PPPoE などでグローバルあドレスが付きますがサーバは NAT されています。ポート 5999 は cvsupd サーバにポートフォワードされています。

  • IPv6 ルータは外部のグローバル IPv6 ネットワークに接続しています。

  • cvsupd へは rtadvd により IPv6 のグローバルアドレスを払い出しています。

  • IPv4 は 192.168.0/24 です。

  • IPv6 は 2001:200:161:1400::/64 です。

  • トランスレータ用のプレフィックスは 2001:200:161:1400:5999::/96 です。

さてと。これだけでほぼ準備が整いました;-)。

まず、cvsupd サーバでの設定ですが、 faith0 インターフェースに飲み込まれる IPv6 プレフィックスを route(8) で設定します。その後、faithd を起動して特定のポートを faith0 に飲み込むようにします。

起動スクリプトは以下になります。rcNG ではなくて申しわけないですが(^^;;。

#!/bin/sh                                                                              
#                                                                                      
# faithd start                                                                         
#                                                                                      
HOME=/                                                                                 
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin/:/usr/local/bin
export HOME PATH
faith_ipv6='2001:200:161:1400:5999::' faith_ipv6_prefix='96'
case $1 in 'start' ) if [ -f /usr/sbin/faithd ]; then sysctl -w net.inet6.ip6.accept_rtadv=0 sysctl -w net.inet6.ip6.forwarding=1 sysctl -w net.inet6.ip6.keepfaith=1 ifconfig faith0 create ifconfig faith0 up route add -inet6 $faith_ipv6 -prefixlen $faith_ipv6_prefix ::1 route change -inet6 $faith_ipv6 -prefixlen $faith_ipv6_prefix -ifp faith0
/usr/sbin/faithd 5999 fi echo 'faithd 5999 Start.' ;; 'stop' ) killall faithd
route delete -inet6 $faith_ipv6 -prefixlen $faith_ipv6_prefix sysctl -w net.inet6.ip6.accept_rtadv=0 sysctl -w net.inet6.ip6.forwarding=0 sysctl -w net.inet6.ip6.keepfaith=0
ifconfig faith0 down ifconfig faith0 destroy
echo 'faithd Stop.' ;; 'restart' ) /usr/local/etc/rc.d/faithd stop /usr/local/etc/rc.d/faithd start ;; * ) echo "usage : faithd {start|stop|restart}" ;; esac

まず最初に sysctl で必要な mib のステータスを変更します。 ifconfig faith0 up した後に route add してから route change します。この時、プレフィックスは /96 です。残りの /32 は IPv4 アドレスになります。

今回の cvsupd サーバは 192.168.1.2 が付いているので、それを IPv6 に直すと以下になります。

2001:200:161:1400:5999::c0a8:102

この IPv6 アドレスを DNS に登録します。すると、csup コマンドを叩いた時に supfile の *default host 行に FQDN を書けば IPv6 でアクセスが可能になります。

と、思いきや・・。外部の FreeBSD からだとアクセスできないですね。 IPv6 ルータは 2001:200:161:1400::/64 ではルーテイングが設定してあるのですが、2001:200:161:1400:5999::/96 のルーティングができていないので IPv6 ルータに対して route add コマンドで 2001:200:161:1400:5999::/96 を cvsupd が起動しているサーバのリンクローカルアドレスに向けて上げます。

route add -net -inet6 2001:200:161:1400:5999:: -prefixlen 96 fe80::2ae:90ff:fe11:a85%bge0

これで設定は全て完了です。外部の IPv6 機器から接続できるか確認してみましょう。


トラブルシューティングですが、まず、cvsupd サーバのローカルホストから telnet cvsup.icmpv6.org 5999 などと FQDN で指定し cvsupd に接続できるか確認してみましょう。

そこで問題があれば、指定したプレフィックスが /96 になっているか、IPv4->IPv6 の変換時の IP アドレスや DNS の設定、faithd 、sysctl mib などを見直してみましょう。

外部から接続ができない場合、DNS のアドレスの設定の確認と、IPv6 ルータでの /96 のルーティングの設定を確認しょう。


今回は faith0 と faithd の設定を見てきましたが、これらは tcp しか通過できません。 udp には対応していないんですね。そもそも faithd は KAME のリファレンスコードなので「tcp は実装するけど、他のプロトコルは自分で書いてね。」的要素が強いのかな?などと、僕個人的には思っています。

tcp しか通らないので、当然 ping や traceroute も通りません。tcping は IPv4 にしか対応していないし・・。とわいえ、ume さん が tcping の IPv6 対応パッチを書いてくださったのでそれを適用した tcping を利用すると良いかと思われます。以下の URL にパッチを転がしておきます;-)。ports の net/tcping で利用してください。

http://icmpv6.org/Prog/FreeBSD_ports/tcping-ipv6.diff


さてと。これで cvsupd サーバは IPv6 Ready になりました。このサーバ上で IPv4 にしか対応していない色々なデーモンを起動すればなんでも IPv6 Ready になります。では、IPv4 にしか対応していないデーモンは一体何が?とハタと考えた場合、古いソースコード(バージョン)で運用しているデーモンとか位しか思い浮かばなかったのですが、DSS(net/DarwinStreamingServer) なんかは IPv4 にしか対応してないので、こう言ったものを IPv6 Ready にすることが可能です。その場合、必要なポートを指定して faithd を起動する必要があります。DSS であれば以下のように感じでしょうか。上記のスクリプトに加筆します。

/usr/sbin/faithd 554
/usr/sbin/faithd 5000
/usr/sbin/faithd 5100

などなど、必要そうなポートにたいして faithd を起動するとそのポートに来たパケットは faith0 に突っ込んでくれるようになります;-)。

で、ここでまた、ハタと考えた・・。Apple 謹製の QiuckTime Player は IPv6 に対応しているのかぁ? あぁ。multimedia/mplayer で試せば良いかぁ。みたいな(^^;;。


大体こんな感じで faith0 と faithd を使えば比較的楽に楽しく利用できるかなぁ。と思った次第です。本来であれば IPv6->IPv4 トランスレータとして、dns/totd と組み合わせて使う大掛かりなルータってイメージがあるんだけど、ローカルホストのために利用する faith0 と faithd というのもまたアリかなぁ。と言う感じがあるのであります;-)。

Windows7 と FreeBSD 7.2-STABLE の同居。

遅まきながら、我が家にも Windows7 がやってきました。PC で地デジが見たいよー。と思っても WindowsXP x64 では不可能なので、Windows7 の x64 にしてみた。と言うのが実情ですが。でもって、今回は、まず NotePC にインストールしてみました。 DELL の X1 と言うもうずいぶんと古い PC です。

CPU は PentiumM の 900MHz なので、Starter にしようか Professional にしようか悩んだのですが、ちょっと Professional で様子を見てみようと言うことにしました。なのでアクティベーションはなし。重かったら Starter に変更かなぁ。と言う感じです。あぁ。PentiumM は x86 Only です;-)。

で、インストールですが、今まで WindowsXP が入っていたパーティション(FAT32)をぶっつぶして NTFS で Windows7 をインストールしますが、いとも簡単に終わり、その段階では画面のドライバ(i915だと思うんだけどねぇ)が見あたらなかったのだけど、 update したら画面のドライバがインストールされた。後はサウンドチップ(FreeBSD 的に言うと SigmaTel STAC9752/53 AC97 Codec)のドライバだけど、これは DELL のサイトから Windows Vista 32bit ドライバを持ってきたら動作したので全然問題はありませんでした。

まぁ、Windows はどうせ検証のためだけ(の予定)でインストールしたのでここまで。この後 FreeBSD をブートしようとするんだけど、これがまた大変だったのでありました・・。

google などで検索すると、色々なサイトで bcdedit で情報書き込んでブートしようねぇ。と書かれているのですが Windows Vista 版のがほとんどなのねぇ。僕の Windows7 では以下のように打たないと FreeBSD は起動しませんでした。

c:¥ bcdedit /create /d "FreeBSD/i386" /application  bootsector
c:¥ bcdedit /set {ID} device partition=c:
c:¥ bcdedit /set {ID} path ¥freebsd.pbr
c:¥ bcdedit /displayorder {ID} /addfirst

{ID} ってのは /create したときに表示されるやつを指定します。

後、Windows Vista の bcdedit の場合って device boot って指定しようね。って、検索すると色々なサイトで書かれているのだけど Windows7 の場合、これではダメで、ブートセレクトで FreeBSD を選択した後に 0xc000000f なエラーコードで FreeBSD が起動してくれなかったりする。Windows7 の bcdedit では device partition=c: と指定するのが正しいみたいです。

bcdedit をオプションなしで実行すると起動設定が見えるので、Windows のブート情報と一緒にしてあげれば良いかなー。

ちなみに freebsd.pbr は /boot/boot1 を持ってくるんだけど、これまた当たり前で FreeBSD/i386 や FreeBSD/amd64 のどっちから持ってきても大丈夫です。md5 のチェックサムはどっちも一緒でした。手元に FreeBSD/i386 しかなくて、起動したいのは FreeBSD/amd64 ってときでも FreeBSD/i368 から /boot/boot1 を持ってきて c:¥freebsd.pbr にリネームして置けば大丈夫です。

で、FreeBSD はブートするんだけど、考えてみると Windows7 てパーティション二つ利用するのでブートメニューから FreeBSD が起動すると /etc/fstab の情報が一個ずれてしまうので Windows7 をインストールする前に FreeBSD の /etc/fstab は編集しておいたほうがラクチンかも;-)。まぁ、ufs:ad0s3a とかしてブートしてから /etc/fstab を直しても良いとは思うけど;-)。

今までは /dev/ad0s1 が Windows で /dev/ad0s2a が FreeBSD だった場合、 Windows7 をインストールした後は /dev/ad0s3a が FreeBSD の root になります。

とまぁ、今回は一番はまったのが bcdedit かなぁ。 これが一番時間がかかった・・。ふぅ。

と、言うことで NotePC での検証環境ができたので明日はメインで利用しているデスクトップに Windows7 の検証環境でも作るかなぁ。


Thunderbird-3.0 を FreeBSD/amd64 で。

ちょっと前に正式にリリースされた Thunderbird-3.0 ですが、今日 ports を csup したら登場したみたいなので早速利用してみました。

Thunderbird-2.0 と微妙に違うのですが、メールボツクスの並び方が MacOSX の Mail.App みたいに、受信ボックスごととか、ゴミ箱ごとに並ぶようになったのでそれはそれで嬉しいなぁ。と思い、WindowsXP と会社の FreeBSD/i386 7.2-STABLE、後自宅の FreeBSD/i386 7.2-STABLE と FreeBSD/amd64 7.2-STABLE にインストールしました。

僕の使い方としては、Thunderbird を imap4 で利用して spam フィルタとして利用した後、emacs+mew で POP して来ると言う感じなたんだけどねぇ。けど、その横では MacOSX の Mail.App からやはり imap4 でアクセスする。と言う結構複雑な状況;-)。

さて。Thunderbird-3.0 ですが FreeBSD/i386 ではちゃんと動くんだけど FreeBSD/amd64 ではcore dump して動作しない。よくよく調べてみると Firefox35 も Flash があるとやはり core dump して動作しない。

flashplugin 周りの ports を入れたり消したり devel にたりしたけど、やはり core dump する・・。

後、驚いたのが Thunderbird-3.0 は Firefox のプラグインも参照するのね。考えてみると /usr/local/lib/npapi/linux-flashplugin なんてディレクトリはないさー。/usr/local/lib/npapi/linux-f8-flashplugin ならあるんだけどね。大丈夫なのか・・。環境をもう一度見直す必要があるのかな?

で、結局 plugin 周りをいじったのだけど、だめだった。相変わらず core dump の嵐。ゲームセンター嵐。なんのこっちゃ;-P。

Thunderbird とか Firefox には -g と言うgdb 経由の起動オプシンがあるのですが、それで確認してみると以下のメッセージが・・。

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x806b020b0 (LWP 100220)]
0x000000080358df8b in pango_ot_tag_from_script () from /usr/local/lib/libpangoft2-1.0.so.0
(gdb)

ふむー。pango 辺りで起きているのね・・。インストールされているバージョンは pango-1.26.1 。これを再インストールしたけど、治らない・・。

で、google で探してみたら以下の URL を発見・・。orz

http://forums.freebsd.org/showthread.php?t=8859

よくよく読んでみると pango を 1.24.5 にすれば動作するらしい。かなしぃなぁ・・。

僕は gnome ではなく KDE4 を利用しているので pango を入れ替えた時のダメージが大きいのでどうしようか悩み中。あ、どんなダメージがあるのか想像ついてないです。もしかしたら全然大丈夫なのかもしれませんけど。

FreeBSD/amd64 は自宅で利用しているデスクトップ機でメモリ 8GByte 積んだマシンなのよ。最近は Mac でメール見たりするので無理して Thunderbird と Firefox 使わなくても良いかなぁ・・。KDE4 には konqueror があるしなぁ・・。

それにしてもまいった。pango のバージョン落とすか、もう少し待って Thunderbird と Firefox が対応してくれるのを待つかですね。

8.0-STABLE の USB ブート。

8.0-RELEASE がリリースされたみたいなので、自宅の PC にインストールしてみました。色々新しいデバイスドライバが使えるみたい。ってのもあるんですけどね.

最近は MacOSX をメインで使うようになって本当に FreeBSD へのモチベーションは下がりつつあるのですが、けど、おっかけないと・・。感があるわけです。

とはいいつつ、普段利用しているデスクトップとかサーバにはまだまだインストールする勇気が無いので、今は「キッチンのパソコン」と利用している EeePC にインストールしてみました。以前にもこのブログに書いているのですが、久しぶりに引っ張り出してみました;-)。

で、EeePC に USB 経由で 2.5 インチ HDD をつけて、その HDD には 7.2-STABLE が入っているわけだけど、これを cvsup で 8.0-STABLE にしたわけです。

自分でカーネル config を作成して、make installkernel して、さてと 8.0-STABLE ブートだ。と思ったら・・。あんれまぁ。USB に接続した HDD からはブートしませんでした・・。

手元に 8.0-STABLE が動作している PC が他に無いのでなんとも言えないのですが、カーネルのブート時に USB デバイスを一切認識してくれない状態。カーネルロードモジュールでは usb.ko とか umass.ko をロードしているのだけど、ブート時には USB デバイスとかチップを一切認識しないので、USB に接続した 2.5 インチ HDD、/dev/da0s1a になるわけですが、これが見えない。

なので、vfs.root.mountfrom 以前の問題だぁ・・。

http://www.mail-archive.com/freebsd-stable@freebsd.org/msg105670.html

この辺りのスレッドを見ると USB 機器からブートしないぜい。ってのがあるんだけど、これ、僕の現象とはちょっと違うよなぁ・・。

どうして USB デバイスが一切認識されないのだろう・・。まだまだ格闘は続くのであります;-)。

kde-4.3.0 がやって来た。

FreeBSD の ports-current を csup したら KDE4 が 4.3.0 になりましたなぁ。後、QT4 が 4.5.2 に。

実際に使用してみた感じを書いてみたいと思います。

まず、ports からのインストールですが、portupgrade したときに phonon 回りでバタバタするので /usr/ports/UPDATING を参考にして問題点をクリアにする所からはじめましょう。

そして、実際に qt4 と kde4 の make とインストールが始まります。まず、qmake ですが、これは qt4 と kde4 を make するときに利用されます。でもってこれは SMP に対応しているので qt4 や kde4 を make する時に c++ が CPU の数だけ起動します。これはすごい。KDE4 フルパッケージの make 時間は make buildworld より遙かに長かったのですが、随分と時間短縮できます。

例えば AthlonX2 では c++ が二つ、Atom330 では c++ が四つ起動して make を並列に行います。すばらしいですね。

無事にインストールが終わって、実際の使用感なのですが・・。

1. 等幅フォントが・・。
等幅フォントが結構ヒサンです。半角バイトの文字は全角バイトのスペースに表示されるので、"t a k a c h a n " と言う感じで表示されてしまいます。
konsole で任意のフォントを利用したい場合には $HOME/.kde4/share/apps/konsole/ の下にできるプロファイルに以下のように記述してみましょう。

[Appearance]
ColorScheme=BlackOnLightYellow
Font=MS ゴシック,10,-1,5,50,0,0,0,0,0
以下略

フォント名を直接書いてしまう。と言うことですね。これで好きなフォントが利用できるようになります。

2. konsole でもう一点。
例えば K メニューやパネル上のショートカットから konsole を起動した場合、もとのプロセスの子プロセス(と、言うかスレッド)として起動します。これは後で書く「入力のコピー」などで結構ウザかったり、親プロセスが落ちると全ての子プロセス(と、言うかスレッド)が凍り付くと言う結構ヒサンな状態になります。僕はこれを避けるために以下のシェルスクリプトを用意しました。

#!/bin/sh
cp $HOME/.konsolerc $HOME/.kde4/share/config/konsolerc /usr/local/kde4/bin/konsole

KDE4 の konsole は起動すると前回のサイズで起動してまう。それがイヤなので、毎回 80x24 のサイズで起動するように $HOME/.konsolerc を作成します。これは $HOME/.kde4/share/config/konsolerc を $HOME に .konsolerc としてコピーしただけです。その後で konsole をフルパスで実行すると新規のプロセスとして起動してくれるようになります。

3. konsole で二点目。
konsole を起動してタブを利用するとそのタブは親 konsole の子プロセス(何回も書きますがスレッドですね)として動作します。例えば一台のサーバに対して三個の端末をログインしたいとき、おのおのの端末で入力せずとも一個の端末で入力した内容、例えばユーザ名・パスワードを他の端末で入力したように見せかけることが可能です。[編集]->[入力をコピー]でキーボード入力の情報を他の konsole に送ることができます。ただ、konsole のタブ名は結構ヘボなので、どの konsole がどれなのかちっとも解らないんですね。

そんな時は上記のスクリプトを実行して、あるサーバにログインする端末は一個のプロセスとして起動し、タブを複数生成した後に「入力をコピー」の編集画面で [全てを選択]とか[すべて選択解除]ボタンを押せば OK です。

後、kde-4.2.4 の頃の konsole では C-s がフロー制御に取られてしまう。と言う事態が発生していました。[設定]->[現在のプロファイルを編集]で表示される画面の「詳細」タブの「Ctrl+S と Qtrl+Q によるフロー制御を有効にする」のチェックが外せなかったんですね。

しかし、kde-4.3.0 ではこのチェックが外せるようになりました。嬉しいですねぇ。ただ、僕の場合、以下のようにしないと外すことができませんでした。

% cd $HOME/.kde4/share/apps
% mv konsole konsole_

つまり、以前のバージョンで利用していた konsole の設定を一旦飛ばして、新たに設定しなおせばチェックを外すことができるようになるんですね。

4. マウスによるカットアンドペースト
これがまたヒサンなんです・・。ふつう、X 上では他のウィンドからクリックして保存した情報は他のウィンドにペーストできるはずなんですが、こいつがまともに動かない・・。非常に頭に来ると言うか、愕然としましたね。「全然使えねー・・。orz」って感じで。

で、色々やってみた所、パネルのシステムトレイにクリップボードツール(/usr/local/kde4/bin/klipper) が動作していて、こいつが悪さをしているようです。このプロセスを kill するとともにログイン時に起動しないようにすると ウィンド間のマウスによるカットアンドペーストが可能になります。ふぅ。良かったよぉ。

5. konqueror には konq-plugins。
konqueror を使う人はぜひとも /usr/ports/misc/konq-plugins をインストールすることをおすすめします。検索バーとか増えるし、「ウェブペー時を翻訳」なんてボタンも表示することができるようになります。他にもツールバーが色々表示できるようになります。

6. 安定したかもしんない。
以前のバージョンよりは安定して来ている感は強いです。パネルの設定で plasma が落ちなくなったし、(使いたいもの無いけど)ウィジェットの登録時に落ちるようなことは無くなったし。

一番使うのは結局のところ konsole が多いのでネタ的には konsole が多くなってしまいますかねぇ。まぁ、裏を返せば、他のアプリケーションなどは既に完成の域に達していたと言うことでしょうか。

実は僕は kde-4.2.4 を利用していた頃は KDE3 の konsole と skim をインストールしたままとしていました。 KDE4 の konsole が不安定な場合には KDE3 の konsole を利用する。と言う感じです。

また、KDE4 で scim-bridge-qt4 を利用していると、konsole がキー入力を受け付けない状態になる場合があり、それを回避するために skim を利用していました。ちなみに scim-bridge-qt4 でキー入力を受けつなくなるのは konsole の [設定]->[プロファイルを変更]した場合です。僕の場合 EUC-JP と UTF-8 のプロファイルを作っていました。ショートカットでプロファイルをタブに起動した時は問題無かったですが。これは KDE な ML で聞いた所、scim-1.4.7 に問題があるそうです。文字入力できなくなった場合は scim の全てを kill すると文字入力が復活します。

とまぁ、今回のバージョンアップですっかりと KDE3 関係を全て消して、KDE4 の環境に移行できたと言う感じでしょうか。

他にも何か気がついたことがあったら書いていきたいと思います。


apache で Proxy を作ってみた。(3)

まさか三回目を書くとは思いもしませんでした・・。apache ベースで作成したキャッシュ用 Proxy サーバですが、設定に問題があり無事に動作していたのは約一ヶ月半ほど・・。あまりにも情けないので、ちょっと書いておくことにします。

今回は第一回目のネタを参照する 必要があります。第二回目の掲載はこちら

さて、二回目にまとめたことで apache の Proxy サーバは mod_cache を利用してディスク上にキャッシュして行くことができたのだけど、運用してしばらくしたら error.log に以下のメッセージが出力されるようになってきた。しかも大量に・・。orz (長いので改行しています)

[warn] (2)No such file or directory: disk_cache: 
    rename tempfile to hdrsfile failed: 
    /data/httpd/cache/aptmp6ac9NS -> /data/httpd/cache/ASm@m/8xF@v/7XxKH/X8yCPfQ.header

よくよく調べてみると、サブディレクトリがもう作れない状態になっているらしい。なので、これ以上はディクス上にデータをキャッシュをできない状態になっている。と言うメッセージが延々と error.log に出力されている状態。

/data/httpd/cache の下にディレクトリが 32,000 個できている。と言う状態なんですねー。Linux では一つのディレクトリの下には 32,000 個しかディレクトリが作れないそうです。 /usr/include/linux/ext3_fs.h の以下の行がまさしくそれ。

#define EXT3_LINK_MAX           32000

でもって 32,000 個のサブディレクトリのあるディレクトリで mkdir すると Too many links. mkdir: cannot create directorys と言われて怒られる。うひー。

と、言うことで、僕はこの上限 32,000 と言う値を知らなかったのでありました。

愕然としつつ httpd.conf の設定を見直します。第一回目に書いた設定では以下のように記述していました。抜粋です。

<IfModule mod_disk_cache.c>
    :
    CacheDirLevels          3
    CacheDirLength          5
</IfModule>

ディレクトリの深さは三階層、ディレクトリの文字列は五文字。この「五文字」と言うのは簡単に 32,000 を超えてしまうのですね。

ディレクトリにランダムに利用される文字は A-Z,a-z,0-9 と一部の特殊文字で約 80 個位と想定した場合、五文字と言うのは 80^5 通りあるので、こらー簡単に 32,000 個を超えてしまいます。 32,000 個以内に抑えるのは CacheDirLength は 2 を指定しなければならない。3 を指定したとしても 80*80*80=512,000 個のディレクトリが作成されることになります。あれー・・。

/data/httpd/cache の下には 80*80=6,400 個にしてその下の階層を深くしたほうが良いと言うことなんですねぇ・・。

ディレクトリを自動生成してくれるアプリケーションの場合、ディレクトリ長は二文字にしないと簡単に 32,000 個があふれてしまう。今後はこれを頭の片隅に入れておきたいと思います。

ATI Radeon HD 4350 にしてみました。

普段常用している PC のグラフィックカードを交換してみました。

今までは NVIDIA の GeForce 7300 LE で 512MB のやつを付けていた。新しく購入したヤツもメモリ自体は 512MB で一緒。そして Xorg の radiohhd ドライバでサクッと動くべ。とか思ったのでありました。秋葉原の T-ZONE で 2,980yen。 ずいぶん安いよねぇ。って感じで、ちょっと幸せな気分です;-)。

まずは PC にセットアップして WindowsXP でブート。ドライバをインストールして認識させた後、FFXIBench3 で動作確認。

僕は PC と言うのは「OS を走らせるもの。」と言う認識でいるので、ゲームには全く興味は無いのだけど、自分の買ったパーツの性能は知りたいのでベンチマークしてみました。

GeForce 7300 LE
    Low   6926
    Hight 4005
Radeon HD 4350
    Low   7345
    Hight 4545

と、言うことで本当にちょっとだけ Radeon HD 4350 のほうが速いと言う結果が出ました。

さてと。以上が Windows での結果。ここからは FreeBSD で Xorg を利用したときのことを書いてみたいと思います;-)。まず始めに言っておきますが、depth 32bpp は出ませんでした・・。x11-drivers/xf86-video-radeonhd や x11-drivers/xf86-video-radeonhd-devel のどちらを使っても 32bpp な色はサポートしていないみたいです。あ。ちなみに xorg.conf は必要無いよねぇー。Xorg -configure でできたものでじゅーぶんに動作します;-)。

最近、ブログの写真の色などを気にしていたのだけど、32bpp がでないのはちょっと悲しいですねぇ。しかし、GeForce 7300 LE よりは発色は良いかなぁ。と言う気はします。まぁ、基本的に MacOSX と比べてはいけない。と言うのは解っているのですけどねぇ・・。

今回の検証において、僕は Xorg のドライバは x11-drivers/xf86-video-radeonhd-devel を利用しました。

購入したグラフィックカードは D-sub 15pin・DVI-D・HDMI のコネクタが付いていて、もう S 端子なんてのは無いんですねぇ。

グラフィックカードを接続して FreeBSD をブートして驚いたのが、サウンドカード(ドライバ)として HDMI が認識されたこと。

% cat /dev/sndstat
pcm0:  at cad 0 nid 1 on hdac0 kld snd_hda [MPSAFE] (1p:1v/0r:0v channels)
pcm1:  at cad 0 nid 1 on hdac1 kld snd_hda [MPSAFE] (1p:1v/1r:1v channels duplex default)
pcm2:  at cad 0 nid 1 on hdac1 kld snd_hda [MPSAFE] (1p:1v/1r:1v channels duplex)
pcm3:  at cad 0 nid 1 on hdac1 kld snd_hda [MPSAFE] (1p:1v/0r:0v channels)


pcm0 で グラフィックカード上の HDMI のサウンドカードが認識されたおかげで、Realtek のサウンドカードからスピーカに接続していたのに音が出なくなってしまった。ある意味すばらしーーー。って感じがします。FreeBSD のサウンドドライバの進歩に驚くのでありました。

けど、音が出ないのでまずは KDE4 の設定を見るわけです。すると、システムセッティングのマルチメディアを開くと優先できるデバイスの設定があるみたいです。クリックすると大きくなります。

しかし、これをやってもダメ、つまり音は出ないのでありました。しくしく。そんなこんなで色々調べるのですが、FreeBSD 側でちゃんと対応していのには驚きました(@_o)。sysctl に hw.snd.default_unit と言うmib があって、これが優先するサウンドデバイスを指定できるらしいのですね。pcmX の "X" の数値を hw.snd.default_unit mib に指定してあげるとそのデバイスを優先的に使う。と言うものです。

ちなみに、pcm の認識の順序は PCI バスに準じています。たくさんの NIC を刺した時に認識される順番が決定するのと同じ原理。

僕の環境ではグラフィックカードがサウンドカード(チップ)より先に認識したので HDMI が pcm0 だったので /etc/sysctl.conf に hw.snd.default_unit=1 と書いたら音が出るようになりました。おーー。すんばらしーー。

僕の使っているディスプレーは H223HQbmid なんだけど、こいつには背面にチャチぃスピーカーがついていて HDMI で接続するとそこから音が出るらしいのね。けど、僕は PC には BOSE のスピーカーを付けているのでそこから音が出て欲しいので、サウンドデバイスの順序は非常に重要なのであります。

今後はどんどんこうなるのかなぁ。グラフィックカードを変えたら Xorg のドライバーも重要だけど、音も重要だねぇ。みたいな。

今回はなかなか良い勉強をさせてもらったのでありました。2,980yen で「グラフィックカード」を買ったつもりだったんだけど、メインはサウンドドライバになってしまったかな?(^^;;。

emulators/virtualbox。

FreeBSD の ports に emulators/virtualbox と言うがあるのを発見。すかさず make してインストールしてみた感想を。

最近 SUN から 3.0 がリリースされた のだけど ports でインストールされるのは virtualbox-2.2.51.r20457_3 と言うバージョン。

VirtualBox は X11 ツールキットに QT4 を使っているので、KDE4 を使っている僕にとっては非常に嬉しい。起動後の見栄えが KDE4 と一緒なので、それはもうまるて KDE-4.2.4 のアプリケーションの一部ではないのか? みたいな雰囲気になります;-)。

デスクトップのキャプチャはこんな感じです。クリックすると大きくなります。

KDE4 がインストールされている環境では ports から VirtualBox をインストールする分にはそんなに時間がかかりません。firefox を makeしてインストールするのと同じ位な感じかなぁ;-)。

インストールが終わったら /boot/modules/ にインストールされた vboxdrv.ko を kldload するだけ。KDE4 を利用している人は「K メニュー」から「アプリケーション」を表示させて「システム」を選択するとその中に存在しているのでクリックすれば起動します。

コンソールから起動する場合は /usr/local/lib/virtualbox/VirtualBox を起動します。珍しく /bin/ の下にないんだよねぇー。

起動後は他のバーチャル PC と特に変わりません。メモリや HDD を選択するなどしてバーチャル PC を作成して、起動(START)ボタンを押すだけ。非常に簡単です。

手元に WindowsXP の CD-ROM があったのでメディアを DVD ドライブに突っ込んで CD ブートしようとしたけど、なぜか VirtualBox は /dev/acd0 を見つけてくれなかった。ln -s /dev/acd0 /dev/cdrom としてもダメだったので FreeBSD の CD デバイスはダメなのかもしれない。

しょーがないので dd で iso イメージを作成して、それを VirtualBox に認識させたら無事に起動は完了。後は OS のインストールを待つのみとなったのでありました。

デバイス的に問題かもしれないのは CD-ROM デバイスだけで、後は特に問題もなく、NIC(bge0) も使えているし、Windows の起動音も出る(hdac0.pcm0) ので全然問題なく使える。と言う感じでしょうか。中々グーです。

まぁ、欲を言えば VMware Fusion(MacOSX 版だけど) みたいに、デスクトップ上に Windows のアプリが起動できるようになってくれたらなぁ。などと思うのですが、それはつまり X11 上に Windows アプリを表示する。と言うことになるのでちょっと無理かなぁ。と言う気はしないでもないです;-)。

しかし、それにしても FreeBSD の中で Windows が起動すると言うのもまたヘンな感じです。WindowsXP の VMware Workstation で FreeBSD は動かしたとこはあるんだけど、それよりも違和感があります。

なんだろなー。アンチエイリアスの利いたデスクトップ上でアンチエイリアスが利いていないアプリケーションを動かしているからかなぁ。

と、言うことであまりにサクサク動作しているのでちょつと驚いている状態なのであります;-)。

MacBook で FreeBSD をブート。

僕はちょっと古い目の MacBook を持っている。と書いた。しかし、これとは別にこの記事を読んで「うひー。MacPro ほすぃなぁ。」とか思い初めて、BootCamp に FreeBSD がインストールできれば買うのになぁ。などと漠然と思った次第です。

まぁ、いっちょ、MacBook に FreeBSD でもインストールしてみんべ。とか思い、現在 BootCamp パーティションにインストールされている Windows Server2003 EPE をぶっつぶせばええやん。って感じで作業をはじめたのでありました;-)。

ちなみに、僕は VMware Fusion のライセンスも持っていて、Windows7 なんかが動いているのだけど、やっぱりネーテブで動く速さにはかなわないよねぇ。ってどうしても思ってしまうのよねぇ・・。

さてと。まず、MacOSX 側でブートを FreeBSD の CD-ROM に指定してリブートします。今回利用した FreeBSD は FreeBSD/amd64 7.1-RELEASE。MacOSX がシャットダウンしてしばし待っていたら・・。

おーー。無事にブートできそうですねぇ。って感じがしてきました;-)。

IMG_5210_boot.JPG

これは中々よさそうですよ。この分だと MacPro を買っても FreeBSD がインストールできそうだ。などとルンルン気分(既に死語か?)で次に進むのであります;-)。

この後、日本語環境を選んでディスクを選択してーー。

FDISK の画面ですが。うひー・・。

IMG_5215_fdisk.JPG

今まで見たことが無いパーティション情報が表示されています・・。ad5p1,ad5p2,ad5p3。で、その間には "-" と言うのがあるし・・。なんじゃこらぁーーっ!!??

この段階で既に手が出ない。Windows Server2003 のパーティションが消えるのは、まぁ、許すとして、MacOSX のパーティションが消える、もしくは MacOSX がブートしてこないなんてことになったら目も当てられない状態なので、さっさと ESC ボタンを押してリブートして事なきを得たのでありました。

さてと。そもそも MacBook と MacOSX は フツーの PC で利用されている BIOS ではなく、EFI を利用しているためにブートする仕掛けがちょっと違う。と言う知識は一応持っていたのだけど、HDD の認識方法が違う。と言うことまでは知らなかったのでありました・・(^^;;。だって、初めての体験だしー。MacOSX はインストールの時、そんなん気にする必要無いしぃ・・(言い訳モード;-)。

IRC などで人に聞いてみると、gpart でホゲってあげないといけないみたいで、既に FDISK は過去のものとなっているようです。詳しいことは今後、色々調査せねば MacBooK にインストールできないぞぉ。などと思い今回の作業は終了したのでありました。

ちなみに FreeBSD をブートし始めたのが今日の 00:00 位から。その後二時間位色々遊んだんだけどねぇ・・。イヤハヤ。眠い・・(^^;;。

さてと。最後にですが、僕は MacOSX 側で BootCamp を利用して Windows Server2003 のパーティション(FAT32)を作成したのだけど、これって実は ad5p3 に入っていることが解りました。ふつー、FreeBSD をインストールする時には ad0s1 に Windows、ad0s2 に FreeBSD をインストールするのが一般的(だよねぇ?僕だけかな?)なんだけど、BootCamp の場合はディスクの後ろのほうの空いたスペースを BootCamp 用に使うことになるのですね。間違っても ad5p1 は消したらダメだよ。ってことですねー。

まぁ、人生、わからない時はアキラメが肝心です。でもって MacPro ですが、購入に関しては却下されそうな気配です・・。トホホ。

それにしてもこのネタ。つづく のかなぁ?(^^;;。

コンソールが表示されているデスィプレーの電源をオフ。

ここんとこ、自宅に設置してある FreeBSD のサーバが安定しない。と、言うのはこのブログにずっと書き続けていたのだけど、一日一回 cron で shutdown -r now するようにしたら安定してくれるようになったのでしばらくそれで運用しています。

でもって FreeBSD が安定しないぜ。ベイビー。と言うのはいよいよ FreeBSD-users-jp にも流れたですねぇ。これでいきなりメジャー化するかなぁ・・。

さてと。話の本題はここからで、自宅のサーバが安定しないのでキーボードとディスプレーはずっと付けっぱなしにして、イザと言うときにただちに対応できるようにしているのだけど、ディスプレーがまぶしすぎる・・。

X が動作しているデスクトップなどは省電力機能が働いてディスプレーの電源をスリープモードなどにしてくれるのだけど、X がインストールされていないサーバなどはそれができないので夜中でもこうこうと電気が付いていて login: プロンプトが表示されているのでした。

マメにディスプレーの電源切れば良いじゃんとは言いつつも、そんな根性ないし・・。と、言うことでコンソールでも、接続されたディスプレーの電源を落とす方法は無いものか調べてみようかと思ったのだけど、どうも google での検索文字列に何を指定して良いのかいまいち解らない・・。トホホ。

で IRC で人に聞いたら green_saver.ko と言うカーネルモジュールがあるらしい。と言うのを教えて頂きました。ありがとうございます。けど、使い方がいまいち解らないなー。ヒントとして green_saver.ko と言うを教えてもらったので、これで google を再度検索したら、おー。出てきました。

jman splash などして splash(4) を見れば良いわけねー。で、この man page によると kldload green_saver.ko とした後、 vidcontrol -t 120 とコマンドを打つと、何もキー入力がないと 120 秒後にちゃんとディスプレーの電源が切れる(正確に言うと省電力機能が働いたと言うのか?)ことが確認できました。

ちなみに起動時に設定することもできるようで /boot/lorder.conf には以下のように書きます。

green_saver_load="YES"

そして /etc/rc.conf には以下のように書くと起動時から情報を反映してくれることでしょう。

blanktime="120"
saver="green"

これで夜中でもディスプレーがランランと輝いている状態からは解放されそうです。ふぅ。

それにしても最近、省電力ネタ多いかな? ついこの間 CPU ネタ書いたばっかりだけどなぁ;-)。

デスクトップで利用している FreeBSD も acpiconf -s3 でスリープしてくれると良いのだけどねぇ・・。FreeBSD や NetBSD をデスクトップ(ラップトップ含む)として使うのヤメて、MacBook 使う人が多くなったとは良く聞くけど、サスペンドしない、もしくは X が表示してくれる色がショボイ(少ない)と言う意見が大勢を占めている。と言うのもまた事実か。

そー言う僕も MacBook 使いで写真の編集などは Mac でやっているけど;-)。

HP DL320G5p の怪。

HP の 1U サーバで ProLiant DL320 G5p と言うのが、今、手元に四台あるのだけど、こいつには現在、以下の OS がインストールされている。

・FreeBSD/amd64 6.4-RELEASE-p3
・FreeBSD/amd64 7.0-RELEASE-p9
・CentOS release 5.2 x86_64(後にバージョンアップして CentOS release 5.3 x86_64)
・Windows Server2003 EPE

でもって、このサーバの FreeBSD で見た場合のスペックはこんな感じ。

CPU: Intel(R) Xeon(R) CPU            3075  @ 2.66GHz (2660.01-MHz K8-class CPU)
  Origin = "GenuineIntel"  Id = 0x6fb  Stepping = 11
  Features=0xbfebfbff
  Features2=0xe3fd
  AMD Features=0x20000800
  AMD Features2=0x1
  Cores per package: 2
usable memory = 2132668416 (2033 MB)
avail memory  = 2058006528 (1962 MB)
ACPI APIC Table: 
FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs
 cpu0 (BSP): APIC ID:  0
 cpu1 (AP): APIC ID:  1

今回は CPU のお話です。

今まで僕個人的には、これらのサーバ群は FreeBSD で利用していたので特には気にしていなかったことがあります。それは CPU クロック。FreeBSD の場合 powerd を動作させるといとも簡単に SpeedStep(正確には EIST・Enhanced Intel SpeedStep Technologyですね) が動き出すので sysctl で後は見るだけ。って感じだった。

FreeBSD で見た CPU クロック、今はこんな感じ。

dev.cpu.0.freq: 330
dev.cpu.0.freq_levels: 2647/-1 2316/-1 1985/-1 1654/-1 1323/-1 992/-1 661/-1 330/-1

でもって CeotOS でも SpeedStep 動かないかなぁ?とか思い格闘したのだけど、ダメみたいねぇ。
CeotOS 5.2 ではダメで 5.3 なら OK よ。ってのをみつけて yum upgrade して試したのだけど・・。

# modprobe /lib/modules/2.6.18-128.1.10.el5/kernel/drivers/cpufreq/cpufreq_conservative.ko
# modprobe /lib/modules/2.6.18-128.1.10.el5/kernel/drivers/cpufreq/cpufreq_ondemand.ko
# modprobe /lib/modules/2.6.18-128.1.10.el5/kernel/drivers/cpufreq/cpufreq_powersave.ko
# modprobe /lib/modules/2.6.18-128.1.10.el5/kernel/drivers/cpufreq/cpufreq_stats.ko
# modprobe /lib/modules/2.6.18-128.1.10.el5/kernel/drivers/cpufreq/freq_table.ko
# modprobe /lib/modules/2.6.18-128.1.10.el5/kernel/arch/x86_64/kernel/cpufreq/acpi-cpufreq.ko
# modprobe /lib/modules/2.6.18-128.1.10.el5/kernel/arch/x86_64/kernel/cpufreq/powernow-k8.ko
# modprobe /lib/modules/2.6.18-128.1.10.el5/kernel/arch/x86_64/kernel/cpufreq/speedstep-centrino.ko

関連しそうな全てのモジュールをロードしてみたけど FATAL: Module hoge not found. だそうです・・。Linux のこの辺りのこと、僕はあんまり良く解らないのだけどもね。

でもって cpufreq-selector と言うのは無いので cpufreq-info と言うのを実行してみたら以下の通り。

# cpufreq-info
cpufrequtils 005: cpufreq-info (C) Dominik Brodowski 2004-2006
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
  no or unknown cpufreq driver is active on this CPU
analyzing CPU 1:
  no or unknown cpufreq driver is active on this CPU

なんか「Xeon には対応してねーんじゃねぇの?」とか思えて来た段階で Linux についてはしゅーりょー。だって動かないんだもの。ちなみにカーネルは 2.6.18-128.1.10.el5 の x86_64 です。CeontOS release 5.3。

続いて Windows Server2003 EPE エディション行ってみましょう。どうすれば WindowsServer で SpeedStep が有効になるんだ?とか思ったのですが、考えてみると、僕は普段から FreeBSD と AMD のプロセッサしか使ってないので Intel の Xeon なんざ今まで気にしたことも無かった。

で、ググってみたら以下の URL を発見。

http://www.intel.com/cd/channel/reseller/asmo-na/eng/203838.htm

コントロールパネルの電源管理で「ポータブル/ラップトップ」を選択すると SpeedStep が有効になるのかと思いきや全然ダメ。BIOS の設定を見ても EIST の設定なんざありゃしない。困りはてて HP のサポートに電話して聞いたら、ドキュメント番号 232907191 の P.21 を参照してみてくれ。とのことでこのドキュメントを探そうとしたけど、全然みつかんないじゃーん。と、言うことでこれまたしゅーりょー。

ちなみに Windows Server2003 EPE 上で CPU-Z を起動したキャプチャをアップしておきます。

WinServ2003.png

Core Speed って所が 0.3MHz 程度なら変動するんですが、大きく、上記の FreeBSD のようには可変にはなりません。でもって大体 2GHz のちょっと下辺りでふらついている。って感じでしょうか。

あ、あれーー?? DL320G5p って Xeon 3075 で MAX が 2.66GHz の CPU なんだけどっ!! それが 2GHz も出ていないってどーいうことーーっ!!??

さてと。そろそろ結論フェーズに持っていくことにしましょう。

CeontOS も Windows Server2003 も本当に地球環境に優しくない OS ですねぇ。FreeBSD なら OS をインストールして再起動した直後(正確には powerd を起動した直後だけど;-)から CPU 速度は抑えられて運用が始まるのになぁ。そして、何も設定せずに CPU クロックが下げられる。けど、どうして FreeBSD だけかまともに動作するんだ? OS がちゃんとしていると言うことか? Linux は NotePC メインに考えていて サーバの SpeedStep にまでまだ手が回ってないとか?(まぁ "Linux" って言ってしまうと範囲が広すぎるので "SentOS" って書いたほうが良いかな。この場合。)

あー。後、今回はワットチェッカーとか科学的な根拠に基づいては書いていません。ただ単におのおのの OS 上で動作したプログラムが示した値を基準にしています。が・・。そー考えると Linux はカーネルモジュール自体がロードできなかったので値は取れていない状態だなぁ・・。

起動時、一番最後に実行する rc スクリプト。

さてと。久しぶりに FreeBSD ネタ;-)。

rcNG。僕は好きく無いんだけど、/usr/local/etc/rc.d/ 配下に自分で書いたスクリプトを置いて、一番最後に実行させるべく PROVIDE:・REQUIRE:・KEYWORD: などを書いても絶対に一番最後にはならない。BEFORE: bgfsck とか書いても、bgfsck が 上のほうに来てしまうし・・。

rcorder -s nostart /etc/rc.d/* /usr/local/etc/rc.d/*

と、言うコマンドを叩くと実行される順番が表示されるけど、自分で実行したい順番にならない・・。 もうどうにもならないので考えた技。上記コマンドを打ったとき、一番最後に実行されるのが、/etc/rc.d/bgfsck なのでこの中からスクリプトを呼んでしまえっ。技を考え出しました;-)。修正分をパッチにするとこんな感じ。
--- /home/takachan/bgfsck       2009-04-20 16:58:23.000000000 +0900
+++ /etc/rc.d/bgfsck    2009-02-08 10:10:39.000000000 +0900
@@ -16,6 +16,11 @@
bgfsck_start () { + +# It operates at the very end. rc is started. + echo 'Starting very end RC.' + /usr/local/site/bin/rc.lastexec + if [ -z "${rc_force}" ]; then background_fsck_delay=${background_fsck_delay:=0} else

/etc/rc.d/bgfsck の 中から /usr/local/site/bin/rc.lastexec を呼んでいる。でもって呼び出されたこのスクリプトでは自分が一番最後に実行したいものをツラツラと書いて行けばおしまい。って状態にしています;-)。

同じようなことは他にもあるけどねぇ。例えば /etc/rc.d/LOGIN の中に上記のパッチみたく書けば、その直後に実行されるとか(本当か?試して無いけど;-)、ネットワーク系のデーモンはもっと早い時にに起動したい場合は、じゃぁ、必要なスクリプトから呼んじゃエー。みたいな。

これは FreeBSD の流儀的には美しく無いのだろうけど、思った所でバシっと動作してくれないのが困ってしまうのよ・・。rcNG は・・。はぁ。

まぁ、今の所は一番最後に起動したいのが一番多いのでそれはそれでよしとしています。xdm(僕の場合は kdm だけど)なんざ、一番最後に起動して欲しいのよねぇ。/etc/ttys 経由では無く、rc スクリプト経由で。

/etc/ttys から xdm を呼んじゃうと kill しても自動的にまた起動してしまうでしょ。あれ、好きくないのよ。今はそんなことなくなったのかな?最近のは試してないけど。

それにしてもこの技、よい子はマネしないでねぇ;-)。

7.2-PRERELEASE 登場。

自宅サーバが安定しない。」と、ずっと書き続けてきたのだけど、昨日 csup したら 7.1-STABLE が 7.2-PRERELEASE になっていたので、サーバが凍り付く前にリブートしてバージョンアップでけた。

と、言うことで最近のサーバは uptime 12days を記録し、去年の 10 月以来最高の記録となりました;-)。

ちなみに さくらインターネット が自社のサーバを 7.1-RELEASE にアップグレードするってアナウンス出したので思わずサポートに「7.1-RELEASE はフリーズしてしまうけど、サービスにおいて大丈夫ですか?安定してくれないとイヤだなぁ。」と書いたら「検証の結果、凍りつくハードウェアも確かにあったけど、サービスに利用しているハードウェアは大丈夫なのでバージョンアップします。」との事でした。でもって回避策も考えているそうな。

で、うちのサーバがどうして安定したか。と言えば OS の改修とか色々考えられるのですが、現在のうちのサーバの稼働状況を見てみると以下のような感じです。

・DNS サーバ
・ウェブサーバ(httpd-2.2.9) port:80 最大プロセスが 140 個程度
・ウェブサーバ(httpd-2.2.9) port:8080 最大プロセスが 20 個程度
・メールサーバ(sendmail)
・POP3/IMAP4 サーバ(courier-imap-4.4.1)
・自宅網内用 SAMBA サーバ
・cvsupd
・IPv6 ルータ(dtcps,dtcpc)

こんな感じでしょうか。サーバ部分とルータ部分が存在しているのですが、PPPoE はブロードバンドルータにやらせています。

さて、安定させるために行ったことは大体以下です。

・IPv6 ルータを別のマシンで行うようにする
・ダメもとでスケジューラを SCHED_ULE から SCHED_4BSD に変更
・httpd を prefork から worker に変更

こんな感じでしょうか。ただ、これらの事象がサーバの安定に貢献できたのか、さだかではありません。

httpd をプロセス起動からスレッド起動に変更したおかげで ps -ax で見た感じはかなり少なくなりました。 ps -axH | wc -l すると大体 300 近い数が存在しているので、この状態を高負荷状態と行って良いのかもイマイチ不明です。

ただ、ロードアベレージはそんなに高くは無いし、CPU クロックもいつも最高速で回っている。と言うのでもありません。この辺りの情報は MRTG で取得しています。なのでやはり、プロセスやスレッド回りで OS 的に何かあったのかなぁ?と考えてしまうのでありました。

httpd を prefork から worker に変更したのが一番大きいのかなぁ?あ、きっと OS 側に修正が入ったのでしょうねぇ。csup するたんびに kern_ とかのソースが更新されていると嬉しくなっていましたし。< 僕;-)。

7.1-STABLE の powerd。

最近 csup した 7.1-STABLE は powerd の挙動が変わったねぇ。僕は CPU のロードアベレージと速度を MRTG で取得していて毎日見ているのだけど、それで powerd の挙動が一目瞭然;-)。

今までとどう変わったか?と、言われれば、多分 C7i や PhenomII など Core 毎に速度が変えられるようになったのに対応したのでしょうなぁ。

MRTG のグラフを見ていたら、今までは

CPU クロック抑えつつロードアベレージがちょっと高め

だったのだけど、最近の STABLE では

CPU クロック高めでロードアベレージはちょっと抑え気味

って感じかな。まぁ、どっちでも構わないのだけど、CPU クロックを低くしていれば消費電力が抑えられるわけでして。地球環境を考えたら、僕的には今までのほうが良いなぁ。と思ってしまうわけです。サーバであっても CPU ロードアベレージが低ければクロックも低くなっていて欲しい。裏を返すと、多少ロードアベレージが高くても CPU クロックは低くても良い。みたいな感じかしら。

で、powerd で調整できないものか man みましたよー。で、オプションで CPU クロックの変動を抑制することができる;-)。

現在、AthlonX2 なサーバに設定している powerd のオプションはこんな感じ。

/usr/sbin/powerd -a adaptive -i 80 -p 750

Atom N330 なサーバに設定しているオプションはこんな感じ。

/usr/sbin/powerd -a adaptive -i 80 -p 500

まず、-a で adaptive を指定して「適切なモード」を設定します。 -i で CPU アイドルのパーセントレベルを指定して、最後に -p でポーリング時間を設定します。

経験上、ポーリング時間を変更すると細かな CPU クロックの調整ができます。大きく変えたい時は -i オプションの値を変更すれば良いかと思われます。

後は二時間位ブン回して、その間に MRTG で情報取得して更にオブションの値を細かく調整すれば良いかと思います。

それにしても、温度とか、この手の値って MRTG で取れると知ると知りたくなるんだけど、知らなくても全然問題無いのよねぇ。その気分的な問題が中々面白いんだけど;-)。

それにしても、CentOS で CPU 速度を落とそうとしても、ややこしいのねぇ。カーネルモジュールをロードしてもエラー吐いてダメだしさ。そー考えると CPU クロックを可変にするのは FreeBSD のほうが圧倒的に楽だね。GENERIC カーネルだと powerd を起動すれば良いだけだし。

そー考えると地球環境を考える人は FreeBSD 使うのかぁ?;-P。

net-snmpd+mrtg の IPv6 化とその他もろもろ。

FreeBSD で net-snmp のデーモンを起動して、別のマシンから MRTG でデータを取得してグラフを表示させる。なんてのは google で検索するとゴマンと出てくるので、ここではもっと局所的な情報を書いてみたいと思います。

まず、net-snmpd ですが、起動時に以下のオプションを付加すると IPv6 対応になります。 以下は rc.conf.local への書き方です。udp6:161 と udp:161 で待っているよ。ってオプションを追加します。

snmpd_enable="YES"
snmpd_flags="udp6:161 udp:161"
snmpd_pidfile="/var/run/snmpd.pid"
snmpd_conffile="/usr/local/etc/snmp/snmpd.conf"

これで snmpd のほうは IPv6 対応になるので、まぁそこそこ簡単です。起動した時のプロセスを見るとこんな感じです。

/usr/local/sbin/snmpd -c /usr/local/etc/snmp/snmpd.conf -p /var/run/snmpd.pid udp6:161 udp:161

さてと。問題は MRTG のほうですが、こっちはたくさん色々あります。まず、 ports から /usr/ports/net-mgmt/mrtg をインストールするのですが IPv6 enable にしてインストールします。その時、perl モジュールとして p5-Socket6 と p5-IO-Socket-INET6 がインストールされたことを確認します。

けど、FreeBSD の ports からインストールした場合、これだけではまともに mrtg が動作しません。p5-SNMP_Session(この中の SNMP_util.pm を mrtg が利用します) も併せてインストールしてあげる必要があります。この p5-SNMP_Session は mrtg の関連性でインストールされないので明らかに mrtg の ports の問題だと思われます。 send-pr ネタです;-)。

後、mrtg の ports にはもう一個問題と言うか気になる点が有って Cisco などのルータやスイッチの 10G インターフェースをグラフに表示しようとすると桁あふれしてまともなグラフになりません。10Gbps なインターフェースは 32bit int では足りなくて 64bit int が必要と言うことですね。そんな時は p5-Math-BigInt と p5-Math-BigInt-GMP を併せてインストールしてあげます。これも mrtg の port において関連性を是非付けてもらいたいものです。
# 10G インターフェースあるルータの MRTG なんざとらねぇよ。って声が聞こえてきそうですが・・;-)。

さてと。これでようやっとインストールが完了しました。これで mrtg を起動しますが、その前に mrtg.cfg を用意して上げます。今回は cfgmaker で作成してもしなくとも良いです。mrtg.cfg はこんな感じになりました。IPv6 アドレスでアクセスしたいぜぃ。って感じです。

#############################################################################
# System: WebServer (2001:200:161:14cc::1:1) Descr: re0
#############################################################################
#Target[[2001:200:161:14cc::1:1]_re0]: \re0:nopublic@[2001:200:161:14cc::1:1]:
Target[[2001:200:161:14cc::1:1]_re0]: 1:nopublic@[2001:200:161:14cc::1:1]:
MaxBytes[[2001:200:161:14cc::1:1]_re0]: 125000000
Title[[2001:200:161:14cc::1:1]_re0]: Traffic re0
Directory[[2001:200:161:14cc::1:1]_re0]: 2001:200:161:14cc::1:1
PageTop[[2001:200:161:14cc::1:1]_re0]: 以下略

それにしてもすごーく大きな問題点が・・。インターフェース情報の設定において Target には ifIndex しか書けない状態となっております。ifDescr などを書くとエラーとなってしまうのです。orz。上記の場合、re0 は固定な NIC なので良いけど、gif とか gre なインターフェースみたいに動的に生えたり消えたりするインターフェースの場合、どうすんのさぁ・・。ちなみに /IP でも設定してみたけど、やはりダメ・・。困ったなぁ・・。


MRTG 2.16.2 configuration reference


この辺りを見ても全然ダメなので MRTG_lib.pm に直接手を加えるしか無いかも・・。そもそも、 "&", ":", "@" とか " " を "\" で修飾しなさい。ってんだけど、IPv6 アドレスに ":" があるのでマトモに動作しないんだろうなぁ。と勝手に思っているのですが・・。

あぁ。ちなみに nopublic@ の後に IPv6 アドレスでなく FQDN を書いた場合は無事に動作します。ただ、MRTG の仕様として IPv6->Ipv4 へのフェイルオーバーはしない。と言っているのでその点をどう考えるかですね。

後、ルータやスイッチなどのネットワーク機器は基本的に DNS へは登録しないので FQDN だと OK よ。って言われてもいまいち説得力ないですよねぇ・・。

今の段階の MRTG ではこれが限界なのかな。新しいバージョンに大いに期待することにしましょう。

この後、話は rrdtool にまで及ぶのでしょうか? 既に ":" がある IPv6 アドレスを DEF: とかに記述した段階で動いていないのですが、まだそこまで手は回っていません;-)

この記事のつづきを書きました。

FOXCONN R11S4MI-BA 購入。

ずばりっ。これを購入 。どうしてこれにしたかと言えば、安いのが一番。二番目が PCI スロットがあったから。でもってデアルコア;-)。

余った PC パーツは自宅のサーバが安定しないので交換のために買ったのがごろごろしているのでそれを流用することができるのです。 けど、必要なのはメモリと HDD だけなんだけど・・。

で、HDD は Hitachi HDP725032GLA360 GM3OA52A 320GB のやつ。これは、自宅サーバの Seagate ST3500320AS SD15 500GB をリプレスするために用意しておいた。そー。シーゲートの不良品対策のためにね。でもって HDD の中には既に FreeBSD/amd64 7.1-RELEASE がインストールされているのだけど、これをそのまま付けてブート。

あぁれぇーー。全然問題無くブートしてしまったじゃないのさ・・。と、言うことは AtomN330 は amd64 に対応していると言うことだね。でもって DualCore なんだけど HTT なので FreeBSD からは Core が 四つに見えてしまう。うーん。贅沢だぁ;-)。

ちなみに Windows は全く起動していないので知りません。FreeBSD の HDD は Athlon64 X2 でインストールしたヤツがそのまま動作しました。って感じです。

その後 7.1-STABLE にアップしました。dmesg はこんな感じ

USB 接続のカードリーダを積んでいるのだけど、これらはメティアを入れてなくともデバイス自体を FreeBSD 側で認識してしまう。 BIOS で disable にしても FeeBSD 側で認識してしまう。

後、オンボード NIC が 本当は rl0 で 100Mbps なのだけど、実際には re0 として認識される。これは、オンボード NIC が PCI-e に接続されているからですねー。考えてみると PCI-e 接続な rl0 なんて聞いたことないものねぇ。

なので、Giga NIC を PCI パスの空きスロットに刺したいがためにこのベアボーンキットを購入したのでありました;-)。

後、気づいた点としては CPU の温度が取れないですねぇ。coretemp.ko ダメでした。k8temp.ko も当然ダメでした・・。mbmon もダメでした・・。ふむー。

さてと。Core が四つもあるので使用感ですが、一応、ベンチマークを取ってみました。カーネルを make cleandepend && make depend した後に make を叩くのですが、この時の時間を計測してみました。


Atom N330 : 1600MHz : make -j4 
     1173.13 real      2342.58 user       158.38 sys
Athlon64 X2 4000+ : 2200MHz : make -j2
      584.00 real       657.92 user        50.86 sys

CPU 速度がまぁ、だいぶ違うのだけど、それでも Athlon64 X2 の make -j2 のほうが圧倒的に早いよねぇ。まぁ、当然だろうけどさぁ。後、Atom 側は S-ATA が 150。これもちょっとは影響するかな。

と、言うことで Atom な CPU ではもう少し遊ぶ予定。その後は自宅の安定しないサーバのバックアップとして利用する予定。 Atom 側からサーバに対してアクティブ監視とパッシブ監視を行い、応答が無くなったら、サーバの持っていた IP アドレスを alias して Atom のバックアップ機でサービスを継続できるようにする予定。データ自体はもう既に rsync で Atom 側に送っているので、同期もばっちりb(^^)。

んー。会社のミッションクリティカルなサーバみたいだ;-)。

後は、専ら検証機として利用するかなぁ;-)。

KDE-4.2。中々良いよ。

最近の ports では KDE4 が KDE-4.1.2 から KDE-4.2.0 になった。早速バージョンアップ。実は FreeBSD で初めて KDE4 が利用できるようになったバージョンは 4.1.0 です。KDE-4.0.0 は冒険者のバージョンとして扱われていたのでありました。

で、4.1.2 を使い始めたのだけどこれがまたヒドイしろものでして・・。plasma が落ちるともうデスクトップが利用できない状態になる。emacs を起動しておいて M-x shell から X を kill して復旧していた。 plasma がよく落ちる。と言うのも問題であったのだけど、4.2.0 になったら あんまり plasma が落ちなくなって、落ちても、すぐに再起動するようになった。ちょうど、Windows で凍りついたエクスプローラを終了させて、一瞬画面がフワっとなって再度表示しなおしてくれるような感じと全く一緒。

ja-kde4-l10n は日本語テキストですが、まだ翻訳が行き届いていないですねー。色々な所に英語メッセージが残っています。後、LANG が ja_JP.eucJP だとビミョーに正しく日本語表示できない所が多々有ります。もう LANG は UTF-8 にしろ。ってことですかねぇ。ちなみに僕は KDE-4.1.0 から UTF-8 に移行しました。

ちなみに LANG の設定がばっちりになると、フォント名も日本語でフォントしてくれるようになります。例えば、僕の環境の場合 meiryo.ttc は UTF-8 の場合はフォント名が「メイリオ」となるのですが、ja_JP.eucJP の場合は GTK アプリ(例えば firefox3)と一緒で「Meiryo」と表示されます。なので、先に LANG を決定してからフォントの設定をしたほうが良いかもしれません。

dolphin (ファイルマネージャ)ですが、これは smb:// 先のサーバの日本語にも対応してくれました。今までは日本語ファイルやディレクトリをクリックすると dolphin がクラッシュしていたのですが、今度は無事に表示して、クリックもできるようになりました。

konqueror。これはっ!! そもそも、最近は WebKit が大はやりですが、WebKit はそもそも konqueror で利用していたレンダリングエンジン。その割りには konqueror と Safari の表示に差異があるなぁ。と常々思っていたのだけど、4.2.0 に搭載している konqueror は Safari と同じ表示をしてくれるようになりました。スタイルシートの読み込みが Safari に近くなって来たのかな。とも思うけど。Safari とは ルックアンドフィールや操作性は違うけど、コンテンツの表示が Safari と一緒になった。と言うのはすごいうれしー。

ただ、今のところ UTF-8 なコンテンツしか見えないんだけど・・X-(。ってのは前に書いていたねぇ(^^;;。

とまぁ、感動した点を重点的にツラツラと書いてみました。

実は 4.1.2 では plasma があまりにも頻繁に落ちるのでイヤになって KDE-3.5 を再インストールしていたのですが、4.2.0 はそれなりに安定して来たと言う感じかなぁー;-)。

つづく。かな?

自宅サーバの FreeBSD 7.1-{STABLE|RELEASE} ようやっと安定。(2)

前回書いたネタ の続報です。

前回は「ようやっと動いたぜぃ。」って感じで書いたのだけど、書いて公開した直後にサーバがダウン・・。

やはり 7.1-RELEASE や 7.1-STABLE では 5 日の壁越えられないのねぇ。ってのを実感。でもっていやはやダメだわー。ってんで、結局 2008/10/31 のソースコード一式を csup で持ってきてそれでカーネルを作ってみた。

いやぁ。見事に今度は uptime が 5 日を超えました。 uname -a 的には 7.1-PRERELEASE。もーこれでいーや。状態。

最新をおっかけるより安定性重視と言うことで。

それにしてもデスクトップのほうは 7.1-STABLE を追いかけているのだけど、所々「これ、怪しいなぁ。」と言うソースコードが commit されているみたいで・・。

けど、最新を追いかけてまた安定しなくなったら困るので当分はこのままで以降と思っております。

それにしても安定して良かった。次回、サーバのバージョンを上げるとしたら 7.2-PRE 辺りかなぁ・・。当分はバージョンアップするの、やぁめた。

*ERROR* i915_getparam called with no initialization なメッセージ。

それにしても最近、FreeBSD ネタ多いなぁ。今回もなんだけど・・。

/var/locg/messages に、以下のようなログが出力されませんか?

kernel: error: [drm:pid872:i915_getparam] *ERROR* i915_getparam called with no initialization


xorg を 7.4 にしたら突然出るようになって、X を終了(プロセスを kill するなど)すると OS 自体を道連れにマシンが凍り付く。怖いですねぇ。イヤですねぇ・・。

xorg-7.4 とカーネルの agp とか drm 回りの相性で Intel 系のグラフィックチップを使っている場合に発生します。ちなみに僕は DELL の X1 でこの現象に陥りました。X を立ち上げたが最後、もー後は X が終了できなくなります。sync を 30 回位叩いてから shutdown を実行しますが、終了プロセスにおいて X のプロセスを kill した段階で凍りつきます。

ちなみに DELL X1 は i915GM です。xorg-7.3 の時は問題なかったのですが、 7.4 にしたらこの状態・・。しかし DELL X1 では 2009/01/09 頃の FreeBSD/i386 7.1-STABLE を利用していたのだけど、 1/31 に csup したら直りました。

なので、STABLE を利用している方は最新のバージョンに up したほうが良いかもしれません。7.1-RELEASE を使っている場合にこの問題に陥るか、僕は知りません。ごめんなさい。

自宅サーバの FreeBSD 7.1-{STABLE|RELEASE} ようやっと安定。

本当に、まぁ「困った困った。」が、11月中辺りから続いていたのだけど、自宅のサーバとして利用している FreeBSD/amd64 7.1-STABLE がようやっと安定しだした。久しぶりに uptime が 6 日を超えた。こんなことは 11 月以降一回も無かったのでずいぶんと久々な出来事です。

僕が某所の IRC で ダメだーダメだーと言っても一部の人にしか信じてもらえなかったのだけど、これ以降かなー。

Big problems with 7.1 locking up :-(

7.1-RELEASE ってほんとにダメなんじゃね?って多くの人が認識し始めたの。

このスレッドの中の、次のメール。これがまさしくビンゴ。「10月2日と、11月24日の間にいつか導入されたと考えます。」と、書いている人がいるんだけど、確かにこの間におかしくなったと僕も認識します。僕はもっとこまめに csup していたので 11 月頭位から、このログに何もはかずにフリーズする(locking up)と言う現象が現れだした。おかげでサーバの PC パーツを全部交換したよ・・。けど、直らなかった・・。OS の問題だからなぁ・・。長年ため込んでいた MRTG のログファイルも fsck で見事にぶっ飛んだよ・・。トホホ。orz

で、現在はどうして安定したか?と言うと、AthlonX2 を利用しているのだけど、SMP カーネルをやめた。後、SCHED_ULE をやめて SCHED_4BSD にした。せっかく DualCore な CPU 持っていてもクソの役にもたたない・・。

上記メールのスレッドの中には以下のようなコメントもあるので、SCHED_ULE だけじゃダメだ。SMP も切って見よう・・。とか思った次第です・・。本当にトホホだよ・・。

Well, one of my machines just locked up again, even with SCHED_4BSD
on it, so I am now thinking it is unrelated.

CPU は昔使っていた Semplon3100+ ってのがあるので どーせ SMP でまともに動かねーならそっちに戻そうかねぇ・・。トホホ。

FreeBSD 3.0-RELEASE だってここまでひどくなかったぞ・・。ダメなものを平気でリリースするかねぇ・・。困ったモンだ・・。

一時期真剣に FreeBSD 消して Solaris10 にしようかとも思ったこともあったけど・・。

「ダメだったバージョンがあった。今はその問題は取り除いた。なので安心して使ってくれ。」って正式にアナウンスだして欲しいものだ・・。

本当に宜しくお願いしますよぉ・・。

NotePC で xorg-7.4。そのに。

前回のつづきです。いろいろ試してみました。

hald を起動した時の問題点ですが、まず、NotePC のタッチパッドの左ボタンでダブルクリック及びトリプルクリックができない件ですが、これはパナソニックの CF-W5 のみの問題であることが分かりました。 DELL の X1 では無事にタッチパットの左ボタンが特に問題なく利用できました。

続いて、キーボードの 「む」のキーにおいて、「}」や「]」が入力できなくて、「\」キーと同じバインドになってしまう。と言う件ですが、これは xmodmap で対応可能です。以下の設定を ~/.xmodmaprc とかに保存して xmpdmap で実行してあげればキーバインドは刻印通りに動作します。


! }] key setting
keycode 51 = bracketright braceright


と、言うことで hald 経由でも特に問題無く動作することの確認が取れました。前にも書いた通り、PS2 のマウスとキーボードを利用している場合には hald を起動する必要はなく、 xorg.conf に AutoAddDevices を false にしてキーボードとマウスの設定を利用したほうが楽かもしれません。

PS2 (タッチパッドなど) は標準で使うけと、時々 USB マウスやキーボードを使いたい。と、言う場合には hald を起動したほうが良いと言うことでしょうなぁ。

ちなみに、hald 経由の場合だと、USB のマウスやキーボードを抜き差ししても全然問題なく動作します。ただ、PS/2 キーボードがある環境で USB キーボードを付けた場合、USB キーボードで文字入力はできますが、PS/2 キーボードでは入力を受け付けなくなります。まぁ、当然と言えば当然か。

けど、マウスは PS/2 と USB の両方のマウスが動作します。さすがは /dev/sysmouse って感じでしょうか。この時、ps で確認したら USB マウスを付けた段階で moused が起動しますねー。けど、マウスや X の動作には全然問題は無いので敢えてデーモンを kill することも無いでしょう;-)。

さてと。僕の環境では xorg-7.4 の設定はこれにて全てしゅーりょー。いやぁ。良かった良かった;-)。

NotePC で xorg-7.4。

FreeBSD の ports の最新をおっかけていると xorg が 7.3 から 7.4 になり