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’t 792have a valid UUID, and you might end up with something like all 1’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’s IPv4 address in upper-case hexidecimal (ie 192.168.2.91 808→ 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 => 'domain-name-servers', 894 15 => 'domain-name', 895 54 => 'next-server', 896209 => 'config-file', 897210 => 'path-prefix', 898211 => '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’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’t know what this means, you 954probably don’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’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 — this includes all Intel 1010ones version 0.99n and later — seem to be able to boot in a 1011"conventional" DHCP/TFTP configuration. Assuming you don’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 "<domain name>"; 1026option subnet-mask <subnet mask>; 1027option broadcast-address <broadcast address>; 1028option domain-name-servers <dns servers>; 1029option routers <default router>; 1030 1031# Group the PXE bootable hosts together 1032group { 1033 # PXE-specific configuration directives... 1034 next-server <TFTP server address>; 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 <hostname> { 1040 hardware ethernet <ethernet address>; 1041 fixed-address <hostname>; 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 "<domain name>"; 1067option subnet-mask <subnet mask>; 1068option broadcast-address <broadcast address>; 1069option domain-name-servers <dns servers>; 1070option routers <default router>; 1071 1072# Group the PXE bootable hosts together 1073group { 1074 # PXE-specific configuration directives... 1075 option dhcp-class-identifier "PXEClient"; 1076 next-server <pxe boot server address>; 1077 1078 # You need an entry like this for every host 1079 # unless you're using dynamic addresses 1080 host <hostname> { 1081 hardware ethernet <ethernet address>; 1082 fixed-address <hostname>; 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’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 "<domain name>"; 1102option subnet-mask <subnet mask>; 1103option broadcast-address <broadcast address>; 1104option domain-name-servers <dns servers>; 1105option routers <default router>; 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 <TFTP server>; 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 <hostname> { 1118 hardware ethernet <ethernet address>; 1119 fixed-address <hostname>; 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’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’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’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 <<a href="mailto:hpa@zytor.com">hpa@zytor.com</a>>. The conversion 1300to an AsciiDoc was made by Gene Cumm <<a href="mailto:gene.cumm@gmail.com">gene.cumm@gmail.com</a>></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