1                               PXELINUX
2
3    A bootloader for Linux using the PXE network booting protocol
4
5       Copyright 1994-2008 H. Peter Anvin - All Rights Reserved
6       Copyright 2009-2011 Intel Corporation; author: H. Peter Anvin
7
8This program is provided under the terms of the GNU General Public
9License, version 2 or, at your option, any later version.  There is no
10warranty, neither expressed nor implied, to the function of this
11program.  Please see the included file COPYING for details.
12
13This documentation file is slightly out of date; please check the NEWS
14file for changes.
15
16----------------------------------------------------------------------
17
18PXELINUX is a Syslinux derivative, for booting Linux off a network
19server, using a network ROM conforming to the Intel PXE (Pre-Execution
20Environment) specification.  PXELINUX is *not* a program that is
21intended to be flashed or burned into a PROM on the network card; if
22you want that, check out Etherboot (http://www.etherboot.org/).
23Etherboot 5.4 or later can also be used to create a PXE-compliant boot
24PROM for many network cards.
25
26
27    ++++ HOW TO CONFIGURE PXELINUX ++++
28
29PXELINUX operates in many ways like SYSLINUX.  If you are not familiar
30with SYSLINUX, read syslinux.txt first, since this documentation only
31explains the differences.
32
33On the TFTP server, create the directory "/tftpboot", and copy the
34following files to it:
35
36	pxelinux.0		- from the Syslinux distribution
37
38	any kernel or initrd images you want to boot
39
40Finally, create the directory "/tftpboot/pxelinux.cfg".  The
41configuration file (equivalent of syslinux.cfg -- see syslinux.txt for
42the options here) will live in this directory.  Because more than one
43system may be booted from the same server, the configuration file name
44depends on the IP address of the booting machine.  PXELINUX will
45search for its config file on the boot server in the following way:
46
47  First, it will search for the config file using the client UUID, if
48  one is provided by the PXE stack (note, some BIOSes don't have a
49  valid UUID, and you might end up with something like all 1's.)  This is
50  in the standard UUID format using lower case hexadecimal digits, e.g.
51  b8945908-d6a6-41a9-611d-74a6ab80b83d.
52
53  Next, it will search for the config file using the hardware type
54  (using its ARP type code) and address, all in lower case hexadecimal
55  with dash separators; for example, for an Ethernet (ARP type 1)
56  with address 88:99:AA:BB:CC:DD it would search for the filename
57  01-88-99-aa-bb-cc-dd.
58
59  Next, it will search for the config file using its own IP address
60  in upper case hexadecimal, e.g. 192.0.2.91 -> C000025B
61  (you can use the included progam "gethostip" to compute the
62  hexadecimal IP address for any host.)
63
64  If that file is not found, it will remove one hex digit and try
65  again.  Ultimately, it will try looking for a file named "default"
66  (in lower case).
67
68  As an example, if the boot file name is /mybootdir/pxelinux.0, the
69  UUID is b8945908-d6a6-41a9-611d-74a6ab80b83d, the Ethernet MAC
70  address is 88:99:AA:BB:CC:DD and the IP address 192.0.2.91, it will
71  try:
72
73	/mybootdir/pxelinux.cfg/b8945908-d6a6-41a9-611d-74a6ab80b83d
74	/mybootdir/pxelinux.cfg/01-88-99-aa-bb-cc-dd
75	/mybootdir/pxelinux.cfg/C000025B
76	/mybootdir/pxelinux.cfg/C000025
77	/mybootdir/pxelinux.cfg/C00002
78	/mybootdir/pxelinux.cfg/C0000
79	/mybootdir/pxelinux.cfg/C000
80	/mybootdir/pxelinux.cfg/C00
81	/mybootdir/pxelinux.cfg/C0
82	/mybootdir/pxelinux.cfg/C
83	/mybootdir/pxelinux.cfg/default
84
85  ... in that order.
86
87Note that all filename references are relative to the directory
88pxelinux.0 lives in.  PXELINUX generally requires that filenames
89(including any relative path) are 127 characters or shorter in length.
90
91Starting in release 3.20, PXELINUX will no longer apply a built-in
92default if it cannot find any configuration file at all; instead it
93will reboot after the timeout interval has expired.  This keeps a
94machine from getting stuck indefinitely due to a boot server failure.
95
96Starting in release 3.50, PXELINUX displays network information at
97the boot prompt pressing <Ctrl-N>.
98
99PXELINUX does not support MTFTP, and I have no plans of doing so, as
100MTFTP is inherently broken for files more than 65535 packets (about
10192 MB) in size.  It is of course possible to use MTFTP for the initial
102boot, if you have such a setup.  MTFTP server setup is beyond the
103scope of this document.
104
105
106    ++++ HTTP AND FTP DOWNLOADS ++++
107
108Since version 5.10, native pxelinux.0 can support HTTP and FTP
109transfers, greatly increasing load speed and allowing for standard
110HTTP scripts to present PXELINUX's configuration file.  To use http or
111ftp, use standard URL syntax as filename; use the DHCP options below
112to transmit a suitable URL prefix to the client, or use the
113"pxelinux-options" tool provided in the utils directory to program it
114directly into the pxelinux.0 file.
115
116
117    ++++ SETTING UP THE TFTP SERVER ++++
118
119For best results, use a TFTP server which supports the "tsize" TFTP
120option (RFC 1784/RFC 2349).  The "tftp-hpa" TFTP server, which support
121options, is available at:
122
123	http://www.kernel.org/pub/software/network/tftp/
124	ftp://www.kernel.org/pub/software/network/tftp/
125
126... and on any kernel.org mirror (see http://www.kernel.org/mirrors/).
127
128Another TFTP server which supports this is atftp by Jean-Pierre
129Lefebvre:
130
131	ftp://ftp.mamalinux.com/pub/atftp/
132
133If your boot server is running Windows (and you can't fix that), try
134tftpd32 by Philippe Jounin (you need version 2.11 or later; previous
135versions had a bug which made it incompatible with PXELINUX):
136
137	http://tftpd32.jounin.net/
138
139
140    ++++ SETTING UP THE DHCP SERVER ++++
141
142The PXE protocol uses a very complex set of extensions to DHCP or
143BOOTP.  However, most PXE implementations -- this includes all Intel
144ones version 0.99n and later -- seem to be able to boot in a
145"conventional" DHCP/TFTP configuration.  Assuming you don't have to
146support any very old or otherwise severely broken clients, this is
147probably the best configuration unless you already have a PXE boot
148server on your network.
149
150A sample DHCP setup, using the "conventional TFTP" configuration,
151would look something like the following, using ISC dhcp 2.0 dhcpd.conf
152syntax:
153
154        allow booting;
155        allow bootp;
156
157	# Standard configuration directives...
158
159        option domain-name "<domain name>";
160        option subnet-mask <subnet mask>;
161        option broadcast-address <broadcast address>;
162        option domain-name-servers <dns servers>;
163        option routers <default router>;
164
165	# Group the PXE bootable hosts together
166	group {
167		# PXE-specific configuration directives...
168		next-server <TFTP server address>;
169		filename "/tftpboot/pxelinux.0";
170
171		# You need an entry like this for every host
172		# unless you're using dynamic addresses
173	        host <hostname> {
174		        hardware ethernet <ethernet address>;
175			fixed-address <hostname>;
176		}
177	}
178
179Note that if your particular TFTP daemon runs under chroot (tftp-hpa
180will do this if you specify the -s (secure) option; this is highly
181recommended), you almost certainly should not include the /tftpboot
182prefix in the filename statement.
183
184If this does not work for your configuration, you probably should set
185up a "PXE boot server" on port 4011 of your TFTP server; a free PXE
186boot server is available at:
187
188	http://www.kano.org.uk/projects/pxe/
189
190With such a boot server defined, your DHCP configuration should look
191the same except for an "option dhcp-class-identifier" ("option
192vendor-class-identifier" if you are using DHCP 3.0):
193
194        allow booting;
195        allow bootp;
196
197	# Standard configuration directives...
198
199        option domain-name "<domain name>";
200        option subnet-mask <subnet mask>;
201        option broadcast-address <broadcast address>;
202        option domain-name-servers <dns servers>;
203        option routers <default router>;
204
205	# Group the PXE bootable hosts together
206	group {
207		# PXE-specific configuration directives...
208	        option dhcp-class-identifier "PXEClient";
209		next-server <pxe boot server address>;
210
211		# You need an entry like this for every host
212		# unless you're using dynamic addresses
213	        host <hostname> {
214		        hardware ethernet <ethernet address>;
215			fixed-address <hostname>;
216		}
217	}
218
219Here, the boot file name is obtained from the PXE server.
220
221If the "conventional TFTP" configuration doesn't work on your clients,
222and setting up a PXE boot server is not an option, you can attempt the
223following configuration.  It has been known to boot some
224configurations correctly; however, there are no guarantees:
225
226        allow booting;
227        allow bootp;
228
229	# Standard configuration directives...
230
231        option domain-name "<domain name>";
232        option subnet-mask <subnet mask>;
233        option broadcast-address <broadcast address>;
234        option domain-name-servers <dns servers>;
235        option routers <default router>;
236
237	# Group the PXE bootable hosts together
238	group {
239		# PXE-specific configuration directives...
240	        option dhcp-class-identifier "PXEClient";
241		option vendor-encapsulated-options 09:0f:80:00:0c:4e:65:74:77:6f:72:6b:20:62:6f:6f:74:0a:07:00:50:72:6f:6d:70:74:06:01:02:08:03:80:00:00:47:04:80:00:00:00:ff;
242		next-server <TFTP server>;
243		filename "/tftpboot/pxelinux.0";
244
245		# You need an entry like this for every host
246		# unless you're using dynamic addresses
247	        host <hostname> {
248		        hardware ethernet <ethernet address>;
249			fixed-address <hostname>;
250		}
251	}
252
253Note that this *will not* boot some clients that *will* boot with the
254"conventional TFTP" configuration; Intel Boot Client 3.0 and later are
255known to fall into this category.
256
257
258    ++++ SPECIAL DHCP OPTIONS ++++
259
260PXELINUX (starting with version 1.62) supports the following
261nonstandard DHCP options, which depending on your DHCP server you may
262be able to use to customize the specific behaviour of PXELINUX.  See
263RFC 5071 for some additional information about these options.
264
265Option 208	pxelinux.magic
266	- Earlier versions of PXELINUX required this to be set to
267	  F1:00:74:7E (241.0.116.126) for PXELINUX to
268	  recognize any special DHCP options whatsoever.  As of
269	  PXELINUX 3.55, this option is deprecated and is no longer
270	  required.
271
272Option 209	pxelinux.configfile
273	- Specifies the PXELINUX configuration file name.
274
275Option 210	pxelinux.pathprefix
276	- Specifies the PXELINUX common path prefix, instead of
277	  deriving it from the boot file name.  This almost certainly
278	  needs to end in whatever character the TFTP server OS uses
279	  as a pathname separator, e.g. slash (/) for Unix.
280
281Option 211	pxelinux.reboottime
282	- Specifies, in seconds, the time to wait before reboot in the
283	  event of TFTP failure.  0 means wait "forever" (in reality,
284	  it waits approximately 136 years.)
285
286ISC dhcp 3.0 supports a rather nice syntax for specifying custom
287options; you can use the following syntax in dhcpd.conf if you are
288running this version of dhcpd:
289
290	option space pxelinux;
291	option pxelinux.magic      code 208 = string;
292	option pxelinux.configfile code 209 = text;
293	option pxelinux.pathprefix code 210 = text;
294	option pxelinux.reboottime code 211 = unsigned integer 32;
295
296    NOTE: In earlier versions of PXELINUX, this would only work as a
297    "site-option-space".  Since PXELINUX 2.07, this will work both as a
298    "site-option-space" (unencapsulated) and as a "vendor-option-space"
299    (type 43 encapsulated.)  This may avoid messing with the
300    dhcp-parameter-request-list, as detailed below.
301
302Then, inside your PXELINUX-booting group or class (whereever you have
303the PXELINUX-related options, such as the filename option), you can
304add, for example:
305
306	# Always include the following lines for all PXELINUX clients
307	site-option-space "pxelinux";
308	option pxelinux.magic f1:00:74:7e;
309	if exists dhcp-parameter-request-list {
310		# Always send the PXELINUX options (specified in hexadecimal)
311		option dhcp-parameter-request-list = concat(option dhcp-parameter-request-list,d0,d1,d2,d3);
312	}
313	# These lines should be customized to your setup
314	option pxelinux.configfile "configs/common";
315	option pxelinux.pathprefix "/tftpboot/pxelinux/files/";
316	option pxelinux.reboottime 30;
317	filename "/tftpboot/pxelinux/pxelinux.bin";
318
319Note that the configfile is relative to the pathprefix: this will look
320for a config file called /tftpboot/pxelinux/files/configs/common on
321the TFTP server.
322
323The "option dhcp-parameter-request-list" statement forces the DHCP
324server to send the PXELINUX-specific options, even though they are not
325explicitly requested.  Since the DHCP request is done before PXELINUX
326is loaded, the PXE client won't know to request them.
327
328Using ISC dhcp 3.0 you can create a lot of these strings on the fly.
329For example, to use the hexadecimal form of the hardware address as
330the configuration file name, you could do something like:
331
332	site-option-space "pxelinux";
333	option pxelinux.magic f1:00:74:7e;
334	if exists dhcp-parameter-request-list {
335		# Always send the PXELINUX options (specified in hexadecimal)
336		option dhcp-parameter-request-list = concat(option dhcp-parameter-request-list,d0,d1,d2,d3);
337	}
338	option pxelinux.configfile =
339		concat("pxelinux.cfg/", binary-to-ascii(16, 8, ":", hardware));
340	filename "/tftpboot/pxelinux.bin";
341
342If you used this from a client whose Ethernet address was
34358:FA:84:CF:55:0E, this would look for a configuration file named
344"/tftpboot/pxelinux.cfg/1:58:fa:84:cf:55:e".
345
346
347    ++++ HARDCODED OPTIONS ++++
348
349Since version 3.83, the program "pxelinux-options" can be used to
350hard-code DHCP options into the pxelinux.0 image file; this is
351sometimes useful when the DHCP server is under different
352administrative control.
353
354
355    ++++ ALTERNATE TFTP SERVERS AND URL SYNTAX ++++
356
357PXELINUX supports the following special pathname conventions:
358
359::filename
360
361	Suppresses the common filename prefix, i.e. passes the string
362	"filename" unmodified to the server.
363
364IP address::filename		(e.g. 192.0.2.1::filename)
365
366	Suppresses the common filename prefix, *and* sends a request
367	to an alternate TFTP server.  Instead of an IP address, a
368	DNS name can be used.  It will be assumed to be fully
369	qualified if it contains dots; otherwise the local domain as
370	reported by the DHCP server (option 15) will be added.
371
372:: was chosen because it is unlikely to conflict with operating system
373usage.  However, if you happen to have an environment for which the
374special treatment of :: is a problem, please contact the Syslinux
375mailing list.
376
377Since version 4.00, PXELINUX also supports standard URL syntax.
378
379
380    ++++ SOME NOTES ++++
381
382If the boot fails, PXELINUX (unlike SYSLINUX) will not wait forever;
383rather, if it has not received any input for approximately five
384minutes after displaying an error message, it will reset the machine.
385This allows an unattended machine to recover in case it had bad enough
386luck of trying to boot at the same time the TFTP server goes down.
387
388Lots of PXE stacks, especially old ones, have various problems of
389varying degrees of severity.  Please see:
390
391	http://syslinux.zytor.com/hardware.php
392
393... for a list of currently known hardware problems, with workarounds
394if known.
395
396
397    ++++ KEEPING THE PXE STACK AROUND ++++
398
399Normally, PXELINUX will unload the PXE and UNDI stacks before invoking
400the kernel.  In special circumstances (for example, when using MEMDISK
401to boot an operating system with an UNDI network driver) it might be
402desirable to keep the PXE stack in memory.  If the option "keeppxe"
403is given on the kernel command line, PXELINUX will keep the PXE and
404UNDI stacks in memory.  (If you don't know what this means, you
405probably don't need it.)
406
407
408    ++++ PROBLEMS WITH YOUR PXE STACK ++++
409
410There are a number of extremely broken PXE stacks in the field.  The
411gPXE project (formerly known as Etherboot) provides an open-source PXE
412stack that works with a number of cards, and which can be loaded from
413a CD-ROM, USB key, or floppy if desired.
414
415Information on gPXE is available from:
416
417	http://www.etherboot.org/
418
419... and ready-to-use ROM or disk images from:
420
421	http://www.rom-o-matic.net/
422
423Some cards, like may systems with the SiS 900, has a PXE stack which
424works just barely well enough to load a single file, but doesn't
425handle the more advanced items required by PXELINUX.  If so, it is
426possible to use the built-in PXE stack to load gPXE, which can then
427load PXELINUX.  See:
428
429	http://www.etherboot.org/wiki/pxechaining
430
431
432    ++++ CURRENTLY KNOWN PROBLEMS ++++
433
434The following problems are known with PXELINUX, so far:
435
436+ The error recovery routine doesn't work quite right.  For right now,
437  it just does a hard reset - seems good enough.
438+ We should probably call the UDP receive function in the keyboard
439  entry loop, so that we answer ARP requests.
440+ Boot sectors/disk images are not supported yet.
441
442If you have additional problems, please contact the Syslinux mailing
443list (see syslinux.txt for the address.)
444