12月 122009
 

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 デバイスが一切認識されないのだろう・・。まだまだ格闘は続くのであります;-)。

8月 112009
 

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 は起動すると前回のサイズで起動してまう。それがイヤなので、毎回 80×24 のサイズで起動するように $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 の環境に移行できたと言う感じでしょうか。

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

7月 232009
 

まさか三回目を書くとは思いもしませんでした・・。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 個があふれてしまう。今後はこれを頭の片隅に入れておきたいと思います。

7月 062009
 

普段常用している 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 で「グラフィックカード」を買ったつもりだったんだけど、メインはサウンドドライバになってしまったかな?(^^;;。

7月 032009
 

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 は動かしたとこはあるんだけど、それよりも違和感があります。

なんだろなー。アンチエイリアスの利いたデスクトップ上でアンチエイリアスが利いていないアプリケーションを動かしているからかなぁ。

と、言うことであまりにサクサク動作しているのでちょつと驚いている状態なのであります;-)。

6月 232009
 

FreeBSD 用の ports は作った(改造した)けど、(めんどくさそうなので) send-pr してないものや、「ま。自分で使う分にはそれでいーや。」とか思っているヤツのたまり場が この辺り にあったりします;-)。

あ。唯一、作者と言うか FreeBSD.org なアドレスに連絡したのが scim-bridge-client-qt4 だ。これは必要だったので kde@freebsd.org にメール書いた;-)。後、irrd もコミッターの方にお願いして登録してもらったなぁ。

今回は自分が必要な二つの自家製の ports をアップデートしました。

一個は mew と SSL と stunnel と /etc/hosts.allow。 の記事で書いたやつ。4.26 から 4.27 にバージョンアップしたのに追随しました。また、この ports では Makefile を編集してメニューを表示するようにして –disable-libwrap を選択できるようにしています。ほんまモンのよりいたせりつくせりだと思うのだけどもねぇ;-)。

もう一個は /usr/ports/www/photo_gallery 日本語版。 の記事で書いたやつ。これは、ports が 1.5 から 1.5_1 に更新されたのでそれを追随した形です。後、apache13 をインストールしないようにしています。photo_gallery 自体は apache22 でも動作するのであえて apache はインストールしないようにしました。

とまぁ、こんな感じで send-pr はしてないけど、コツコツと更新しているのであります。きっと自分しか使わないだろうなぁ。とか思っているので;-)。

一応、それぞれの ports は以下にあります。もしよければ利用して見てください;-)。

http://www.icmpv6.org/Prog/FreeBSD_ports/ports-stunnel-disable-libwrap-20090623.tgz
http://www.icmpv6.org/Prog/FreeBSD_ports/ports-ja-photo_gallery-1.5_1-20090623.tgz

あ。コミットしてくれる方、絶賛募集中です;-)。

6月 182009
 

僕はちょっと古い目の 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 ですが、購入に関しては却下されそうな気配です・・。トホホ。

それにしてもこのネタ。つづく のかなぁ?(^^;;。

6月 082009
 

ここんとこ、自宅に設置してある 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 でやっているけど;-)。

5月 152009
 

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 はカーネルモジュール自体がロードできなかったので値は取れていない状態だなぁ・・。

4月 242009
 

前回は、mrtg が実質的に IPv6 に対応していないねぇ。って所で話が終わったのですが、そこから進展がちょっとあったので書いてみたいと思います。

net-snmp に対して IPv6 で接続したい人は前の記事を先に読んで 、その後でこの記事を読んでください。

さてと。物語りは前回からの続きなのですが、mrtg の config ファイルを記述した時、 Target に IPv6 を記述した場合 ifIndex でしかトラフィック情報が取得できない。と言う所で終わりました。

確かに、何度試してもダメだったので、debug オプションを有効にしてログを見つつソースコードなどを眺めていたら問題点を発見しました。最近の ports-current から mrtg をインストールするとmrtg-2.16.2,1 がインストールされるのですが、その時に /usr/local/lib/perl5/site_perl/5.8.9/Net_SNMP_util.pm も併せてインストールされます。こいつの中で Net::SNMP を呼んでいる時に -domain で udp/IPv4 しかセットしていないみたいなので udp/IPv6 をセットするようにしたら IPv6 でも一応動くようになりました。

修正分のパッチはこの辺りに置いておきます

このパッチを適用することにより、FQDN で問い合わせした時は ifDescr でも値が取れる事を確認できました。以下におさらいしてみることにしましょう。

・IPv6 で SNMP が取得できるもの

Target[dir_re1]: 2:public@taro6.running-dog.net:
Target[dir_re1]: \re1:public@taro6.running-dog.net:
Target[dir_re1]: 2:public@[2001:200:161:14cc::1:1]:161:

 
taro6.running-dog.net は DNS に IPv6 のみのアドレスが登録されています。

この設定では IPv6 では ifIndex と ifDescr でトラフィック量を取得することができました。

・取得できないもの

MAC アドレス指定(FQDN・IPv6 共に)
ifDescr 指定での IPv6 アドレスを記述した場合

とまぁ、こんな感じで ifDescr で取得できるようになったのでヨシとしておきましょう。それにしても DNS は必須になってしまうのですが・・。

後、net-snmp って –enable-ipv6 で make しても snmpwalk は IPv6 に対応していないのねぇ。DNS に IPv6 のみ登録してある FQDN を指定しても「そんなアドレス知らん。」とか言われます。/etc/hosts に書いてもダメ。snmpd が IPv6 に対応しているだけにもったいないことです・・。

さてと。ここまでは net-snmp と mrtg のお話で、前回の続きの完結編。と言う感じになります。

続きまして rrdtool に行ってみましょうか。ports 的には ports/databases/rrdtool になりますが、これをインストールすると RRDs と言う perl のモジュールをインストールしてくれて RRDs::graph と言うモジュールを使うと MRTG グラフを表示してくれます。グラフを作成する際のオプションとして IPv6 アドレスが存在した場合にどうなるのか?

正解ですが、”:” は区切り文字に使われているので DEF: の設定に IPv6 アドレスがあるとまともに動作してくれません。

ports 的な rrdtool-1.3.5 のソースを見てみると rrdtool-1.3.5/src/rrd_graph_helper.c に以下のような記述が所々にあり、”[]” で囲むとか “\:” などしても全然対処できないと言うことが解ります。

if (line[*eaten] == '\0' || line[*eaten] == ':') {
    dprintf("- no (or: empty) legend found\n");
    return 0;
}

 
と、言うことで RRDs を使う場合には IPv6 を意識しないようにしないとまずいです。では、どんな時に IPv6 を使う必然性が出てくるのかとなるのですが、僕の場合、rrdfile と PNG ファイルの保存場所に IP アドレスを利用してる感じですね。

/data/mrtg/192.168.1.1/re1.rrd
/data/mrtg/2001:200:161:14cc::1:1/re1.rrd

でもって RRDs::graph では以下のようなコーテイングをしていたらこらアカンですわなー。

:
my $rrdfile = "/data/mrtg/2001:200:161:14cc::1:1/re1.rrd";
my $pngfile = "/data/mrtg/2001:200:161:14cc::1:1/re1.png";
push (@options
    :
    ,"DEF:avein0=${rrdfile}:ds0:AVERAGE",  "CDEF:avein=avein0,8,*"
    ,"DEF:maxin0=${rrdfile}:ds0:MAX",      "CDEF:maxin=maxin0,8,*"
    :
);
my @rv = RRDs::graph( $pngfile ,@optins : );

 
なので、結局 $rrdfile =~ s/:/_/g; など言う弱いことをして問題回避したのでありました。

これで、net-snmp・mrtg・rrdtools の IPv6 対応が一応終わった感じかなぁ。10Gbps 問題も回避できたし、今の所は多分これで IPv6 な世界が来ても大丈夫なような気がします。が・・。mrtg には IPv6 対応をもう少し頑張ってもらい所ではあります。

http://oss.oetiker.ch/mrtg/doc/mrtg-ipv6.en.html

こんな所読んだって Target の所がハショッて書いてありすぎで全然ダメなんだもの・・。トホホ。

くーーっ。MacOSX Leopard の /usr/sbin/snmpd は 5.4.1 使っているのに IPv6 に対応してないじゃん。 udp6:161 のオプション、そんなのねーー。とか言いやがる・・orz。これはヒサンだ・・。

つまり、どういうことかと言うと、例えば MacOSX を leopard.running-dog.net と言う FQDN で 192.168.1.30 と 2001:200:161:14cc::1:10 の二つ RR レコードを記述していた場合、mrtg.cfg の Tagrt に FQDN を記述すれば mrtg は IPv6 で問い合わせに行くことになります。

けど、MacOSX の snmpd は IPv4 にしか答えないので mrtg はエラーとなります。そして、mrtg は「IPv6 から IPv4 にフェイルオーバーしないよ。」と言う仕様なので、MacOSX への mrtg.cfg の設定における Target は FQDN ではなく、IPv4 アドレスを記述しないと正しく情報が取得できないことになります。

いやぁ・・。奥が深い・・。まず最初に監視対象機器が DNS に A と AAAA があるか確認した後、当該機器の snmpd が IPv6 に対応しているか確認してからでないと mrtg.cfg の記述が完成しないんだー・・。

と。言うこで、このネタ。ここまでにしておきましょう・・。