読者です 読者をやめる 読者になる 読者になる

1.0進捗 2

ブート成功。ネットワークブートもOK。(ただしその後カーネルパニック
本日(日付的には昨日)をもってVIVER 1.0を1週間で書こうプロジェクト終了。

まだできていない部分:

カーネル
どうもVIVER 0.3のカーネル(linux-2.6.18.2-viver23)では、switch_root後、ディストリビューションの処理に移ってからしばらくすると、カーネルパニックが発生して凍ってしまう。0.3のときはそんなことはなかったので、aufsとの関係か、initrdをext2ディスクイメージからcpioイメージに変更したことによる影響。後者ではないと思うので、おそらく前者。NULL参照で落ちていたりする。自分でできる解決策としては、1. とりあえずunionfsにする、2. カーネルのバージョンを変えてみる 3. aufsのソースコードを読んでみる の3つ。まずは原因の切り分けのため1、続いて3は時間がかかるので、2、次に1(おそらくこの時点で安定はする)、最終手段で3かな。
ブートローダの設定
ブートローダは基本的にSYSLINUX系(syslinux/isolinux/pxelinux/extlinux)にすることは決定したけど(ただし場合によってGRUB)、SYSLINUXにはどうやら知らない機能がいろいろあるようなので、調査。
外部プログラム起動時のメッセージがリアルタイムで表示できない
DHCPクライアントなどの外部プログラムを起動したときに、そのメッセージをリアルタイムで表示できない。全部終わった後に表示される。何とかする。0.3でも結構大変だったところ。
接続形態判別
ローカルディスクのメディアタイプ判別は実装したけど、接続形態判別はまだ。それからテストしていない。
ブートパラメータのサポートいろいろ
modprobe=(自動検出に追加でモジュールをロード)はあるけどnomodprobe=が無い、staticip=(静的にIPアドレスを割り振る)はあるけど、staticroute=が無い。
PC Cardの自動検出
PCI検出に再帰検出を実装していないので、たぶんPC Cardの先につながっているデバイスを検出できない。
USB自動検出のテスト
実装はしたけどテストしてない。
RAM以外のShadowのテスト
同じく実装はしたけどテストしてない。bindマウントやループバックマウントを使っているので、足りない部分がありそう。(それでもここのところは0.3と比べてずっと高機能)
例外発生→シェル起動→リブート指示時のクリーンアップ処理
異常系なので後回し。
例外発生→シェル起動→リトライ指示
リトライだけはできるけど、普通にリトライするだけじゃ同じことの繰り返しなので、指示を受け取らないといけない。これも後回し。
デフォルトゲートウエイの自動割り振り
DHCPでアドレスを割り振れない→Zeroconf失敗→適当に割り振る のあと、デフォルトゲートウエイを適当に割り振らないと、ブロードキャストが使えないというLinuxの仕様がある模様。ただし、Zeroconfが失敗する時点で何かがおかしい。
ログの出力フォーマットが美しくない
美しくない。良くない。
1.0用のブートスプラッシュ
見た目重要!

※追記
今(↑を書いてか約3分後)aufsをunionfsに変更したら、カーネルパニックせずに問題なくブートした。
Rubyは変更が簡単で素晴らしい。