You can use any of the commands found in the gPXE command line reference as instructions in a script file to boot your OS.
For example, http://etherboot.org/gtest/gtest.gpxe contains the following gPXE commands:
#!gpxe kernel http://etherboot.org/gtest/bz2bzImage root=100 initrd http://etherboot.org/gtest/initrd.bz2 boot
or using the 'chain' command, this would be equivalent to:
#!gpxe initrd http://etherboot.org/gtest/initrd.bz2 chain http://etherboot.org/gtest/bz2bzImage root=100
or this will boot from iSCSI:
#!gpxe sanboot iscsi:192.168.2.23::::iqn.1994-04.org.netbsd.iscsi-target:target1
gPXE normally fetches images over the network using TFTP, HTTP, iSCSI, or other network protocols. It is also possible to embed an image file inside gPXE and make it available without fetching over the network.
By embedding gPXE scripts, you can customize gPXE's behavior before its first network access. For example, static network configuration can be done by embedding a gPXE script.
Images are embedded when building gPXE with make
:
$ make EMBEDDED_IMAGE=../contrib/scripts/static.gpxe
This builds a gPXE image which executes the static.gpxe
script on startup. The static.gpxe
sample script works with QEMU's user network stack:
#!gpxe ifopen net0 set net0/ip 10.0.2.15 set net0/netmask 255.255.255.0 set net0/gateway 10.0.2.2 set net0/dns 10.0.2.3 kernel http://etherboot.org/gtest/gtest.gpxe boot
Multiple images can be embedded:
$ make EMBEDDED_IMAGE=../contrib/scripts/gpxelinux.gpxe,/usr/lib/syslinux/pxelinux.0
This builds a gPXE image which executes the gpxelinux.gpxe
script on startup. The gpxelinux.gpxe
script performs DHCP before loading the embedded pxelinux.0
image and executing it:
#!gpxe dhcp net0 imgload img1 boot
See the patched autoboot invocation for cases when the right interface to boot need to be found automatically.