[syslinux] Confusion on lpxelinux vs. gpxelinux vs. ipxe vs gpxe.
Gene Cumm
gene.cumm at gmail.com
Sat Oct 24 16:38:29 PDT 2015
On Sat, Oct 24, 2015 at 4:57 PM, Doug Scoular via Syslinux
<syslinux at zytor.com> wrote:
> Hi All,
> I've been trying to understand how to use pxechn.c32 to chain a local
> pxelinux menu item to a remote server which has it's own pxelinux hierarchy
> served via TFTP and HTTP.
>
> We have no control over DHCP next-server and filename fields so I wanted to
> exploit the "prefix" -p option that pxechn.c32 accepts.
Remember, pxechn.c32 option "-p" is a shortcut to set DHCP option 210.
I see I did make this note in doc/pxechn.txt.
> I spent a long time hitting my head against a brick wall until I recompiled
> with various DEBUG macros set... my pxechn stanza looked like this:
>
> # Test Doug's chaining...
> LABEL chain018
> MENU LABEL ^Doug's REMOTE lpxelinux.
> KERNEL pxechn.c32
> APPEND
> http://wwwin-kickstart.remote.com/tftpboot/dscoular/syslinux/lpxelinux.0 -p
> http://wwwin-kickstart.remote.com/tftpboot/dscoular/syslinux
Which is likely an unintended error.
> With DEBUG set I could see that my local lpxelinux.0 would successfully
> load pxechn.c32, then pxechn.c32 would load the remote lpxelinux.0 via
> HTTP... but then it would fail to find it's needed ldlinux.c32.
>
> It took a wireshark packet dump to discover that the pxechn "prefix" -p
> option *MUST* be given a trailing slash (ouch):
>
> HTTP/1.1 404 Not Found
> The requested URL /tftpboot/dscoular/syslinuxldlinux.c32 was not found
> on this server.
>
> Adding the trailing slash solved our issues and we were able to load the
> remote lpxelinux.0 and have it use our remote .../syslinux/pxelinux.cfg.
> Hurray!
Almost always it should need a trailing slash.
> However, I'm left feeling a bit confused about all the Network Boot
> Programs mentioned in the syslinux documentation. I'd like to try and
> summarise my understanding here and have someone in the know correct any
> mistaken impressions I have (no doubt quite a few).
>
> So for syslinux 6.03 we have the following syslinux config compatible
> Network Boot Programs which can load com32 modules:
>
> 1. pxelinux.0 - a syslinux Network Boot program that only understands TFTP
> not HTTP or FTP, etc.
> 2. lpxelinux.0 - a syslinux Network Boot program linked against the
> light-weight TCP/IP (lwIP) stack. Offering fast HTTP, FTP, etc.
> 3. gpxelinux.0 - a syslinux Network Boot program linked against another
> Network Boot Program's implementation of HTTP (gpxe). Possibly problematic
> and slow on VMs.
Mostly right. gpxelinux.0 is pxelinux.0 wrapped inside gPXE.
pxelinux.0 can use gPXE/iPXE callbacks regardless of how they're
loaded.
I believe lpxelinux.0 had some reported issues in the past with
patches that should have resolve this but I don't think there's been
quite as much testing as we'd like.
> We also have a gpxecmd.c32 which doesn't seem to be documented in the
> "modules" section of the syslinux wiki.
Executes an arbitrary gPXE/iPXE command through callbacks.
> As separate projects we appear to have:
>
> 1. gpxe - a mothballed Network Boot Program but with a possibly problematic
> and slow HTTP implementation.
> 2. ipxe - an active fork of gpxe but still with the possibly problematic
> and slow HTTP implementation (?)
>
> I presume that for pxechn.c32 to use HTTP, then it has to have been loaded
> either by gpxelinux.0 or, preferably lpxelinux.0 with it's shiny new lwIP
> stack or is pxechn independent loading it's own lwIP stack through ldlinux
> or another library module ?
pxechn.c32 just calls the Syslinux file calls. It's up to the
Syslinux variant to interpret the filename. Feeding pxelinux.0 an
HTTP URL without gPXE/iPXE to call for HTTP may result in some
interesting file retrieval attempts against the TFTP server.
> I see mentions of both iPXE and gPXE in the comments in the source.
>
> I note that if I try to use pxechn.c32 to load gpxelinux.0 it seems to
> ignore the "prefix" -p argument and for older versions my test VM seems to
> freeze.
>
> I further note that when I successfully pxechn to a remote lpxelinux.0 it
> doesn't seem to be quite as verbose as pxelinux.0 once was about the search
> enumerations it makes in it's sibling pxelinux.cfg directory, which I miss:
>
> /mybootdir/pxelinux.cfg/b8945908-d6a6-41a9-611d-74a6ab80b83d
> /mybootdir/pxelinux.cfg/01-88-99-aa-bb-cc-dd
> /mybootdir/pxelinux.cfg/C0A8025B
> /mybootdir/pxelinux.cfg/C0A8025
> /mybootdir/pxelinux.cfg/C0A802
> /mybootdir/pxelinux.cfg/C0A80
> /mybootdir/pxelinux.cfg/C0A8
> /mybootdir/pxelinux.cfg/C0A
> /mybootdir/pxelinux.cfg/C0
> /mybootdir/pxelinux.cfg/C
> /mybootdir/pxelinux.cfg/default
This looks like the old behavior that didn't rewrite a single line.
> Any thoughts and/or detailed clarification of how all the various bits of
> the puzzle fit hugely appreciated. Sorry to ask so many questions...
Hope this helps.
--
-Gene
More information about the Syslinux
mailing list