• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
2    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
4<head>
5<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
6<meta name="generator" content="AsciiDoc 8.6.8" />
7<title>pxelinux(1)</title>
8<style type="text/css">
9/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
10
11/* Default font. */
12body {
13  font-family: Georgia,serif;
14}
15
16/* Title font. */
17h1, h2, h3, h4, h5, h6,
18div.title, caption.title,
19thead, p.table.header,
20#toctitle,
21#author, #revnumber, #revdate, #revremark,
22#footer {
23  font-family: Arial,Helvetica,sans-serif;
24}
25
26body {
27  margin: 1em 5% 1em 5%;
28}
29
30a {
31  color: blue;
32  text-decoration: underline;
33}
34a:visited {
35  color: fuchsia;
36}
37
38em {
39  font-style: italic;
40  color: navy;
41}
42
43strong {
44  font-weight: bold;
45  color: #083194;
46}
47
48h1, h2, h3, h4, h5, h6 {
49  color: #527bbd;
50  margin-top: 1.2em;
51  margin-bottom: 0.5em;
52  line-height: 1.3;
53}
54
55h1, h2, h3 {
56  border-bottom: 2px solid silver;
57}
58h2 {
59  padding-top: 0.5em;
60}
61h3 {
62  float: left;
63}
64h3 + * {
65  clear: left;
66}
67h5 {
68  font-size: 1.0em;
69}
70
71div.sectionbody {
72  margin-left: 0;
73}
74
75hr {
76  border: 1px solid silver;
77}
78
79p {
80  margin-top: 0.5em;
81  margin-bottom: 0.5em;
82}
83
84ul, ol, li > p {
85  margin-top: 0;
86}
87ul > li     { color: #aaa; }
88ul > li > * { color: black; }
89
90.monospaced, code, pre {
91  font-family: "Courier New", Courier, monospace;
92  font-size: inherit;
93  color: navy;
94  padding: 0;
95  margin: 0;
96}
97
98
99#author {
100  color: #527bbd;
101  font-weight: bold;
102  font-size: 1.1em;
103}
104#email {
105}
106#revnumber, #revdate, #revremark {
107}
108
109#footer {
110  font-size: small;
111  border-top: 2px solid silver;
112  padding-top: 0.5em;
113  margin-top: 4.0em;
114}
115#footer-text {
116  float: left;
117  padding-bottom: 0.5em;
118}
119#footer-badges {
120  float: right;
121  padding-bottom: 0.5em;
122}
123
124#preamble {
125  margin-top: 1.5em;
126  margin-bottom: 1.5em;
127}
128div.imageblock, div.exampleblock, div.verseblock,
129div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
130div.admonitionblock {
131  margin-top: 1.0em;
132  margin-bottom: 1.5em;
133}
134div.admonitionblock {
135  margin-top: 2.0em;
136  margin-bottom: 2.0em;
137  margin-right: 10%;
138  color: #606060;
139}
140
141div.content { /* Block element content. */
142  padding: 0;
143}
144
145/* Block element titles. */
146div.title, caption.title {
147  color: #527bbd;
148  font-weight: bold;
149  text-align: left;
150  margin-top: 1.0em;
151  margin-bottom: 0.5em;
152}
153div.title + * {
154  margin-top: 0;
155}
156
157td div.title:first-child {
158  margin-top: 0.0em;
159}
160div.content div.title:first-child {
161  margin-top: 0.0em;
162}
163div.content + div.title {
164  margin-top: 0.0em;
165}
166
167div.sidebarblock > div.content {
168  background: #ffffee;
169  border: 1px solid #dddddd;
170  border-left: 4px solid #f0f0f0;
171  padding: 0.5em;
172}
173
174div.listingblock > div.content {
175  border: 1px solid #dddddd;
176  border-left: 5px solid #f0f0f0;
177  background: #f8f8f8;
178  padding: 0.5em;
179}
180
181div.quoteblock, div.verseblock {
182  padding-left: 1.0em;
183  margin-left: 1.0em;
184  margin-right: 10%;
185  border-left: 5px solid #f0f0f0;
186  color: #888;
187}
188
189div.quoteblock > div.attribution {
190  padding-top: 0.5em;
191  text-align: right;
192}
193
194div.verseblock > pre.content {
195  font-family: inherit;
196  font-size: inherit;
197}
198div.verseblock > div.attribution {
199  padding-top: 0.75em;
200  text-align: left;
201}
202/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
203div.verseblock + div.attribution {
204  text-align: left;
205}
206
207div.admonitionblock .icon {
208  vertical-align: top;
209  font-size: 1.1em;
210  font-weight: bold;
211  text-decoration: underline;
212  color: #527bbd;
213  padding-right: 0.5em;
214}
215div.admonitionblock td.content {
216  padding-left: 0.5em;
217  border-left: 3px solid #dddddd;
218}
219
220div.exampleblock > div.content {
221  border-left: 3px solid #dddddd;
222  padding-left: 0.5em;
223}
224
225div.imageblock div.content { padding-left: 0; }
226span.image img { border-style: none; }
227a.image:visited { color: white; }
228
229dl {
230  margin-top: 0.8em;
231  margin-bottom: 0.8em;
232}
233dt {
234  margin-top: 0.5em;
235  margin-bottom: 0;
236  font-style: normal;
237  color: navy;
238}
239dd > *:first-child {
240  margin-top: 0.1em;
241}
242
243ul, ol {
244    list-style-position: outside;
245}
246ol.arabic {
247  list-style-type: decimal;
248}
249ol.loweralpha {
250  list-style-type: lower-alpha;
251}
252ol.upperalpha {
253  list-style-type: upper-alpha;
254}
255ol.lowerroman {
256  list-style-type: lower-roman;
257}
258ol.upperroman {
259  list-style-type: upper-roman;
260}
261
262div.compact ul, div.compact ol,
263div.compact p, div.compact p,
264div.compact div, div.compact div {
265  margin-top: 0.1em;
266  margin-bottom: 0.1em;
267}
268
269tfoot {
270  font-weight: bold;
271}
272td > div.verse {
273  white-space: pre;
274}
275
276div.hdlist {
277  margin-top: 0.8em;
278  margin-bottom: 0.8em;
279}
280div.hdlist tr {
281  padding-bottom: 15px;
282}
283dt.hdlist1.strong, td.hdlist1.strong {
284  font-weight: bold;
285}
286td.hdlist1 {
287  vertical-align: top;
288  font-style: normal;
289  padding-right: 0.8em;
290  color: navy;
291}
292td.hdlist2 {
293  vertical-align: top;
294}
295div.hdlist.compact tr {
296  margin: 0;
297  padding-bottom: 0;
298}
299
300.comment {
301  background: yellow;
302}
303
304.footnote, .footnoteref {
305  font-size: 0.8em;
306}
307
308span.footnote, span.footnoteref {
309  vertical-align: super;
310}
311
312#footnotes {
313  margin: 20px 0 20px 0;
314  padding: 7px 0 0 0;
315}
316
317#footnotes div.footnote {
318  margin: 0 0 5px 0;
319}
320
321#footnotes hr {
322  border: none;
323  border-top: 1px solid silver;
324  height: 1px;
325  text-align: left;
326  margin-left: 0;
327  width: 20%;
328  min-width: 100px;
329}
330
331div.colist td {
332  padding-right: 0.5em;
333  padding-bottom: 0.3em;
334  vertical-align: top;
335}
336div.colist td img {
337  margin-top: 0.3em;
338}
339
340@media print {
341  #footer-badges { display: none; }
342}
343
344#toc {
345  margin-bottom: 2.5em;
346}
347
348#toctitle {
349  color: #527bbd;
350  font-size: 1.1em;
351  font-weight: bold;
352  margin-top: 1.0em;
353  margin-bottom: 0.1em;
354}
355
356div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
357  margin-top: 0;
358  margin-bottom: 0;
359}
360div.toclevel2 {
361  margin-left: 2em;
362  font-size: 0.9em;
363}
364div.toclevel3 {
365  margin-left: 4em;
366  font-size: 0.9em;
367}
368div.toclevel4 {
369  margin-left: 6em;
370  font-size: 0.9em;
371}
372
373span.aqua { color: aqua; }
374span.black { color: black; }
375span.blue { color: blue; }
376span.fuchsia { color: fuchsia; }
377span.gray { color: gray; }
378span.green { color: green; }
379span.lime { color: lime; }
380span.maroon { color: maroon; }
381span.navy { color: navy; }
382span.olive { color: olive; }
383span.purple { color: purple; }
384span.red { color: red; }
385span.silver { color: silver; }
386span.teal { color: teal; }
387span.white { color: white; }
388span.yellow { color: yellow; }
389
390span.aqua-background { background: aqua; }
391span.black-background { background: black; }
392span.blue-background { background: blue; }
393span.fuchsia-background { background: fuchsia; }
394span.gray-background { background: gray; }
395span.green-background { background: green; }
396span.lime-background { background: lime; }
397span.maroon-background { background: maroon; }
398span.navy-background { background: navy; }
399span.olive-background { background: olive; }
400span.purple-background { background: purple; }
401span.red-background { background: red; }
402span.silver-background { background: silver; }
403span.teal-background { background: teal; }
404span.white-background { background: white; }
405span.yellow-background { background: yellow; }
406
407span.big { font-size: 2em; }
408span.small { font-size: 0.6em; }
409
410span.underline { text-decoration: underline; }
411span.overline { text-decoration: overline; }
412span.line-through { text-decoration: line-through; }
413
414div.unbreakable { page-break-inside: avoid; }
415
416
417/*
418 * xhtml11 specific
419 *
420 * */
421
422div.tableblock {
423  margin-top: 1.0em;
424  margin-bottom: 1.5em;
425}
426div.tableblock > table {
427  border: 3px solid #527bbd;
428}
429thead, p.table.header {
430  font-weight: bold;
431  color: #527bbd;
432}
433p.table {
434  margin-top: 0;
435}
436/* Because the table frame attribute is overriden by CSS in most browsers. */
437div.tableblock > table[frame="void"] {
438  border-style: none;
439}
440div.tableblock > table[frame="hsides"] {
441  border-left-style: none;
442  border-right-style: none;
443}
444div.tableblock > table[frame="vsides"] {
445  border-top-style: none;
446  border-bottom-style: none;
447}
448
449
450/*
451 * html5 specific
452 *
453 * */
454
455table.tableblock {
456  margin-top: 1.0em;
457  margin-bottom: 1.5em;
458}
459thead, p.tableblock.header {
460  font-weight: bold;
461  color: #527bbd;
462}
463p.tableblock {
464  margin-top: 0;
465}
466table.tableblock {
467  border-width: 3px;
468  border-spacing: 0px;
469  border-style: solid;
470  border-color: #527bbd;
471  border-collapse: collapse;
472}
473th.tableblock, td.tableblock {
474  border-width: 1px;
475  padding: 4px;
476  border-style: solid;
477  border-color: #527bbd;
478}
479
480table.tableblock.frame-topbot {
481  border-left-style: hidden;
482  border-right-style: hidden;
483}
484table.tableblock.frame-sides {
485  border-top-style: hidden;
486  border-bottom-style: hidden;
487}
488table.tableblock.frame-none {
489  border-style: hidden;
490}
491
492th.tableblock.halign-left, td.tableblock.halign-left {
493  text-align: left;
494}
495th.tableblock.halign-center, td.tableblock.halign-center {
496  text-align: center;
497}
498th.tableblock.halign-right, td.tableblock.halign-right {
499  text-align: right;
500}
501
502th.tableblock.valign-top, td.tableblock.valign-top {
503  vertical-align: top;
504}
505th.tableblock.valign-middle, td.tableblock.valign-middle {
506  vertical-align: middle;
507}
508th.tableblock.valign-bottom, td.tableblock.valign-bottom {
509  vertical-align: bottom;
510}
511
512
513/*
514 * manpage specific
515 *
516 * */
517
518body.manpage h1 {
519  padding-top: 0.5em;
520  padding-bottom: 0.5em;
521  border-top: 2px solid silver;
522  border-bottom: 2px solid silver;
523}
524body.manpage h2 {
525  border-style: none;
526}
527body.manpage div.sectionbody {
528  margin-left: 3em;
529}
530
531@media print {
532  body.manpage div#toc { display: none; }
533}
534
535
536</style>
537<script type="text/javascript">
538/*<![CDATA[*/
539var asciidoc = {  // Namespace.
540
541/////////////////////////////////////////////////////////////////////
542// Table Of Contents generator
543/////////////////////////////////////////////////////////////////////
544
545/* Author: Mihai Bazon, September 2002
546 * http://students.infoiasi.ro/~mishoo
547 *
548 * Table Of Content generator
549 * Version: 0.4
550 *
551 * Feel free to use this script under the terms of the GNU General Public
552 * License, as long as you do not remove or alter this notice.
553 */
554
555 /* modified by Troy D. Hanson, September 2006. License: GPL */
556 /* modified by Stuart Rackham, 2006, 2009. License: GPL */
557
558// toclevels = 1..4.
559toc: function (toclevels) {
560
561  function getText(el) {
562    var text = "";
563    for (var i = el.firstChild; i != null; i = i.nextSibling) {
564      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
565        text += i.data;
566      else if (i.firstChild != null)
567        text += getText(i);
568    }
569    return text;
570  }
571
572  function TocEntry(el, text, toclevel) {
573    this.element = el;
574    this.text = text;
575    this.toclevel = toclevel;
576  }
577
578  function tocEntries(el, toclevels) {
579    var result = new Array;
580    var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
581    // Function that scans the DOM tree for header elements (the DOM2
582    // nodeIterator API would be a better technique but not supported by all
583    // browsers).
584    var iterate = function (el) {
585      for (var i = el.firstChild; i != null; i = i.nextSibling) {
586        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
587          var mo = re.exec(i.tagName);
588          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
589            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
590          }
591          iterate(i);
592        }
593      }
594    }
595    iterate(el);
596    return result;
597  }
598
599  var toc = document.getElementById("toc");
600  if (!toc) {
601    return;
602  }
603
604  // Delete existing TOC entries in case we're reloading the TOC.
605  var tocEntriesToRemove = [];
606  var i;
607  for (i = 0; i < toc.childNodes.length; i++) {
608    var entry = toc.childNodes[i];
609    if (entry.nodeName.toLowerCase() == 'div'
610     && entry.getAttribute("class")
611     && entry.getAttribute("class").match(/^toclevel/))
612      tocEntriesToRemove.push(entry);
613  }
614  for (i = 0; i < tocEntriesToRemove.length; i++) {
615    toc.removeChild(tocEntriesToRemove[i]);
616  }
617
618  // Rebuild TOC entries.
619  var entries = tocEntries(document.getElementById("content"), toclevels);
620  for (var i = 0; i < entries.length; ++i) {
621    var entry = entries[i];
622    if (entry.element.id == "")
623      entry.element.id = "_toc_" + i;
624    var a = document.createElement("a");
625    a.href = "#" + entry.element.id;
626    a.appendChild(document.createTextNode(entry.text));
627    var div = document.createElement("div");
628    div.appendChild(a);
629    div.className = "toclevel" + entry.toclevel;
630    toc.appendChild(div);
631  }
632  if (entries.length == 0)
633    toc.parentNode.removeChild(toc);
634},
635
636
637/////////////////////////////////////////////////////////////////////
638// Footnotes generator
639/////////////////////////////////////////////////////////////////////
640
641/* Based on footnote generation code from:
642 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
643 */
644
645footnotes: function () {
646  // Delete existing footnote entries in case we're reloading the footnodes.
647  var i;
648  var noteholder = document.getElementById("footnotes");
649  if (!noteholder) {
650    return;
651  }
652  var entriesToRemove = [];
653  for (i = 0; i < noteholder.childNodes.length; i++) {
654    var entry = noteholder.childNodes[i];
655    if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
656      entriesToRemove.push(entry);
657  }
658  for (i = 0; i < entriesToRemove.length; i++) {
659    noteholder.removeChild(entriesToRemove[i]);
660  }
661
662  // Rebuild footnote entries.
663  var cont = document.getElementById("content");
664  var spans = cont.getElementsByTagName("span");
665  var refs = {};
666  var n = 0;
667  for (i=0; i<spans.length; i++) {
668    if (spans[i].className == "footnote") {
669      n++;
670      var note = spans[i].getAttribute("data-note");
671      if (!note) {
672        // Use [\s\S] in place of . so multi-line matches work.
673        // Because JavaScript has no s (dotall) regex flag.
674        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
675        spans[i].innerHTML =
676          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
677          "' title='View footnote' class='footnote'>" + n + "</a>]";
678        spans[i].setAttribute("data-note", note);
679      }
680      noteholder.innerHTML +=
681        "<div class='footnote' id='_footnote_" + n + "'>" +
682        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
683        n + "</a>. " + note + "</div>";
684      var id =spans[i].getAttribute("id");
685      if (id != null) refs["#"+id] = n;
686    }
687  }
688  if (n == 0)
689    noteholder.parentNode.removeChild(noteholder);
690  else {
691    // Process footnoterefs.
692    for (i=0; i<spans.length; i++) {
693      if (spans[i].className == "footnoteref") {
694        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
695        href = href.match(/#.*/)[0];  // Because IE return full URL.
696        n = refs[href];
697        spans[i].innerHTML =
698          "[<a href='#_footnote_" + n +
699          "' title='View footnote' class='footnote'>" + n + "</a>]";
700      }
701    }
702  }
703},
704
705install: function(toclevels) {
706  var timerId;
707
708  function reinstall() {
709    asciidoc.footnotes();
710    if (toclevels) {
711      asciidoc.toc(toclevels);
712    }
713  }
714
715  function reinstallAndRemoveTimer() {
716    clearInterval(timerId);
717    reinstall();
718  }
719
720  timerId = setInterval(reinstall, 500);
721  if (document.addEventListener)
722    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
723  else
724    window.onload = reinstallAndRemoveTimer;
725}
726
727}
728asciidoc.install();
729/*]]>*/
730</script>
731</head>
732<body class="manpage">
733<div id="header">
734<h1>
735pxelinux(1) Manual Page
736</h1>
737<h2>NAME</h2>
738<div class="sectionbody">
739<p>pxelinux -
740   The Syslinux derivative PXELINUX for PXE network booting
741</p>
742</div>
743</div>
744<div id="content">
745<div class="sect1">
746<h2 id="_synopsis">SYNOPSIS</h2>
747<div class="sectionbody">
748<div class="verseblock">
749<pre class="content">pxelinux.0</pre>
750<div class="attribution">
751</div></div>
752</div>
753</div>
754<div class="sect1">
755<h2 id="_description">DESCRIPTION</h2>
756<div class="sectionbody">
757<div class="paragraph"><p><strong>PXELINUX</strong> is a Syslinux derivative, for booting Linux off a network
758server, using a network ROM conforming to the Intel PXE (Pre-Execution
759Environment) specification.  <strong>PXELINUX</strong> is <em>*not*</em> a program that is
760intended to be flashed or burned into a PROM on the network card; if
761you want that, check out Etherboot (<a href="http://www.etherboot.org/">http://www.etherboot.org/</a>).
762Etherboot 5.4 or later can also be used to create a PXE-compliant boot
763PROM for many network cards.</p></div>
764<div class="paragraph"><p>PXELINUX generally requires that full file pathnames are 127 characters or shorter in length.</p></div>
765</div>
766</div>
767<div class="sect1">
768<h2 id="_current_directory">CURRENT DIRECTORY</h2>
769<div class="sectionbody">
770<div class="paragraph"><p>The initial current working directory is either as supplied by DHCP
771option 210 (pxelinux.pathprefix), the hardcoded path-prefix or the
772parent directory of the PXELINUX file, as indicated by DHCP fields
773<em>sname</em> and <em>file</em> (sname="192.168.2.3" and file="boot/pxelinux.0"
774results in "tftp://192.168.2.3/boot/", "192.168.2.3::boot/" in older
775PXELINUX format) with precedence specified under <strong>OPTIONS</strong>.</p></div>
776<div class="paragraph"><p>All unqualified filenames are relative to the current directory.</p></div>
777</div>
778</div>
779<div class="sect1">
780<h2 id="_configuration">CONFIGURATION</h2>
781<div class="sectionbody">
782<div class="paragraph"><p>See <strong>syslinux.cfg</strong>(5) for the format of the contents.</p></div>
783<div class="paragraph"><p>Because more than one system may be booted from the same server, the
784configuration file name depends on the IP address of the booting
785machine.  After attempting the file as specified in the DHCP or
786hardcoded options, PXELINUX will probe the following paths, prefixed
787with "pxelinux.cfg/", under the initial current working directory:</p></div>
788<div class="ulist"><ul>
789<li>
790<p>
791The client UUID if provided by the PXE stack (note, some BIOSes don&#8217;t
792have a valid UUID, and you might end up with something like all 1&#8217;s.)
793This is in the standard UUID format using lower case hexadecimal digits,
794e.g. b8945908-d6a6-41a9-611d-74a6ab80b83d.
795</p>
796</li>
797<li>
798<p>
799The hardware type (using its ARP type code) and address, all in lower
800case hexadecimal with dash separators; for example, for an Ethernet (ARP
801type 1) with address 88:99:AA:BB:CC:DD it would search for the filename
80201-88-99-aa-bb-cc-dd.
803</p>
804</li>
805<li>
806<p>
807The client&#8217;s IPv4 address in upper-case hexidecimal (ie 192.168.2.91
808&#8594; C0A8025B; you can use the included progam "gethostip" to compute the
809hexadecimal IP address for any host.) followed by removing characters,
810one at a time, from the end.
811</p>
812</li>
813<li>
814<p>
815"default"
816</p>
817</li>
818</ul></div>
819<div class="paragraph"><p>Starting in release 3.20, if PXELINUX can not find a configuration file,
820it will reboot after the timeout interval has expired.  This keeps a
821machine from getting stuck indefinitely due to a boot server failure.</p></div>
822</div>
823</div>
824<div class="sect1">
825<h2 id="_options">OPTIONS</h2>
826<div class="sectionbody">
827<div class="paragraph"><p><strong>PXELINUX</strong> (starting with version 1.62) supports the following
828nonstandard DHCP options, which depending on your DHCP server you may be
829able to use to customize the specific behaviour of <strong>PXELINUX</strong>.  See RFC
8305071 for some additional information about these options. Options for
831<strong>PXELINUX</strong> can be specified by DHCP options or hardcoded into the
832binary.</p></div>
833<div class="sect2">
834<h3 id="_option_priority">Option Priority</h3>
835<div class="paragraph"><p>Hardcoded after-options are applied after DHCP options (and overrride)
836while hardcoded before-options are applied prior to DHCP options and
837default behavior takes the lowest priority.</p></div>
838</div>
839<div class="sect2">
840<h3 id="_dhcp_options">DHCP options</h3>
841<div class="dlist"><dl>
842<dt class="hdlist1">
843<strong>Option 208</strong> (pxelinux.magic)
844</dt>
845<dd>
846<p>
847Earlier versions of <strong>PXELINUX</strong> required this to be set to F1:00:74:7E
848(241.0.116.126) for <strong>PXELINUX</strong> to recognize any special DHCP options
849whatsoever.  As of <strong>PXELINUX</strong> 3.55, this option is deprecated and is no
850longer required.
851</p>
852</dd>
853<dt class="hdlist1">
854<strong>Option 209</strong> (pxelinux.configfile)
855</dt>
856<dd>
857<p>
858Specifies the initial <strong>PXELINUX</strong> configuration file name which may be
859qualified or unqualified.
860</p>
861</dd>
862<dt class="hdlist1">
863<strong>Option 210</strong> (pxelinux.pathprefix)
864</dt>
865<dd>
866<p>
867Specifies the <strong>PXELINUX</strong> common path prefix, instead of deriving it from
868the boot file name.  This almost certainly needs to end in whatever
869character the TFTP server OS uses as a pathname separator, e.g. slash
870(/) for Unix.
871</p>
872</dd>
873<dt class="hdlist1">
874<strong>Option 211</strong> (pxelinux.reboottime)
875</dt>
876<dd>
877<p>
878Specifies, in seconds, the time to wait before reboot in the event of
879TFTP failure.  0 means wait "forever" (in reality, it waits
880approximately 136 years.)
881</p>
882</dd>
883</dl></div>
884</div>
885<div class="sect2">
886<h3 id="_hardcoded_options">Hardcoded options</h3>
887<div class="paragraph"><p>Since version 3.83, the program "pxelinux-options" can be used to
888hard-code DHCP options into the pxelinux.0 image file; this is
889sometimes useful when the DHCP server is under different
890administrative control.  Hardcoded options</p></div>
891<div class="literalblock">
892<div class="content">
893<pre><code>  6 =&gt; 'domain-name-servers',
894 15 =&gt; 'domain-name',
895 54 =&gt; 'next-server',
896209 =&gt; 'config-file',
897210 =&gt; 'path-prefix',
898211 =&gt; 'reboottime'</code></pre>
899</div></div>
900</div>
901</div>
902</div>
903<div class="sect1">
904<h2 id="_http_ftp">HTTP/FTP</h2>
905<div class="sectionbody">
906<div class="paragraph"><p>Since version 5.10, a special PXELINUX binary, lpxelinux.0, natively
907supports HTTP and FTP transfers, greatly increasing load speed and
908allowing for standard HTTP scripts to present PXELINUX&#8217;s configuration
909file.  To use http or ftp, use standard URL syntax as filename; use the
910DHCP options below to transmit a suitable URL prefix to the client, or
911use the "pxelinux-options" tool provided in the utils directory to
912program it directly into the lpxelinux.0 file.</p></div>
913</div>
914</div>
915<div class="sect1">
916<h2 id="_filename_syntax">FILENAME SYNTAX</h2>
917<div class="sectionbody">
918<div class="paragraph"><p>PXELINUX supports the following special pathname conventions:</p></div>
919<div class="dlist"><dl>
920<dt class="hdlist1">
921<strong>::filename</strong>
922</dt>
923<dd>
924<p>
925Suppresses the common filename prefix, i.e. passes the string "filename"
926unmodified to the server.
927</p>
928</dd>
929<dt class="hdlist1">
930<strong>IP address::filename</strong> (e.g. 192.168.2.3::filename)
931</dt>
932<dd>
933<p>
934Suppresses the common filename prefix, <strong>and</strong> sends a request to an alternate TFTP server.  Instead of an IP address, a DNS name can be used.  It will be assumed to be fully qualified if it contains dots; otherwise the local domain as reported by the DHCP server (option 15) will be added.
935</p>
936</dd>
937</dl></div>
938<div class="paragraph"><p>:: was chosen because it is unlikely to conflict with operating system
939usage.  However, if you happen to have an environment for which the
940special treatment of :: is a problem, please contact the Syslinux
941mailing list.</p></div>
942<div class="paragraph"><p>Since version 4.00, PXELINUX also supports standard URL syntax.</p></div>
943</div>
944</div>
945<div class="sect1">
946<h2 id="_keeppxe">KEEPPXE</h2>
947<div class="sectionbody">
948<div class="paragraph"><p>Normally, PXELINUX will unload the PXE and UNDI stacks before invoking
949the kernel.  In special circumstances (for example, when using MEMDISK
950to boot an operating system with an UNDI network driver) it might be
951desirable to keep the PXE stack in memory.  If the option "keeppxe"
952is given on the kernel command line, PXELINUX will keep the PXE and
953UNDI stacks in memory.  (If you don&#8217;t know what this means, you
954probably don&#8217;t need it.)</p></div>
955</div>
956</div>
957<div class="sect1">
958<h2 id="_examples">EXAMPLES</h2>
959<div class="sectionbody">
960<div class="sect2">
961<h3 id="_configuration_filename">Configuration filename</h3>
962<div class="paragraph"><p>For DHCP siaddr 192.168.2.3, file <em>mybootdir/pxelinux.0</em>, client UUID
963b8945908-d6a6-41a9-611d-74a6ab80b83d, Ethernet MAC address
96488:99:AA:BB:CC:DD and IPv4 address 192.168.2.91, the following files in
965this order will be attempted (after config-file options):</p></div>
966<div class="literalblock">
967<div class="content">
968<pre><code>mybootdir/pxelinux.cfg/b8945908-d6a6-41a9-611d-74a6ab80b83d
969mybootdir/pxelinux.cfg/01-88-99-aa-bb-cc-dd
970mybootdir/pxelinux.cfg/C0A8025B
971mybootdir/pxelinux.cfg/C0A8025
972mybootdir/pxelinux.cfg/C0A802
973mybootdir/pxelinux.cfg/C0A80
974mybootdir/pxelinux.cfg/C0A8
975mybootdir/pxelinux.cfg/C0A
976mybootdir/pxelinux.cfg/C0
977mybootdir/pxelinux.cfg/C
978mybootdir/pxelinux.cfg/default</code></pre>
979</div></div>
980</div>
981<div class="sect2">
982<h3 id="_tftp_servers">TFTP servers</h3>
983<div class="paragraph"><p>For best results, use a TFTP server which supports the "tsize" TFTP
984option (RFC 1784/RFC 2349).  The "tftp-hpa" TFTP server, which support
985options, is available at:</p></div>
986<div class="literalblock">
987<div class="content">
988<pre><code>http://www.kernel.org/pub/software/network/tftp/
989ftp://www.kernel.org/pub/software/network/tftp/</code></pre>
990</div></div>
991<div class="paragraph"><p>and on any kernel.org mirror (see <a href="http://www.kernel.org/mirrors/">http://www.kernel.org/mirrors/</a>).</p></div>
992<div class="paragraph"><p>Another TFTP server which supports this is atftp by Jean-Pierre
993Lefebvre:</p></div>
994<div class="literalblock">
995<div class="content">
996<pre><code>ftp://ftp.mamalinux.com/pub/atftp/</code></pre>
997</div></div>
998<div class="paragraph"><p>If your boot server is running Windows (and you can&#8217;t fix that), try
999tftpd32 by Philippe Jounin (you need version 2.11 or later; previous
1000versions had a bug which made it incompatible with PXELINUX):</p></div>
1001<div class="literalblock">
1002<div class="content">
1003<pre><code>http://tftpd32.jounin.net/</code></pre>
1004</div></div>
1005</div>
1006<div class="sect2">
1007<h3 id="_dhcp_config_simple">DHCP config: Simple</h3>
1008<div class="paragraph"><p>The PXE protocol uses a very complex set of extensions to DHCP or
1009BOOTP.  However, most PXE implementations&#8201;&#8212;&#8201;this includes all Intel
1010ones version 0.99n and later&#8201;&#8212;&#8201;seem to be able to boot in a
1011"conventional" DHCP/TFTP configuration.  Assuming you don&#8217;t have to
1012support any very old or otherwise severely broken clients, this is
1013probably the best configuration unless you already have a PXE boot
1014server on your network.</p></div>
1015<div class="paragraph"><p>A sample DHCP setup, using the "conventional TFTP" configuration,
1016would look something like the following, using ISC dhcp 2.0 dhcpd.conf
1017syntax:</p></div>
1018<div class="listingblock">
1019<div class="content">
1020<pre><code>allow booting;
1021allow bootp;
1022
1023# Standard configuration directives...
1024
1025option domain-name "&lt;domain name&gt;";
1026option subnet-mask &lt;subnet mask&gt;;
1027option broadcast-address &lt;broadcast address&gt;;
1028option domain-name-servers &lt;dns servers&gt;;
1029option routers &lt;default router&gt;;
1030
1031# Group the PXE bootable hosts together
1032group {
1033        # PXE-specific configuration directives...
1034        next-server &lt;TFTP server address&gt;;
1035        filename "/tftpboot/pxelinux.0";
1036
1037        # You need an entry like this for every host
1038        # unless you're using dynamic addresses
1039        host &lt;hostname&gt; {
1040                hardware ethernet &lt;ethernet address&gt;;
1041                fixed-address &lt;hostname&gt;;
1042        }
1043}</code></pre>
1044</div></div>
1045<div class="paragraph"><p>Note that if your particular TFTP daemon runs under chroot (tftp-hpa
1046will do this if you specify the -s (secure) option; this is highly
1047recommended), you almost certainly should not include the /tftpboot
1048prefix in the filename statement.</p></div>
1049</div>
1050<div class="sect2">
1051<h3 id="_dhcp_config_pxe_1">DHCP Config: PXE-1</h3>
1052<div class="paragraph"><p>If the simple config does not work for your environment, you probably
1053should set up a "PXE boot server" on port 4011 of your TFTP server; a
1054free PXE boot server is available at:</p></div>
1055<div class="paragraph"><p><a href="http://www.kano.org.uk/projects/pxe/">http://www.kano.org.uk/projects/pxe/</a></p></div>
1056<div class="paragraph"><p>With such a boot server defined, your DHCP configuration should look
1057the same except for an "option dhcp-class-identifier" ("option
1058vendor-class-identifier" if you are using DHCP 3.0):</p></div>
1059<div class="listingblock">
1060<div class="content">
1061<pre><code>allow booting;
1062allow bootp;
1063
1064# Standard configuration directives...
1065
1066option domain-name "&lt;domain name&gt;";
1067option subnet-mask &lt;subnet mask&gt;;
1068option broadcast-address &lt;broadcast address&gt;;
1069option domain-name-servers &lt;dns servers&gt;;
1070option routers &lt;default router&gt;;
1071
1072# Group the PXE bootable hosts together
1073group {
1074        # PXE-specific configuration directives...
1075        option dhcp-class-identifier "PXEClient";
1076        next-server &lt;pxe boot server address&gt;;
1077
1078        # You need an entry like this for every host
1079        # unless you're using dynamic addresses
1080        host &lt;hostname&gt; {
1081                hardware ethernet &lt;ethernet address&gt;;
1082                fixed-address &lt;hostname&gt;;
1083        }
1084}</code></pre>
1085</div></div>
1086<div class="paragraph"><p>Here, the boot file name is obtained from the PXE server.</p></div>
1087</div>
1088<div class="sect2">
1089<h3 id="_dhcp_config_encapsulated">DHCP Config: Encapsulated</h3>
1090<div class="paragraph"><p>If the "conventional TFTP" configuration doesn&#8217;t work on your clients,
1091and setting up a PXE boot server is not an option, you can attempt the
1092following configuration.  It has been known to boot some
1093configurations correctly; however, there are no guarantees:</p></div>
1094<div class="listingblock">
1095<div class="content">
1096<pre><code>allow booting;
1097allow bootp;
1098
1099# Standard configuration directives...
1100
1101option domain-name "&lt;domain name&gt;";
1102option subnet-mask &lt;subnet mask&gt;;
1103option broadcast-address &lt;broadcast address&gt;;
1104option domain-name-servers &lt;dns servers&gt;;
1105option routers &lt;default router&gt;;
1106
1107# Group the PXE bootable hosts together
1108group {
1109        # PXE-specific configuration directives...
1110        option dhcp-class-identifier "PXEClient";
1111        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;
1112        next-server &lt;TFTP server&gt;;
1113        filename "/tftpboot/pxelinux.0";
1114
1115        # You need an entry like this for every host
1116        # unless you're using dynamic addresses
1117        host &lt;hostname&gt; {
1118                hardware ethernet &lt;ethernet address&gt;;
1119                fixed-address &lt;hostname&gt;;
1120        }
1121}</code></pre>
1122</div></div>
1123<div class="paragraph"><p>Note that this <strong>will not</strong> boot some clients that <strong>will</strong> boot with the
1124"conventional TFTP" configuration; Intel Boot Client 3.0 and later are
1125known to fall into this category.</p></div>
1126</div>
1127<div class="sect2">
1128<h3 id="_dhcp_config_isc_dhcpd_options">DHCP Config: ISC dhcpd options</h3>
1129<div class="paragraph"><p>ISC dhcp 3.0 supports a rather nice syntax for specifying custom
1130options; you can use the following syntax in dhcpd.conf if you are
1131running this version of dhcpd:</p></div>
1132<div class="listingblock">
1133<div class="content">
1134<pre><code>option space pxelinux;
1135option pxelinux.magic      code 208 = string;
1136option pxelinux.configfile code 209 = text;
1137option pxelinux.pathprefix code 210 = text;
1138option pxelinux.reboottime code 211 = unsigned integer 32;</code></pre>
1139</div></div>
1140<div class="literalblock">
1141<div class="content">
1142<pre><code>NOTE: In earlier versions of PXELINUX, this would only work as a
1143"site-option-space".  Since PXELINUX 2.07, this will work both as a
1144"site-option-space" (unencapsulated) and as a "vendor-option-space"
1145(type 43 encapsulated.)  This may avoid messing with the
1146dhcp-parameter-request-list, as detailed below.</code></pre>
1147</div></div>
1148<div class="paragraph"><p>Then, inside your PXELINUX-booting group or class (whereever you have
1149the PXELINUX-related options, such as the filename option), you can
1150add, for example:</p></div>
1151<div class="listingblock">
1152<div class="content">
1153<pre><code># Always include the following lines for all PXELINUX clients
1154site-option-space "pxelinux";
1155option pxelinux.magic f1:00:74:7e;
1156if exists dhcp-parameter-request-list {
1157        # Always send the PXELINUX options (specified in hexadecimal)
1158        option dhcp-parameter-request-list = concat(option dhcp-parameter-request-list,d0,d1,d2,d3);
1159}
1160# These lines should be customized to your setup
1161option pxelinux.configfile "configs/common";
1162option pxelinux.pathprefix "/tftpboot/pxelinux/files/";
1163option pxelinux.reboottime 30;
1164filename "/tftpboot/pxelinux/pxelinux.bin";</code></pre>
1165</div></div>
1166<div class="paragraph"><p>Note that the configfile is relative to the pathprefix: this will look
1167for a config file called /tftpboot/pxelinux/files/configs/common on
1168the TFTP server.</p></div>
1169<div class="paragraph"><p>The "option dhcp-parameter-request-list" statement forces the DHCP
1170server to send the PXELINUX-specific options, even though they are not
1171explicitly requested.  Since the DHCP request is done before PXELINUX
1172is loaded, the PXE client won&#8217;t know to request them.</p></div>
1173<div class="paragraph"><p>Using ISC dhcp 3.0 you can create a lot of these strings on the fly.
1174For example, to use the hexadecimal form of the hardware address as
1175the configuration file name, you could do something like:</p></div>
1176<div class="listingblock">
1177<div class="content">
1178<pre><code>site-option-space "pxelinux";
1179option pxelinux.magic f1:00:74:7e;
1180if exists dhcp-parameter-request-list {
1181        # Always send the PXELINUX options (specified in hexadecimal)
1182        option dhcp-parameter-request-list = concat(option dhcp-parameter-request-list,d0,d1,d2,d3);
1183}
1184option pxelinux.configfile =
1185        concat("pxelinux.cfg/", binary-to-ascii(16, 8, ":", hardware));
1186filename "/tftpboot/pxelinux.bin";</code></pre>
1187</div></div>
1188<div class="paragraph"><p>If you used this from a client whose Ethernet address was
118958:FA:84:CF:55:0E, this would look for a configuration file named
1190"/tftpboot/pxelinux.cfg/1:58:fa:84:cf:55:e".</p></div>
1191</div>
1192</div>
1193</div>
1194<div class="sect1">
1195<h2 id="_known_issues">KNOWN ISSUES</h2>
1196<div class="sectionbody">
1197<div class="paragraph"><p>The following problems are known with PXELINUX, so far:</p></div>
1198<div class="ulist"><ul>
1199<li>
1200<p>
1201The error recovery routine doesn&#8217;t work quite right.  For right now,
1202  it just does a hard reset - seems good enough.
1203</p>
1204</li>
1205<li>
1206<p>
1207We should probably call the UDP receive function in the keyboard
1208  entry loop, so that we answer ARP requests.
1209</p>
1210</li>
1211<li>
1212<p>
1213Boot sectors/disk images are not supported yet.
1214</p>
1215</li>
1216</ul></div>
1217<div class="paragraph"><p>If you have additional problems, please contact the Syslinux mailing
1218list (see syslinux.txt for the address.)</p></div>
1219<div class="sect2">
1220<h3 id="_broken_pxe_stacks">Broken PXE stacks</h3>
1221<div class="paragraph"><p>Lots of PXE stacks, especially old ones, have various problems of
1222varying degrees of severity.  Please see:</p></div>
1223<div class="literalblock">
1224<div class="content">
1225<pre><code>http://syslinux.zytor.com/hardware.php</code></pre>
1226</div></div>
1227<div class="olist lowerroman"><ol class="lowerroman">
1228<li>
1229<p>
1230for a list of currently known hardware problems, with workarounds
1231if known.
1232</p>
1233</li>
1234</ol></div>
1235<div class="paragraph"><p>There are a number of extremely broken PXE stacks in the field.  The
1236gPXE project (formerly known as Etherboot) provides an open-source PXE
1237stack that works with a number of cards, and which can be loaded from
1238a CD-ROM, USB key, or floppy if desired.</p></div>
1239<div class="paragraph"><p>Information on gPXE is available from:</p></div>
1240<div class="literalblock">
1241<div class="content">
1242<pre><code>http://www.etherboot.org/</code></pre>
1243</div></div>
1244<div class="olist lowerroman"><ol class="lowerroman">
1245<li>
1246<p>
1247and ready-to-use ROM or disk images from:
1248</p>
1249<div class="literalblock">
1250<div class="content">
1251<pre><code>http://www.rom-o-matic.net/</code></pre>
1252</div></div>
1253</li>
1254</ol></div>
1255<div class="paragraph"><p>Some cards, like may systems with the SiS 900, has a PXE stack which
1256works just barely well enough to load a single file, but doesn&#8217;t
1257handle the more advanced items required by PXELINUX.  If so, it is
1258possible to use the built-in PXE stack to load gPXE, which can then
1259load PXELINUX.  See:</p></div>
1260<div class="literalblock">
1261<div class="content">
1262<pre><code>http://www.etherboot.org/wiki/pxechaining</code></pre>
1263</div></div>
1264</div>
1265</div>
1266</div>
1267<div class="sect1">
1268<h2 id="_notes">NOTES</h2>
1269<div class="sectionbody">
1270<div class="sect2">
1271<h3 id="_mtftp">MTFTP</h3>
1272<div class="paragraph"><p>PXELINUX does not support MTFTP, and there are no plans of doing so, as
1273MTFTP is inherently broken for files more than 65535 packets (about 92
1274MB) in size.  It is of course possible to use MTFTP for the initial
1275boot, if you have such a setup.  MTFTP server setup is beyond the scope
1276of this document.</p></div>
1277</div>
1278<div class="sect2">
1279<h3 id="_error_recovery">Error Recovery</h3>
1280<div class="paragraph"><p>If the boot fails, PXELINUX (unlike SYSLINUX) will not wait forever;
1281rather, if it has not received any input for approximately five
1282minutes after displaying an error message, it will reset the machine.
1283This allows an unattended machine to recover in case it had bad enough
1284luck of trying to boot at the same time the TFTP server goes down.</p></div>
1285</div>
1286</div>
1287</div>
1288<div class="sect1">
1289<h2 id="_see_also">SEE ALSO</h2>
1290<div class="sectionbody">
1291<div class="paragraph"><p><strong>syslinux.cfg</strong>(5), <strong>syslinux-cli</strong>(1), <strong>lilo</strong>(8), <strong>keytab-lilo.pl</strong>(8),
1292<strong>fdisk</strong>(8), <strong>mkfs</strong>(8), <strong>superformat</strong>(1).</p></div>
1293</div>
1294</div>
1295<div class="sect1">
1296<h2 id="_author">AUTHOR</h2>
1297<div class="sectionbody">
1298<div class="paragraph"><p>This AsciiDoc derived document is a modified version of the original
1299<strong>SYSLINUX</strong> documentation by H. Peter Anvin &lt;<a href="mailto:hpa@zytor.com">hpa@zytor.com</a>&gt;.  The conversion
1300to an AsciiDoc was made by Gene Cumm &lt;<a href="mailto:gene.cumm@gmail.com">gene.cumm@gmail.com</a>&gt;</p></div>
1301</div>
1302</div>
1303</div>
1304<div id="footnotes"><hr /></div>
1305<div id="footer">
1306<div id="footer-text">
1307Last updated 2014-01-17 16:09:56 PST
1308</div>
1309</div>
1310</body>
1311</html>
1312