ある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変数の宣言(?)みたいのが見えますね。
たとえば、このあたり。
今うちにあるのは7.0-RELEASEなんですが、/usr/include/net/route.hは、revision 1.65.4.1。バージョン番号が戻ってるのか?と錯覚してしまったんですが、こっちは、RELENG_7_0ブランチなんですか。う~ん、ちょっと複雑。
☆
で、結局、fibってなんなんだ?
FIB = Forwarding Information Base
というものがあるそうで、パケットのルーティングに用いる何からしいです。
そういえば、FreeBSDで、ルーティングテーブルを複数持てるようになる、とか、そんな話があったような…