y2k 本番


来ました. ぐへへ. いやー. イキナリですがな. BIOS も全部オッケーだと思ってたら, コレです. プログラムは実行してみないと判らない.
root@aya:/home/yuji#clock
mktime() failed unexpectedly (rc -1).  Aborting.

正月早々, 思いっきり y2k 入ってます. なんじゃろねー. mktime というのは時刻データ成形関数らしく, バイナリの時間データを人間の読める形の文字列に変換する.

その後の調査で hwclock というもっと良いコマンドを見付けた. このコマンドでも, 上と同じエラーが発生する. マニュアルを読んでいると, /dev/rtc が使えないシステムでは, なんか時刻を決めるのにえらく難儀するというような事が 書いてある. カーネル 2.x の RTC ドライバの説明は, こんな感じ.

Enhanced Real Time Clock Support (CONFIG_RTC)
このオプションを使い, メジャー番号 10 マイナー番号 135 の デバイスファイル /dev/rtc を作ると, ハードウェア装備の リアルタイムクロックにアクセスできるようになる. 情報は /proc/rtc から取得され, (中略) SMP を使う人は, これを有効にし, ソレ用にリアルタイムクロックを 設定しないといけません.

自分のマシンで SMP なんか関係無いから, こんなオプション使ってなかったよ.

clock コマンドが動かないという以外に, 他にもトラブルが発生した. なんと, cron が動かなくなってしまった. ぐはー. clock コマンドが動かないだけなら, ほっといても害は無いが, cron 動かないとなると, ちょっと UNIX とは言えねえよな. これは絶対に直さねばならない. 原因を幾つか考えてみたが, /usr/src/linux/arch/i386/kernel/time.c なんかを読んだ結果, わしがおもいついたのはこれくらいである.

mktime() 関数がおかしいのであれば, libc のバグだが, libc をいじくるのは嫌だなあ(ロクな思い出がない)と思ったので, 先に時計の設定をいじることにし, カーネルを RTC を有効にして コンパイルした. RTC ドライバを使って時刻を取得する ことにすれば, 今の設定でおかしな時刻が帰って来てるかもしれないのを, 直せるかもしれないなあ, と思ったわけです. というわけで, 連続稼働は 60日で消えた. 再起動の結果

root@aya:/home/yuji#hwclock --debug --test
Using /dev/rtc interface to clock.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 17:23:11
Hw clock time : 17:23:11 = 946714991 seconds since 1969
Sat Jan  1 17:23:11 2000  -0.701618 seconds

ぐは. ちゃんと動いてます. クッソー. 憎き y2k め. もー. 全く. cron も動いてます. いやー. unix で cron 止まると難儀しますねえ. まじで. 上のエラーから想像するに, 時刻が取得できなくなって, 動作しなくなったと見える. でも, log にそういうことが全然書かれないのも問題あるよなあ. 動いてないのに気づいたのは, コマンドが実行される定刻になっても 実行された記録が残ってないのを見てからだもんね.

ところが話はこれで全部ではないのです. ハードウェアの時計がどうなってるのか 見るには(hwclock 動かないから)BIOS 画面でみるしか方法がないので BIOS 画面を出そうとしたんですよ. わしのマシンは OS を終了しなくても BIOS 画面にアクセスできるので, フロッピで起動されたりすると, ヤだから, パスワードを設定してあるわけなんですよ. ところが, この BIOS のパスワードがぶっ飛んでて, 正しいパスワードを入れても BIOS 画面に行かなくなってしまった. めちゃくちゃ困りました. なんせ, BIOS のパスワード判んなくなったら, 工場で初期化である.

そこで, 試しにパスワード無しでやってみたら, すんなり通る. どうなってんだ! y2k で, いきなりセキュリティ関連のバグが発生するというなんて, こんなええかげんな話, マンガだけかと思ってたよ. まじですか. CERT Advisory CA-2000.1 - HiNote Ultra II BIOS y2k vulnerability って感じですか. パスワードは消し飛んでそのままかとおもったら, 再起動したら, 以前設定したパスワードが再び有効になっているんですね え. ええかげんですねえ. もう, やだよ.

重要なディレクトリは全部据え置きにバックアップ取りま したが, それにしても ネットワークもドライブも無い実家でこのトラブルは若干びびりました.

でも 2000年で再起動ってのは, 納得いかないね. ニュースで見たら住民票のコピーを請求したら 日付が明治31年になってたり, 燃料制御棒の位置が表示できなくなったりしてたが, これに比べればマシなのかのう. でも某 MMR も残念だったなあ. Y2K とノストラダムス. モバヤシもせっかくの IQ 170 をそんなしょーもない事に 使わずに, GIMP のデバグにでも使ってくれよ.

gtop のアレなところを直す

gtop の出力が一部バケてるのが 具合悪いので, 今更ですが, その辺をちょっといじってみました.

日本語ちゃんとでるようになりました. 元は, 画面サイズからフォントの大きさを決めるようになってたんだけど, フォントセット指定だと, それが何故か動かないので, フォントセット決め打ちでごまかした. パッチをここに置きますので, 良かったらどうぞ.