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_ とかのソースが更新されていると嬉しくなっていましたし。< 僕;-)。

3月 062009
 

最近 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。

2月 152009
 

ずばりっ。これを購入 。どうしてこれにしたかと言えば、安いのが一番。二番目が 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(^^)。

んー。会社のミッションクリティカルなサーバみたいだ;-)。

後は、専ら検証機として利用するかなぁ;-)。

11月 122008
 

渋谷に新しくヤマダ電気が出来たのだけど、そこの特売で今はディスコンのバッファロー(FreeBSD 的には MELCO)の WLR-UC-G が 1,480yen で売っていた。

USB 接続の無線 LAN アダプタで、WindowsXP 上では AOSS と言うソフトウェアルータを利用して無線アクセスポイントになれる。と言うヤツ。

Windows 専用のアプリケーションをインストールすると無線アクセスポイントになれるんだけど、これを FreeBSD に接続してフツーに無線 LAN アダプタに利用できないかなぁ。と思い、購入。まぁ、FreeBSD で動かなければ WindowsXP で iPod Touch 用に利用すれば良いかな。とも思ったんだけど。

で、FreeBSD に早速接続してみた。kldload if_* とかした後で。けど、かわいくないなぁ。ugen0 に落ちてしまった。しくしく。

さてと。格闘はここから。まず、WLR-UC-G はどんなチップが乗っているのか? google で探すのだけど、どうも解らない。Linux 方面での実績を調べてみたのだけど、それも無いみたい・・。あらら。結局どんなチップを使っているのか google では解らなかったので、しょーがない。Windows に付属の CD からドライバをインストールして調べてみた。すると、Ralink Technology Corp. と言う所のドライバを利用しているみたい。ふぅ。

ちなみに FreeBSD に接続した時の usbdevs -v はこんな感じ。

port 5 addr 2: high speed, power 300 mA, config 1, WLR-UC-G(0x0119), Buffalo(0x0411), rev 0.01

 
ただ、こいつ、しゃらくさいことにプロダクト ID を二つ持っている。AP モードにした場合は 0x0119、クライアントモードにした場合は 0x0116 となる。これを覚えておいてと。

これ位の情報が手に入ると後は簡単。FreeBSD で Ralink Technology Corp. 用のカーネモジュールが無いか調べてみたら if_rum と言うのがあるじゃーん。と、言うことで最新の 7.1-STABLE のソースコードを持ってきてエントリを追加します。

でもって出来たパッチはこの辺りにおいておきます。

http://www.icmpv6.org/Prog/FreeBSD_patches/MELCO_WLR-UC-G.patch

プロダクト ID を二つ登録したので AP モードでもクライアントモードでもどっちでも 無線 LAN アダプタとして利用可能です。けど、クライアントモードで利用したほうが安心かも;-)。

実際に利用するするためには色々なカーネルモジュールをロードする必要がありまずが、ここでは割愛させていただきます;-)。 僕が試した感じでは ifconfig rum0 up して、ssid 付けて dhcp でアドレスが付きました。後 ifconfig rum0 scan も利用できました。

FreeBSD において AP モードは利用できないけど、ハードウェア自体は利用できるようになりました。めでたしめでたし。と言うことにしましょう;-)。

5月 102007
 

デスクトップと NotePC の FreeBSD は最新の 6.2-STABLE にしていたんだけど、サーバはなかなか最新にする勇気が無かった・・。

そー。sendmail 回りがガガガとバージョンアップしたからねぇ。メールの送受信に問題が発生すると困るのでなかなかその勇気がでなかった(^^;;。

ちなみにうちのサーバは sendmail+procmail で courier-imap を利用していて、更に majordomo が動いているので sendmail は結構真剣に作らなければならないのでした。

majordomo はバーチャルホストで複数のドメインを利用しているので以前に書いた local-host-names を利用しないようにするための sendmail.cf にしなければいけないしねぇ。

と、言うことでちゃんとバックアップして、恐る恐る最新の STABLE にして、ただちに sendmail.cf を作って一応事なきを得た。と言う感じ。

作業中、spam がガンガン届くんだけど、これって、MTA の設定に不備がないかの目安になってある意味役に立つかも;-)。spam が届かなくなったら sendmail.cf の設定が悪いんだって事だからねぇ・・。

ちゅーこってこれで自宅の全ての UNIX ベースの OS は sendmail-8.14.1 になったな;-)。