( uid_2716 | 2021. 04. 20., k – 18:22 )

Ahhoz, hogy OVMF-ből (a guest UEFI firmware-ből) PXE boot-olni tudj, a firmware-nek szüksége van egy SNP (Simple Network Protocol) driver-re. Az OVMF tartalmazza a hardverfüggetlen (magasabb szintű) edk2 hálózati driver-eket, de a legalsó réteg (SNP) hardverfüggő. Az OVMF ilyen drivert beépítve csak a virtio-net device model-hez tartalmaz, amely viszont csak QEMU-n van, Xen-en nincs.

Xen-en van paravirt NIC ("netfront" a guest felől nézve), illetve (a doksi szerint) emulált e1000 és rtl8139 (az utóbbi az alapértelmezés, ha jól értem a doksit). Ebből a háromból azt kell választani, amelyhez mind a guest firmware-nek van meghajtója (SNP, ld. fent), mind a guest OS-nek van meghajtója (OS natív). A paravirtualizált (=netfront) Xen NIC ebben az esetben sejtésem szerint elfelejthető, a maradékból (e1000 és rtl8139) kell választani. Tudtommal Windows guest-hez általában e1000-t választanak, úgyhogy azt javasolnám.

Ahogy említettem, az OVMF-ben nincs beépített e1000 driver, csak a virtio-net-hez van (forrása: OvmfPkg/VirtioNetDxe). Három megoldás létezik e1000 használataára:

  1. Letöltöd az Intel-től a proprietary e1000 firmware (SNP) driver-t, és fordítasz magadnak egy OVMF binárist, amiben a driver benne foglaltatik (-D E1000_ENABLE). Ez működhet, de a firmware binárist nincs jogod terjeszteni.
  2. Letöltöd az Intel-től a proprietary e1000 firmware (SNP) driver-t (régebben PROEFI volt a neve; amikor legutóbb néztem, akkor BootUtil-nak hívták), és megpróbálod meggyőzni az xcp-ng-t, hogy a megfelelő UEFI driver binárist a VM indításakor betöltse a NIC-nek a PCI ROM BAR-jába (ahonnan az OVMF platform firmware majd lefuttatja).
  3. A nyílt forrású iPXE projektből fordítasz egy olyan lecsupaszított e1000 UEFI driver-t, amely nem tartalmaz iPXE képességeket a fent nevezett Simple Network Protocol implementáción túl. Majd ezt az iPXE binárist a 2-es ponthoz hasonlóan betölteted az xcp-ng-vel a NIC PCI ROM BAR-jába.

Az upstream QEMU projektből a 3. ponthoz szükséges iPXE driver binárist egyből kihalászhatod (nem kell iPXE fordítással vesződnöd): "pc-bios/efi-e1000.rom".

Részletek: https://github.com/tianocore/edk2/blob/d3b0d007a135284981fa750612a47234…

A fenti nyűglődés természetesen nem a felhasználók feladata lenne, hanem az xcp-ng csomag(ok)nak kellene biztosítani mindezt.

Xen-t egyébként utoljára ~9 éve használtam, úgyhogy "caveat lector".

A fentiek a PXE kliensre vonatkoznak. A szerver (PXE/TFTP és DHCP) beállítása külön fejezet; a szerver konfigjának ki kell elégítenie az edk2 PXE kliens elvárásait ahhoz, hogy a kliens megtalálja az ISO-t, és le is töltse.

(ISO letöltéséhez megfelelő mennyiségű RAM kell a VM-nek.)