2008年10月4日土曜日

(FreeBSD) sysctl: unknown oid 'net.fibs'

あるFreeBSD7なホストでapache22を再起動させたところ、

sysctl: unknown oid 'net.fibs'

というエラーメッセージが出ました。



# /usr/local/etc/rc.d/apache22 restart
Performing sanity check on apache22 configuration:
Syntax OK
Stopping apache22.
Waiting for PIDS: 26970
Performing sanity check on apache22 configuration:
Syntax OK
sysctl: unknown oid 'net.fibs'
Starting apache22.



これってのは、/usr/local/etc/rc.d/apache22
の中にある



        sysctl net.fibs 2>&1 > /dev/null



が、正しくは、



        sysctl net.fibs >/dev/null 2>&1



となるべきなんですね。



もっとも、cvsで確認すると



http://www.jp.freebsd.org/cgi/cvsweb.cgi/ports/www/apache22/files/apache22.sh.in



このミスの修正は、9月2日に行われていて、現在は、タイトルのようなエラーは出ません。



というわけで、このエラーが出たホストは、たまたま、中途半端な時期にportupgradeして、そのまま放置してあった、ということでした。



9月2日の前は8月31日に更新されているのですが、そういや、連日、立て続けにapache22のportsが更新されることがあって、もうつきあってられん、と思ったことがあったような気もします。





/bin/shで、標準出力と標準エラー出力をすべて捨てるためのリダイレクトは、「>/dev/null 2>&1」なんですけど、「 2>&1 > /dev/null」と書きたくなる気持ちは、よくわかります。私も、昔、間違えました。



「stderrをstdoutにくっつけておいてから、stdoutをすべてまとめて捨てる」って考えると、後者の書き方をしたくなってしまいます。



ソースコードは確認して無いですけど、前者の書き方になる理由ってのは、stdoutを/dev/nullにつけかえてから、stderrをstdoutにdupする、ってことなんでしょうか?



論外な間違い方として、ときどき、「1」という名前のファイルが出来てたりすることも…(笑)



最近はバッチファイルを書くこともなくなってしまいましたが、MS-DOS時代には、「NULL」という名前のファイルが出来てることがありましたねぇ。MS-DOSのデバイスファイル名は「NULL」じゃなくて「NUL」なのですが、Unixの癖で、どうしてもnullと書きたくなってしまう、っていうわけで。





sysctlのnet.fibsってなんだろう、と思って、ちょっと調べてみました。でも、手元のFreeBSDには、無いんです、そんなsysctlの変数。



7.0-RELEASEには無いし、しばらく前の7.0-STABLEにもない。



ちょっとネット検索した程度でわかったことですが、
/usr/src/sys/net/route.hに、fibなんとかっていうのがあって、それに関係しているらしいです。



extern u_int rt_numfibs;    /* number fo usable routing tables */



RELENG_7ブランチで見ると、7月24日のrevision 1.65.2.2から登場してます。



http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/sys/net/route.h?f=u&only_with_tag=RELENG_7&logsort=date



route.cの方で、sysctl変数の宣言(?)みたいのが見えますね。
たとえば、このあたり。



http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/sys/net/route.c?rev=1.120.2.6&content-type=text/x-cvsweb-markup&only_with_tag=RELENG_7



今うちにあるのは7.0-RELEASEなんですが、/usr/include/net/route.hは、revision 1.65.4.1。バージョン番号が戻ってるのか?と錯覚してしまったんですが、こっちは、RELENG_7_0ブランチなんですか。う~ん、ちょっと複雑。



http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/sys/net/route.h?f=u&only_with_tag=RELENG_7_0&logsort=date





で、結局、fibってなんなんだ?

FIB = Forwarding Information Base

というものがあるそうで、パケットのルーティングに用いる何からしいです。



そういえば、FreeBSDで、ルーティングテーブルを複数持てるようになる、とか、そんな話があったような…



0 件のコメント:

コメントを投稿