mirror of
https://github.com/danderson/netboot.git
synced 2025-08-11 09:07:12 +02:00
Only boot with ipxe.pxe if we're chainloading from another iPXE. #63
undionly.kpxe doesn't work if you chainload from a native iPXE, but it's required for physical machines with NICs that iPXE doesn't natively support. In my previous attempt to handle Virtualbox's crippled iPXE, I switched all BIOS-based boots to use ipxe.pxe. This was a bad idea, so now instead we specifically recognize third-party iPXE builds, and only chainload *those* with ipxe.pxe, and stick with undionly.kpxe for the rest.
This commit is contained in:
parent
a44cef6d7b
commit
b7411f3ed3
@ -21,9 +21,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
cli.Ipxe[pixiecore.FirmwareX86PC] = ipxe.MustAsset("ipxe.pxe")
|
cli.Ipxe[pixiecore.FirmwareX86PC] = ipxe.MustAsset("undionly.kpxe")
|
||||||
cli.Ipxe[pixiecore.FirmwareEFI32] = ipxe.MustAsset("ipxe-i386.efi")
|
cli.Ipxe[pixiecore.FirmwareEFI32] = ipxe.MustAsset("ipxe-i386.efi")
|
||||||
cli.Ipxe[pixiecore.FirmwareEFI64] = ipxe.MustAsset("ipxe-x86_64.efi")
|
cli.Ipxe[pixiecore.FirmwareEFI64] = ipxe.MustAsset("ipxe-x86_64.efi")
|
||||||
cli.Ipxe[pixiecore.FirmwareEFIBC] = ipxe.MustAsset("ipxe-x86_64.efi")
|
cli.Ipxe[pixiecore.FirmwareEFIBC] = ipxe.MustAsset("ipxe-x86_64.efi")
|
||||||
|
cli.Ipxe[pixiecore.FirmwareX86Ipxe] = ipxe.MustAsset("ipxe.pxe")
|
||||||
cli.CLI()
|
cli.CLI()
|
||||||
}
|
}
|
||||||
|
@ -168,6 +168,11 @@ func (s *Server) offerDHCP(pkt *dhcp4.Packet, mach Machine, serverIP net.IP, cli
|
|||||||
resp.BootServerName = serverIP.String()
|
resp.BootServerName = serverIP.String()
|
||||||
resp.BootFilename = fmt.Sprintf("%s/%d", mach.MAC, fwtype)
|
resp.BootFilename = fmt.Sprintf("%s/%d", mach.MAC, fwtype)
|
||||||
case clientSoftwareIPXE:
|
case clientSoftwareIPXE:
|
||||||
|
// TODO: this selection logic is getting increasingly messy,
|
||||||
|
// it needs a refactor.
|
||||||
|
if fwtype == FirmwareX86PC {
|
||||||
|
fwtype = FirmwareX86Ipxe
|
||||||
|
}
|
||||||
resp.BootFilename = fmt.Sprintf("tftp://%s/%s/%d", serverIP, mach.MAC, fwtype)
|
resp.BootFilename = fmt.Sprintf("tftp://%s/%s/%d", serverIP, mach.MAC, fwtype)
|
||||||
case clientSoftwarePixiecoreIPXE:
|
case clientSoftwarePixiecoreIPXE:
|
||||||
resp.BootFilename = fmt.Sprintf("http://%s:%d/_/ipxe?arch=%d&mac=%s", serverIP, s.HTTPPort, mach.Arch, mach.MAC)
|
resp.BootFilename = fmt.Sprintf("http://%s:%d/_/ipxe?arch=%d&mac=%s", serverIP, s.HTTPPort, mach.Arch, mach.MAC)
|
||||||
|
@ -148,6 +148,10 @@ const (
|
|||||||
FirmwareEFI32 = 6 // 32-bit x86 processor running EFI
|
FirmwareEFI32 = 6 // 32-bit x86 processor running EFI
|
||||||
FirmwareEFI64 = 7 // 64-bit x86 processor running EFI
|
FirmwareEFI64 = 7 // 64-bit x86 processor running EFI
|
||||||
FirmwareEFIBC = 9 // 64-bit x86 processor running EFI
|
FirmwareEFIBC = 9 // 64-bit x86 processor running EFI
|
||||||
|
|
||||||
|
// This is a "fictional" firmware, representing an x86 BIOS
|
||||||
|
// running iPXE, which does not have UNDI available.
|
||||||
|
FirmwareX86Ipxe = 42
|
||||||
)
|
)
|
||||||
|
|
||||||
var fwToArch = map[Firmware]Architecture{
|
var fwToArch = map[Firmware]Architecture{
|
||||||
@ -155,6 +159,8 @@ var fwToArch = map[Firmware]Architecture{
|
|||||||
FirmwareEFI32: ArchIA32,
|
FirmwareEFI32: ArchIA32,
|
||||||
FirmwareEFI64: ArchX64,
|
FirmwareEFI64: ArchX64,
|
||||||
FirmwareEFIBC: ArchX64,
|
FirmwareEFIBC: ArchX64,
|
||||||
|
|
||||||
|
FirmwareX86Ipxe: ArchIA32,
|
||||||
}
|
}
|
||||||
|
|
||||||
// A Server boots machines using a Booter.
|
// A Server boots machines using a Booter.
|
||||||
|
6
third_party/Makefile
vendored
6
third_party/Makefile
vendored
@ -5,11 +5,11 @@ ipxe:
|
|||||||
git clone git://git.ipxe.org/ipxe.git
|
git clone git://git.ipxe.org/ipxe.git
|
||||||
(cd ipxe && git rev-parse HEAD >COMMIT-ID)
|
(cd ipxe && git rev-parse HEAD >COMMIT-ID)
|
||||||
rm -rf ipxe/.git
|
rm -rf ipxe/.git
|
||||||
(cd ipxe/src && make bin/ipxe.pxe EMBED=../../../pixiecore/boot.ipxe)
|
(cd ipxe/src &&\
|
||||||
(cd ipxe/src && make bin-x86_64-efi/ipxe.efi EMBED=../../../pixiecore/boot.ipxe)
|
make bin/ipxe.pxe bin/undionly.kpxe bin-x86_64-efi/ipxe.efi bin-i386-efi/ipxe.efi EMBED=../../../pixiecore/boot.ipxe)
|
||||||
(cd ipxe/src && make bin-i386-efi/ipxe.efi EMBED=../../../pixiecore/boot.ipxe)
|
|
||||||
(cd ipxe && rm -rf bin && mkdir bin)
|
(cd ipxe && rm -rf bin && mkdir bin)
|
||||||
mv -f ipxe/src/bin/ipxe.pxe ipxe/bin/ipxe.pxe
|
mv -f ipxe/src/bin/ipxe.pxe ipxe/bin/ipxe.pxe
|
||||||
|
mv -f ipxe/src/bin/undionly.kpxe ipxe/bin/undionly.kpxe
|
||||||
mv -f ipxe/src/bin-x86_64-efi/ipxe.efi ipxe/bin/ipxe-x86_64.efi
|
mv -f ipxe/src/bin-x86_64-efi/ipxe.efi ipxe/bin/ipxe-x86_64.efi
|
||||||
mv -f ipxe/src/bin-i386-efi/ipxe.efi ipxe/bin/ipxe-i386.efi
|
mv -f ipxe/src/bin-i386-efi/ipxe.efi ipxe/bin/ipxe-i386.efi
|
||||||
go-bindata -o ipxe/ipxe-bin.go -pkg ipxe -nometadata -nomemcopy -prefix ipxe/bin/ ipxe/bin
|
go-bindata -o ipxe/ipxe-bin.go -pkg ipxe -nometadata -nomemcopy -prefix ipxe/bin/ ipxe/bin
|
||||||
|
8
third_party/ipxe/ipxe-bin.go
vendored
8
third_party/ipxe/ipxe-bin.go
vendored
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user