Browse Source

Change ipxe-boot image to try all interfaces

The current implementation will only try an iPXE
boot from eth0. This patch sets it to try all
interfaces up to 10 attempts, then reboots and
starts again.

Change-Id: I9259a275f5f1f248905755ec5955ace5b67fc2bd
Jesse Pretorius (odyssey4me) 1 year ago
committed by Jiri Stransky
1 changed files with 12 additions and 21 deletions
  1. +12

+ 12
- 21
ipxe/script.ipxe View File

@@ -3,14 +3,14 @@
# This is the iPXE boot script that we embed into the iPXE binary.
# The default behaviour is to get DHCP and assume that DHCP includes
# the filename option. If it fails, then it just stops.
# the filename option. It will only try eth0. If it fails, then it
# just stops.
# This script implements more retries until both DHCP and the filename
# option are present. This makes sure that the underlying network has
# plenty of time to be ready. If this still fails, then rather than
# halt, then host will reboot to try again.
# This script makes it attempt to boot from eth0. If that fails, it
# will try the next interface. This will retry 10 times before
# rebooting.
# Based on:
# Inspired by:

@@ -19,25 +19,16 @@ prompt --key 0x02 --timeout 2000 Press Ctrl-B for the iPXE command line... && sh
set attempts:int32 10
set x:int32 1

dhcp || goto nodhcp
isset ${filename} || goto nobootconfig
autoboot || goto retry
goto boot

echo -n No DHCP response
goto retry

echo -n No filename option present
goto retry

echo (attempt ${x}/${attempts}).
echo iPXE boot failed, retrying (attempt ${x}/${attempts}).
sleep 1
iseq ${x} ${attempts} && goto fail ||
inc x
sleep 1
goto dhcploop
goto loop

echo Booting using ${ifname}.
@@ -53,7 +44,7 @@ echo Set MTU to ${mtu}.
chain ${filename}

echo Failed to get a correct DHCP response after ${attempts} attempts.
echo Failed to iPXE boot successfully after ${attempts} attempts.
echo Rebooting in 5 seconds...
sleep 5