VMwareのBIOSを拡張する
gPXEとiSCSIを使ってWindows XPをネットワークブート(ディスクレスブート)する実験(くわしくはここ)の次にWindows 7をディスクレス・インストールしようとしてちょっとハマってしまった。その過程で、VMwareの仮想マシン(ゲストマシン)のBIOSを変更したり拡張できることが分かったのでメモしておく。
ここではBIOS全体を変えるのではなく、ネットワークカード部分のBIOS(いわゆるnbios)をVMwareの標準のAMD PCNET32(Am79C970A)からgPXE対応のEtherboot ROMに変更する方法を載せておく。
最初にgPXE対応のEtherboot ROMのバイナリイメージを次のページからダウンロードする。
http://rom-o-matic.net/gpxe/gpxe-1.0.0/contrib/rom-o-matic/
ここで、
1. Choose an output format: [ROM binary (flashable) image (.rom)] 2. Choose a NIC type: [pcnet32] 3. (optional - for binary ROM image format only) PCI VENDOR CODE: [1022] PCI DEVICE CODE: [2000]
を選択して[Get Image]ボタンでバイナリ・イメージをダウンロードする。ファイル名は“gpxe-1.0.0-10222000.rom”。
追記:2010/07/28
VMwareの仮想NICはAMD PCNET32だけではなくIntel E1000の場合もある。最初、XPで試したときはPCNET32にだったが、最近Windows 7で試したらE1000になっていた。ゲストOSの種類で変えているのかもしれない。
Intel E1000の場合は次の様に指定する。1. Choose an output format: [ROM binary (flashable) image (.rom)] 2. Choose a NIC type: [e1000] 3. (optional - for binary ROM image format only) PCI VENDOR CODE: [8086] PCI DEVICE CODE: [100f]ダウンロードするファイル名は“gpxe-1.0.0-8086100f.rom”となる。
(IntelのVendor Codeが“8086”というのは笑える。)
まず、普通にVMwareのゲストを起動してBIOSセットアップに入ると次のようなBootメニューが出てくる。
さて、仮想マシンをシャットダウンして、今ダウンロードしたROMイメージを仮想マシンのディレクトリにコピーする。
# cp gpxe-1.0.0-10222000.rom /usr/lib/virtual_machines/test-pc/
そして、仮想マシンの設定ファイル(.vmx、この例ではtest-pc.vmx)の最後の次のような1行を追加する。
nbios.filename = "gpxe-1.0.0-10222000.rom"
これでゲストを再起動してBIOSセットアップに入ると、次のようになっている。
Intel E1000の場合は
e1000bios.filename = "gpxe-1.0.0-10222000.rom" ethernet0.opromsize = 70144を追加する。
このgPXEのエントリをブート優先順位の一番上に持って行き、リブートすると次のように行き成りgPXEが起動する。
今回はネットワークROMの変更だけメモしておいたが、同様の方法でBIOS全体の変更もできる。VMwareのオリジナルROMイメージを抽出して、文字列データやロゴイメージを変更することも可能だ。まだトライはしてないが、その内、暇があったらやってみよう。