=====Etherboot command-line===== ====Network Interfaces==== Etherboot names interfaces following the pattern "net#". The special network interface alias "netX" refers to the last opened network interface. **ifstat [interfaces...]** Displays information and statistics about the specified interface. If no interface is specified, displays information about all detected interfaces. Information includes MAC address, PCI bus/slot/function identiers, and packet counts. **ifopen [interfaces...]** Opens the specified interfaces. If no interface is specified, opens all interfaces. **ifclose [interfaces...]** Closes the specified interfaces. If no interface is specified, closes all interfaces. **dhcp ** Attempts to configure the specified network interface using DHCP. Also opens the interface. ====Working with images==== **imgfetch [-n|--name ] [arguments...]** Retrieves an image file, giving it a specified name, and prepares it to be executed with the specified arguments. File name may be a simple path, or an HTTP URL. Simple paths are assumed to be located on the TFTP server specified by dhcp or the **filename** configuration setting. If //image name// is not specified, the base filename will be used as the name. **module [-n|--name ] [arguments...]** Equivalent to **imgfetch** **initrd [-n|--name ] [arguments...]** Equivalent to **imgfetch** **imgargs ** Set or change the arguments for the specified image name. **imgload ** Prepares an executable image to be booted. Executable image formats: * gPXE script * NBI image * PXE image * MultiBoot image * a.out image * ELF image * WinCE image * FreeBSD kernel * Linux bzImage kernel **imgexec [image name]** Execute the loaded image, or a specified image. If more than one image is loaded, the image must be specified. **Note**, if the specified image is not the most recently loaded one, Bad Things will almost certainly happen. This should only be done in special cases. **boot [image name]** Equivalent to **imgexec** **chain [image name/URI]** This will fetch, load, then execute either an embedded image or one specified by the URI. Equivalent to **imgfetch**, then **imgload**, and then **imgexec**. **imgfree [image name]** Free one or all executable/loadable images. **imgstat** List images currently held in memory. **kernel [-n|--name ] [arguments]** Fetch and load a bzImage format Linux kernel. Equivalent to an **imgfetch** followed by **imgload**. ====Runtime configuration==== **config [scope]** Enter a GUI to set up runtime configuration. On some systems (cards) this may be stored in NVRAM. //Scope// allows the GUI to override or view specific subsets of options. (see below) **set ** Set the value of //identifier// to //value//. **show ** Display the value of //identifier// **clear ** Clear the value of //identifier// ===Identifiers=== Identifiers could be considered "variables" in the gPXE shell (CLI and scripts). You can type: ${identifier} as part of a command, and it will be substituted for the fetched setting corresponding to that identifier. For example: chain http://${next-server}/boot.php?mac=${net0/mac} is a command which would have the //next-server// setting substituted into the URI, as well as pass the //net0// interface's MAC address as a parameter to a PHP script on the web-server. All identifiers are set within a scope. * **root** (scope unspecified) * **proxydhcp** Settings from a Proxy DHCP server (Needs more description) * **[interface]** e.g. //net0//. Settings for a network device. * **[interface].dhcp**. Settings from the DHCP server acquired by //interface//. Read/write, but note that you cannot specify new options that were not already provided. * **[interface].nvo**. Read/write settings in NVRAM on certain supported cards. **//WARNING//** this permanently modifies settings on your network card. It is possible to **damage** your network card by changing settings in this context. Use at your own risk. * **smbios**. Read-only access to settings in the System Management BIOS (see below) Identifiers follow the format [scope/]identifier[:type]. For example, to set the IP address of the 'net0' card use //set net0/ip XXX.XXX.XXX.XXX// Options not specified in a higher scope will be read from a lower one. So if the option //ip// is unspecified, it will be read from //net0/ip//; if the option //net0/ip// is unspecified, it will be read from //net0.dhcp//. ==Root== **hostname** The system's hostname. Sent to the DHCP server for dynamic DNS changes, or specified by the DHCP server. Equivalent to DHCP option 12 (host name) **filename** The boot image to be loaded. Equivalent to DHCP option 67 (Bootfile name) **root-path** NFS/iSCSI root path. The path to a network root filesystem. Equivalent to DHCP option 17 (Root Path) iSCSI root path syntax: iscsi::[protocol]:[port]:[LUN]: **username** Username to be used for any authentication. Currently only used by iSCSI. **password** Password to be used for any authentication. Currently only used by iSCSI. Intended to be stored in card NVRAM, but see warning above. **priority** ==Network device== **ip** The device's IPv4 address **netmask** The device's IPv4 subnet mask **gateway** The device's default gateway **mac** The device's MAC address **dhcp-server** The dhcp server from which settings were obtained **dns** The DNS server to use for resolving hostnames **next-server** The (TFTP) server from which to obtain files when not specifying an HTTP URL **initiator-iqn** The iSCSI initiator name **:** Set a DHCP option by its number (ie. //209:string// for PXELINUX config file override) **busid** This yields a five-byte hexadecimal code representing the adapter's bus type, followed by the two-byte vendor ID, followed by the two-byte device ID. This could be handy for fetching an initrd or other RAM disk image containing the OS driver for the particular network adapter. For example: gPXE> initrd http://webserver/initrd-${net0/busid} ==SMBIOS== Read-only access to the system's Systems Management BIOS. Identifiers follow the format ..:. Example: To read the Manufacturer name, //get smbios/1.4.0:string// will read SMBIOS offset 4 as a string. Valid formats: string, uristring (for URI-friendly string format), ipv4, int8, int16, int32, uint8, uint16, uint32, hex, uuid **uuid** The system's UUID ====Other==== **autoboot** Attempts to boot the system, on each network interface in turn, as follows: * Wait for a link on ethernet * Configure via DHCP * Download (and exec) the DHCP-specified boot filename * Boot from the DHCP-specified root path, using iSCSI or ATA-over-Ethernet (AoE) **exit** Exits gPXE, and passes boot control back to the BIOS, which generally attempts to boot the system using the next available boot method. **sanboot** Attempts to boot the system from a SAN device (iSCSI or AoE) using the DHCP-specified root path. ====Outstanding questions==== * What does autoboot do? Does it simply execute a script, pre-defined at compile time? Does it follow its own sequence of boot operations? > Autoboot is a hardcoded boot policy (at least in gPXE 0.9.7), with behavior as described above. Eventually it would be nice to implement it as the default embedded gPXE script so it can be easily customized by users. Today, if you don't like autoboot's behavior, you can try embedding a gPXE script (which will take precedence over autoboot). You would have to modify the gPXE source code if scripts were not powerful enough for the behavior you want. -- [[stefanha@gmail.com|Stefan Hajnoczi]] 2009/03/24 * When multiple images of the same name are fetched, which one will takes precedence?