GitHub PR #235 adds an advanced boot mechanism for UEFI machines which causes old Legacy BIOS nodes to hit the 3 GB RAM barrier in 32 Bit iPXE very quickly. Therefore, detect if an EFI or Legacy BIOS is loaded and fall back to the old boot path in the second case. This commit fixes GitHub issue #497.
109 lines
3.3 KiB
Plaintext
109 lines
3.3 KiB
Plaintext
#!ipxe
|
|
|
|
echo
|
|
echo ================================================================================
|
|
echo Warewulf v4 now booting: {{.Fqdn}} ({{.Hwaddr}})
|
|
echo
|
|
echo Container: {{.ContainerName}}
|
|
{{if .KernelOverride }}
|
|
echo Kernel: {{.KernelOverride}}
|
|
{{else}}
|
|
echo Kernel: {{.ContainerName}} (container default)
|
|
{{end}}
|
|
echo KernelArgs: {{.KernelArgs}}
|
|
echo
|
|
|
|
set uri_base http://{{.Ipaddr}}:{{.Port}}/provision/{{.Hwaddr}}?assetkey=${asset}&uuid=${uuid}
|
|
echo Warewulf Controller: {{.Ipaddr}}
|
|
|
|
echo Downloading Kernel Image:
|
|
kernel --name kernel ${uri_base}&stage=kernel || goto reboot
|
|
|
|
# imgextract causes RAM space problems on non-EFI systems (because of the 3GB barrier
|
|
# in 32-Bit mode).
|
|
# -> Use the old initrd method with a compressed image to save as much RAM as possible
|
|
# in this early boot stage.
|
|
# See <https://github.com/hpcng/warewulf/issues/222> for more details.
|
|
iseq ${platform} efi && goto efi || goto noefi
|
|
|
|
:efi
|
|
|
|
# try extracting compressed images first
|
|
# NOTE: system overlay tends to be the smallest, so failure here is the cheapest
|
|
echo Downloading Container Image:
|
|
imgextract --name container ${uri_base}&stage=container&compress=gz || goto nocompress
|
|
|
|
echo Downloading System Overlay:
|
|
imgextract --name system ${uri_base}&stage=system&compress=gz || goto reboot
|
|
|
|
echo Downloading Runtime Overlay:
|
|
imgextract --name runtime ${uri_base}&stage=runtime&compress=gz || goto reboot
|
|
|
|
{{if ne .KernelOverride "" -}}
|
|
echo Downloading Kernel Modules:
|
|
imgextract --name kmods ${uri_base}&stage=kmods&compress=gz || goto reboot
|
|
{{- end}}
|
|
|
|
goto imoktogo
|
|
|
|
:nocompress
|
|
|
|
echo
|
|
echo Image extract not supported in this iPXE, using standard initrd mode
|
|
|
|
echo Downloading Container Image:
|
|
initrd --name container ${uri_base}&stage=container || goto reboot
|
|
|
|
echo Downloading System Overlay:
|
|
initrd --name system ${uri_base}&stage=system || goto reboot
|
|
|
|
echo Downloading Runtime Overlay:
|
|
initrd --name runtime ${uri_base}&stage=runtime || goto reboot
|
|
|
|
{{if ne .KernelOverride "" -}}
|
|
echo Downloading Kernel Modules:
|
|
initrd --name kmods ${uri_base}&stage=kmods || goto reboot
|
|
{{- end}}
|
|
|
|
goto imoktogo
|
|
|
|
:noefi
|
|
|
|
echo
|
|
echo Use legacy initrd mode with compressed images
|
|
|
|
echo Downloading Container Image:
|
|
initrd --name container ${uri_base}&stage=container&compress=gz || goto reboot
|
|
|
|
echo Downloading System Overlay:
|
|
initrd --name system ${uri_base}&stage=system&compress=gz || goto reboot
|
|
|
|
echo Downloading Runtime Overlay:
|
|
initrd --name runtime ${uri_base}&stage=runtime&compress=gz || goto reboot
|
|
|
|
{{if ne .KernelOverride "" -}}
|
|
echo Downloading Kernel Modules:
|
|
initrd --name kmods ${uri_base}&stage=kmods&compress=gz || goto reboot
|
|
{{- end}}
|
|
|
|
|
|
:imoktogo
|
|
|
|
echo Booting in 3s...
|
|
{{if ne .KernelOverride "" -}}
|
|
echo boot kernel initrd=container initrd=kmods initrd=system initrd=runtime wwid={{.Hwaddr}} {{.KernelArgs}}
|
|
sleep 3
|
|
boot kernel initrd=container initrd=kmods initrd=system initrd=runtime wwid={{.Hwaddr}} {{.KernelArgs}} || goto reboot
|
|
{{- else -}}
|
|
echo boot kernel initrd=container initrd=system initrd=runtime wwid={{.Hwaddr}} {{.KernelArgs}}
|
|
sleep 3
|
|
boot kernel initrd=container initrd=system initrd=runtime wwid={{.Hwaddr}} {{.KernelArgs}} || goto reboot
|
|
{{- end}}
|
|
|
|
:reboot
|
|
echo
|
|
echo There was an error, rebooting in 15s...
|
|
echo
|
|
sleep 15
|
|
reboot
|