Skip to content

Custom iPXE

Equinix Metalâ„¢ supports passing custom iPXE scripts during provisioning, which allows you to install a custom operating system manually. When you provision a server, Equinix Metal first loads a custom iPXE build that will serve up the chain-loaded iPXE script URL that you specify.

Provisioning with Custom iPXE

To provision an On Demand server with custom iPXE using the Equinix Metal console, select Custom iPXE from the options under Select an Operating System. If you have your iPXE script hosted at a publicly accessible http(s) location, put the URL to your script in the text field.

Toggle the switch to set your server to persistently boot from iPXE if you need to. Should the server fail during iPXE boot, you can edit your iPXE URL and reboot the server to try again.

Alternatively, you can leave the field blank and pass the contents of your iPXE script into User Data field (under Optional Settings) with the #!ipxe hashbang.

#!ipxe

chain -ar https://boot.netboot.xyz/

Click Deploy Now to provision your server.

Provisioning Custom iPXE in the API

If you are using the Equinix Metal API to provision servers, you can use Custom iPXE by passing the URL in to the ipxe_script_url field in the body of your request.

curl -X POST \
-H "Content-Type: application/json" \
-H "X-Auth-Token: <API_TOKEN>" \
"https://api.equinix.com/metal/v1/projects/{id}/devices" \
-d '{
    "facility": "<facility_code>",
    "plan": "<server_type>",
    "operating_system": "<os_code>",
    "always_pxe": true,
    "ipxe_script_url": "https://boot.netboot.xyz/"
}'

Initial Boot

After serving up iPXE via DHCP, the device will be marked as active in our API and portal. Since the server is sitting on the boot loader and it has no SSH access, use the Equinix Metal Out-of-Band Console to access the server

ssh device-id@sos.facility-code.packet.net

If you would like to interact with your device via S.O.S. to perform a manual install and are not using netboot.xyz, our x86 servers require console=ttyS1,115200n8, and our aarch64 servers require console=ttyAMA0,115200.

DHCP is available during a Custom iPXE device's entire life, so you can get network configuration via DHCP and then setup networking statically in the OS by discovering the IP address information from the metadata service. From the host server, run curl https://metadata.packet.net/metadata.

If something is wrong and you are unable to access your server, use the Edit Instance Details in the server Overview. You can change your iPXE behavior on boot, edit your iPXE script, and then reboot the server with the new configuration.

Using netboot.xyz

If you're using netboot.xyz to manually install your operating system, connect to the Equinix Metal Out-of-Band Console for the menu of OS options.

                                  netboot.xyz

   Default:
      Boot from local hdd                                               (283)
   Distributions:
      Linux Network Installs
      Live CDs
      BSD Installs
      Unix Network Installs
   Tools:
      Architecture: x86_64 (64bit)
      iPXE shell
      Network card info
      PCI Device List
      About netboot.xyz
   Signature Checks:
      netboot.xyz [ enabled: true ]

Information about the operating systems that are available through netboot.xyz is in their GitHub Readme.

If you want to install an operating system that is not listed, and it's distributed with an ISO, you can install it by selecting the iPXE shell option and entering the commands:

kernel https://boot.netboot.xyz/memdisk iso raw
initrd http://url/to/iso
boot

Be aware that the netboot.xyz docs mention that it is possible (likely) that installation will fail. If it fails during initramfs trying to load the CD device, update the install media to look for install media on the memdisk. More information about this issue can be found in a reversengineered.com article.

packet-cli with Netboot.xyz

packet-cli device create \
  --hostname netboot-custom-ipxe \
  --plan c3.small.x86 \
  --facility any \
  --operating-system custom_ipxe \
  --project-id "$PACKET_PROJECT" \
  --userdata='#!ipxe
chain -ar https://boot.netboot.xyz'

Persisting PXE

When provisioning the Custom iPXE kicks off, the next boot option is to PXE on first boot. By default, this PXE process only happens once on the first boot. To set your device to continuously boot to iPXE first, use the toggle under Custom iPXE Settings or when provisioning, or from Server Actions or Edit Instance Details after provisioning.

If true, PXE will persist as the first boot option past initial provisioning reboots. This is great for testing your iPXE provisioning script and lays the foundation for future, "always-pxe-based OS's" on Equinix Metal.