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は変更が簡単で素晴らしい。