EFI
このほど発表されたIntel Macですが、BIOSではなくEFIを採用しているようです。
以前から考えているのですが、EFIのプラグインとして、NBDのようにブロックデバイスをローカルのブロックデバイスとしてエミュレートする様な機能を作れば、OSやカーネルに依存しないVIVERの様なシステムができるな〜、と。
ディスクイメージサーバー → ネットワーク → EFI → カーネル
というか、そういうことをやる人間がいつかは出てくるのでは。
ところで、Mac OS XのNetbootという代物は、上のシステムのEFIがOpenFirmwareになっているだけのものでは無かろうか。
このサイトによれば、tftpディレクトリのdarwin/ディレクトリ以下にカーネルやデバイスドライバ、darwin/BootX(ブートローダかな)を設置し、NFSのエクスポートディレクトリ以下にルートファイルシステム全部を展開しておいて、クライアントのOpenFirmwareに
setenv boot-device enet:192.168.0.1,\darwin\BootX setenv boot-args rp=nfs:192.168.0.1:/export/darwin
と設定すれば、ネットワークブートができる模様。
boot-deviceのパス区切りがバックスラッシュで、boot-argsのパス区切りがスラッシュなのは、boot-deviceはOpenFirmwareが、boot-argsはMac OS Xのカーネルが処理するからでは無かろうか。
ということは、nfs:192.168.0.1:/export/darwinは単なるブートパラメータなのかな?
うーむ。これはつまり単なるNFS rootの様な気がする。
setenv boot-args rp=nfs:192.168.0.1:/export:darwin.dmg
と指定して、ディスクイメージをルートデバイスとして使うことができるようですが、これはNFS root+カーネル組み込みpivot_rootという感じかな。
PXEと大差ない?
ところで、Netbootでは、差分ファイルのことを''Copy-on-Write''ではなく、''shadow''と呼ぶらしい。cowなんて牛な呼び方より、shadowのカッコイイし、わかりやすい。
ということで、VIVER 0.3から、''cow''は全面的に''shadow''に変更します。