4月 102012
 

いやはや。僕が利用している NotePC は以前のエントリにも書いたかもしれないですが ThinKPad X100e です。この NotePC は AMD の CPU を利用していて E-350 です。時々熱がこもって ACPI shutdown が走ったりするんですけども、NotePC では唯一 X11 の drm が動作する VESA ではない(ドライバは xf86-video-ati を利用しています)最後の NotePC なのではないかなぁ。と思っているところですが;-)。

で、この NotePC は現在 FreeBSD/amd64 9.0-STABLE がインストールされているんですが、つい最近までは suspend/resume しなかった。9.0-PRERELEASE までは suspend/resume していたんだけど、その後 RC になってからは ACPI 周りの問題からか、acpiconf -s3 すると resume はブラックアウトでフリーズ、あげくの果てには AC コンセントを抜き差ししないとブートさえもしてくれない状態だったので、もう本当にある意味あきらめていたんですけどね。

さすが CURRENT および STABLE は『生もの』ですね。 2012/04/07 辺りの 9.0-STABLE を csup して make build world と install したら見事に suspend/resume が復活しました。パチパチパチ;-)。

今回はその様子を動画に撮ってみたのでちょっと公開してみましょう;-)。こんな感じ。一分07秒の動画です。


20120410.jpg

※ “再生アイコン” が見えない表示されないブラウザの場合は上記写真をクリックしてください。

いやね。雰囲気的に resume は MacBook に近い動作をします。以下、寝て起きる上記の説明です。

1. Fn+F4 で suspend します。
2. X の画面からコンソールの画面にひとまず落ちてから寝ます。
2. 手前の緑の LED が二個点きました。右側が「スリープ状態」を示しています。
3. フタを明けて resume。緑の LED は一個だけの点灯になります。
4. resume 後は X が即座に表示され早速利用可能。
5. USB Wi-Fi の run0 を利用していますが、その LED が点滅し、しばらく後に利用可能。

とまぁ、動画的にはこんな感じで suspend/resume します。上記で「MacBook に近い動作」と書いたのはフタを明けてから利用できるようになるまでの時間のことを言っています。フタを明けるとただちに X が動作するのはこれまたすごいっ!! 今までの FreeBSD にはちょっと無い体験でした。

後、何回 suspend/resume をしても特に問題なくちゃんと寝て起きてくれます。 jobs の言うところの “It just works.” って感じでしょうか;-)。

で、まだあまり試していないのですが、一点問題があるように感じます。一番最初。電源投入後、一回目の suspend だけはどうやら Ctrl+Alt+F1 で X を後ろに飛ばしてからコンソールで acpiconf -s3 を打つ必要があるみたいです。で、その時の resume はちゃんと起きて Ctrl+Alt+F3 辺りで X の画面を戻したあと、以降は Fn+F4 で寝て、そして起きてくれるようになります。この辺りがまぁ、なんちゅーか本中華なんですが、もしかしたら僕の気のせいかもしれません;-)。

で、これだけサクサク suspend/resume が動作するんだから KDE4 の電源管理で Windows7 みたいに一定時間後には寝てくれるんかいな?などと、ちょっと思ってしまうのでありますが、実際に試してみました。

PowerProfile_1.jpg

KDE4 のコントロールパネルから「電源管理」メニューで色々設定してみます。あと、タスクバーにも電源管理アイコンがあって、ここからレジュームとかハイバネードとかシャットダウンとかあるんですけどね。

今回は PowerSave の設定で 10 分後に「スリープ」と設定して放置してみました。

あたたた・・。サスペンドはしてちゃんと寝てくれます。しかし、レジューム(起動)時には X がブラックアウトしていまいました。ただし、カーネルは死んでないので ACPI S5 ステートとかリモートからの ssh は可能なので本当に X の画面のみが見えない状態。と、いう感じでした。これは上で書いたタスクバーの電源管理から「スリープ」ボタンを押した時と同じ動作でした。

と、いうことは FreeBSD 単体ではサクサク suspend/resume するけど、 KDE4 経由の電源管理ではまだもう少し頑張りが必要だね。と、いう感じでしょうか。

けどもまぁ、そこまで贅沢は言いません。これだけサクサク、何回も suspend/resume してくれるのであれば全然問題はありません。今まで suspend/redume が動作するのは二回まで。三回目に起きた時には画面はブラックアウトだっただけにずいぶんと進歩してそして非常に嬉しいのであります。

上にも書いたとおり、CURRENT や STABLE は生ものです。次回 csup してカーネルを作り替えたら動作しなくなるかもしれません。なので、今回の環境は非常にじゅーよー。みたいな。この環境でずっと使い続けたい気分です;-)。

なお、今回はこのブログ初の動画でしたが、今後は機会があれば色々、動くものを掲載して行きたいと思います;-)。

2月 202012
 

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

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

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

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

bsnmpd_enable="YES"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1月 172012
 

前回のエントリーでは「購入した。」って書いたのですが、今回は実際に 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 があれば書いてみたいと思います。

1月 152012
 

自宅で動作しているサーバがあるのですが、このたび新調しました。今回購入したのは今話題となっている富士通の 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 においてもいとも簡単に動作しております。

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

8月 082011
 

現在、自宅のサーバは 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) も;-)。

11月 272010
 

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

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

IMG_0145_RadioLan_1.jpg

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

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

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

PLANEX GW-USValue-EZ

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

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

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

# ndisgen net8192cu.inf rtl8192cu.sys

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

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

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

Buffalo WLI-UC-GN

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

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

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

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

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

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

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

で。三個目。

PLANEX GW-USMicroN

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

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

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

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

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

9月 282010
 

前回のエントリーで 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 を門外に持ち出すことは無いと思うのだけどねぇ;-)。

8月 302010
 

自宅の 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 にしようかなー;-)。

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

7月 032010
 

ちょっと前のエントリーで「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 はどうなっているんだっけかなぁ。

3月 192009
 

自宅サーバが安定しない。」と、ずっと書き続けてきたのだけど、昨日 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_ とかのソースが更新されていると嬉しくなっていましたし。< 僕;-)。