取代 VirtualBox 網路卡 BootRom

VirtualBox 中網路卡預設的 BootROM 是使用 iPXE,但是這個預設的 iPXE 只有少少的功能,例如在無碟開機所需要的 iSCSI 功能沒有編進去。當然我們可以利用 DHCP + TFTP 送 iPXE Image 做 PXE chainloading,但是實務上就會遇到一些問題,最主要是無法確定現在用的究竟是哪個 iPXE,因為 user-class 通通都是 “iPXE”。

我的解決方案就是回歸使用 Intel PXE BootROM 這樣就能正常使用 PXE Chainloading 的功能導入功能完整的 iPXE。在 VirtualBox 的 Extension Pack 裡面就有提供 Intel 的 PXE BootROM。在安裝完 VirtualBox Extension Pack 之後,找找看 /usr/local/lib/lib 有沒有 virtualbox 資料夾。我使用 Archlinux,就可以找到 /lib/virtualbox/ExtensionPacks/Oracle_VM_VirtualBox_Extension_Pack 這個目錄,在裡面有個 PXE-Intel.rom 檔案,這就是 Intel 的 PXE BootROM,接著我們要設定 Guest 的網卡改用這個 PXE Image 開機。

設定的方式是透過 VBoxManage 這個指令:

1
vboxmanage setextradata Diskless10 VBoxInternal/Devices/pcbios/0/Config/LanBootRom /lib/virtualbox/ExtensionPacks/Oracle_VM_VirtualBox_Extension_PackPXE-Intel.rom

其中 Diskless10 是 Guest 的名稱,如果換成 global 那麼所有的 Guest 都會使用 Intel PXE BootROM。