Thanks to Andrew for his help.  Here is a complete summary of the
problem and solution for the benefit of the mailing list archives.
--

PROBLEM: I have a legacy PXE (DHCP/TFTP) environment in which I'm
booting nodes both via SYSLINUX (pxelinux.0) for diagnostics boots and
PXEGRUB (nbp.SUNW.i86pc) to boot Solaris.  I'm tired of switching
between these manually and instead want an programatic method.  DHCP
tricks via execute() scripts in dhcpd.conf calling 'omshell' to change
records sucks.  gPXE offers a solution, but gPXE scripts from HTTP
interpret "chain pxelinux.0" instead as "chain
http://${next-server}/pxelinux.0";, which fails of course.  How do I
explicitly use TFTP even from an HTTP gPXE boot script?


SOLUTION:  Use the (poorly or not documented) "tftp://server/path"; URI
syntax in your gPXE scripts.  Do not assume that paths not prefixed with
"http://"; are interpreted as TFTP as has been oft stated.

Additionally, clear "net0.dhcp/filename", as this can be passed to other
bootloaders and do things you don't expect.


DETAIL:  I'm currently testing with the gPXE 1.0.0 undi-only kpxe image
from (the awesome) rom-o-matic.net.  Here is the applicable dhcpd.conf
setup:

group "gpxe" {
  next-server 192.168.100.20;

  if exists user-class and option user-class = "gPXE" {
        filename "http://192.168.100.20/boot.gpxe";;
  } else {
        filename "gpxe-1.0.0-undionly.kpxe";            # ROM-O-MATIC 1.0.0
  }
}

host test710 {
  hardware ethernet XX:XX:XX:XX:DD:75; #obscured for this mail, just
because.
  fixed-address 192.168.100.101;
  group "gpxe";
}

Here is the content of http://192.168.100.20/boot.gpxe:

#!gpxe
imgfree
clear net0.dhcp/filename  # If this isn't cleared, PXELINUX will pick it
up as the configuration path prefix.
clear filename # This should be cleared by the previous line, but clear
this too for good measure
echo
echo Hello ${manufacturer} ${product} ${serial}
echo
chain http://${next-server}/${serial}.gpxe

This is currently my pre-CGI test setup, so it redirect the client to a
static gpxe script.  Eventually this will instead be PHP, but here is my
script for the test node, xxxxxxx.gpxe:

#!gpxe

echo
echo Attempting to load PXEGRUB (Solaris)
echo
set 150:string menu.lst.TEST # Set this if you want a non-default
menu.lst for PXEGRUB
chain tftp://${next-server}/nbp.SUNW.i86pc

#echo
#echo Attempting to load SYSLINUX (DTK)
#echo
#chain tftp://${next-server}/pxelinux.0

And thats it!  Uncomment the first block and I boot into PXEGRUB,
uncomment the second block for PXELINUX.


SOFTWARE: For the curious, I'm doing this on OpenSolaris with gPXE
1.0.0, ISC DHCP 4.1.1-P1, Solaris TFTP, GNU GRUB 0.97 (included with
OpenSolaris), and PXELINUX 3.63 ( which I ripped out of Debian-2008-07-15).

Big thanks to everyone at Etherboot for such an awesome tool and the
gPXE community for helping out us n00bs.

benr.
_______________________________________________
gPXE mailing list
gPXE@etherboot.org
http://etherboot.org/mailman/listinfo/gpxe

Reply via email to