V7の日付まわりを修正するPCメモPC関係のメモ、気付いたこと。OSをいじって遊んでいます。OSのカスタムビルドを配布しています。ないブログに表示されています。新しい記事を書く事で広告が消えます。V7をインストールしてきましたが、やはり気になるのは日付関連です。起動直後の状態はこんな感じになっています。1988これを修正しようとするとこうなります。1970年に戻ってしまいました。いわゆる2000年問題というやつですね。タイムゾーンがEST(アメリカの東部標準時)になっているのも気になります。今回はこの辺を直してみようと思います。OSのタイムゾーンの変更を行います。V7でタイムゾーンを変更するためには、ソースを修正したうえでカーネルを再構築する必要があります。修正するソースコードは/usr/sys/h/param.hです。Kitの環境では/mnt/usr/sys/h/param.hにあります(こちらの記事参照)。中身はこんな感じです。TIMEZONEで指定している値を日本時間に直します。DSTFLAGでサマータイムの設定をしています。日本で使う場合は必要ないのでここを0に変えます。修正後は以下のようになります。locality修正を行ったらカーネルを再構築します。allしてからmakeします。../dev/LIB2#とりあえずこれでOSは日本時間で動くようになりましたが、今のままではタイムゾーン表示ができません。タイムゾーンの表示のための処理は/usr/src/libc/gen/timezone.cにあります。カーネルソースと違い、ライブラリやコマンドのソースはもとから入っています。中身をみるとアメリカの各地区とGMTしかタイムゾーンの定義が入っていません。-1};(略)これではどうしようもないのでタイムゾーンの定義に日本時間を表すJSTを追加します。-1};(略)これでソースを再コンパイルします。timezone.ctimezoneはlibc.aの一部なので、作成したオブジェクトでlibc.aの中身を置き換えます。/usr/src/libc/gen/timezone.o最後はdateコマンドの修正です。ソースは/usr/src/cmd/date.cです。問題の処理はgtime()関数にあり、入力された年を無条件で1900年代と扱うようになっています。今回はとりあえず年の値が50以下だったら2000年代と扱うようにします。return(0);}これをコンパイルして/bin/dateを置き換えます。/bin/最後にカーネルを置き換えてリブートします。(Ctrl-E)リブート後のコマンド実行結果はこんな感じです。-uは日時をGMTで表示します。9時間差なのでうまくいったようです。ほかにも2000年問題はあると思いますが、気になったら対処するということで今回はここまで。Unixをインストールするsimhをインストールしてみるランキングに参加してみました。クリックしていただければ嬉しいです。