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">
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 */
13 font-family: Georgia
,serif
;
17 h1
, h2
, h3
, h4
, h5
, h6
,
18 div
.title
, caption
.title
,
19 thead
, p
.table
.header
,
21 #author, #revnumber
, #revdate
, #revremark
,
23 font-family: Arial
,Helvetica
,sans-serif
;
27 margin: 1em 5% 1em 5%;
32 text-decoration: underline
;
48 h1
, h2
, h3
, h4
, h5
, h6
{
56 border-bottom: 2px solid silver
;
76 border: 1px solid silver
;
87 ul
> li
{ color: #aaa; }
88 ul
> li
> * { color: black
; }
90 .monospaced, code, pre {
91 font-family: "Courier New", Courier
, monospace
;
106 #revnumber, #revdate
, #revremark
{
111 border-top: 2px solid silver
;
117 padding-bottom: 0.5em;
121 padding-bottom: 0.5em;
126 margin-bottom: 1.5em;
128 div
.imageblock
, div
.exampleblock
, div
.verseblock
,
129 div
.quoteblock
, div
.literalblock
, div
.listingblock
, div
.sidebarblock
,
130 div
.admonitionblock
{
132 margin-bottom: 1.5em;
134 div
.admonitionblock
{
136 margin-bottom: 2.0em;
141 div
.content
{ /* Block element content. */
145 /* Block element titles. */
146 div
.title
, caption
.title
{
151 margin-bottom: 0.5em;
157 td div
.title:first-child
{
160 div
.content div
.title:first-child
{
163 div
.content
+ div
.title
{
167 div
.sidebarblock
> div
.content
{
169 border: 1px solid
#dddddd;
170 border-left: 4px solid
#f0f0f0;
174 div
.listingblock
> div
.content
{
175 border: 1px solid
#dddddd;
176 border-left: 5px solid
#f0f0f0;
181 div
.quoteblock
, div
.verseblock
{
185 border-left: 5px solid
#f0f0f0;
189 div
.quoteblock
> div
.attribution
{
194 div
.verseblock
> pre
.content
{
195 font-family: inherit
;
198 div
.verseblock
> div
.attribution
{
202 /* DEPRECATED: Pre version 8.2.7 verse style literal block. */
203 div
.verseblock
+ div
.attribution
{
207 div
.admonitionblock
.icon
{
211 text-decoration: underline
;
213 padding-right: 0.5em;
215 div
.admonitionblock td
.content
{
217 border-left: 3px solid
#dddddd;
220 div
.exampleblock
> div
.content
{
221 border-left: 3px solid
#dddddd;
225 div
.imageblock div
.content
{ padding-left: 0; }
226 span
.image img
{ border-style: none
; }
227 a
.image:visited
{ color: white
; }
231 margin-bottom: 0.8em;
244 list-style-position: outside
;
247 list-style-type: decimal
;
250 list-style-type: lower-alpha
;
253 list-style-type: upper-alpha
;
256 list-style-type: lower-roman
;
259 list-style-type: upper-roman
;
262 div
.compact ul
, div
.compact ol
,
263 div
.compact p
, div
.compact p
,
264 div
.compact div
, div
.compact div
{
266 margin-bottom: 0.1em;
278 margin-bottom: 0.8em;
281 padding-bottom: 15px;
283 dt
.hdlist1
.strong
, td
.hdlist1
.strong
{
289 padding-right: 0.8em;
295 div
.hdlist
.compact tr
{
304 .footnote, .footnoteref {
308 span
.footnote
, span
.footnoteref
{
309 vertical-align: super
;
313 margin: 20px 0 20px 0;
317 #footnotes div
.footnote
{
323 border-top: 1px solid silver
;
332 padding-right: 0.5em;
333 padding-bottom: 0.3em;
341 #footer-badges { display: none
; }
345 margin-bottom: 2.5em;
353 margin-bottom: 0.1em;
356 div
.toclevel0
, div
.toclevel1
, div
.toclevel2
, div
.toclevel3
, div
.toclevel4
{
373 span
.aqua
{ color: aqua
; }
374 span
.black
{ color: black
; }
375 span
.blue
{ color: blue
; }
376 span
.fuchsia
{ color: fuchsia
; }
377 span
.gray
{ color: gray
; }
378 span
.green
{ color: green
; }
379 span
.lime
{ color: lime
; }
380 span
.maroon
{ color: maroon
; }
381 span
.navy
{ color: navy
; }
382 span
.olive
{ color: olive
; }
383 span
.purple
{ color: purple
; }
384 span
.red
{ color: red
; }
385 span
.silver
{ color: silver
; }
386 span
.teal
{ color: teal
; }
387 span
.white
{ color: white
; }
388 span
.yellow
{ color: yellow
; }
390 span
.aqua-background
{ background: aqua
; }
391 span
.black-background
{ background: black
; }
392 span
.blue-background
{ background: blue
; }
393 span
.fuchsia-background
{ background: fuchsia
; }
394 span
.gray-background
{ background: gray
; }
395 span
.green-background
{ background: green
; }
396 span
.lime-background
{ background: lime
; }
397 span
.maroon-background
{ background: maroon
; }
398 span
.navy-background
{ background: navy
; }
399 span
.olive-background
{ background: olive
; }
400 span
.purple-background
{ background: purple
; }
401 span
.red-background
{ background: red
; }
402 span
.silver-background
{ background: silver
; }
403 span
.teal-background
{ background: teal
; }
404 span
.white-background
{ background: white
; }
405 span
.yellow-background
{ background: yellow
; }
407 span
.big
{ font-size: 2em; }
408 span
.small
{ font-size: 0.6em; }
410 span
.underline
{ text-decoration: underline
; }
411 span
.overline
{ text-decoration: overline
; }
412 span
.line-through
{ text-decoration: line-through
; }
414 div
.unbreakable
{ page-break-inside: avoid
; }
424 margin-bottom: 1.5em;
426 div
.tableblock
> table
{
427 border: 3px solid
#527bbd;
429 thead
, p
.table
.header
{
436 /* Because the table frame attribute is overriden by CSS in most browsers. */
437 div
.tableblock
> table
[frame
="void"] {
440 div
.tableblock
> table
[frame
="hsides"] {
441 border-left-style: none
;
442 border-right-style: none
;
444 div
.tableblock
> table
[frame
="vsides"] {
445 border-top-style: none
;
446 border-bottom-style: none
;
457 margin-bottom: 1.5em;
459 thead
, p
.tableblock
.header
{
470 border-color: #527bbd;
471 border-collapse: collapse
;
473 th
.tableblock
, td
.tableblock
{
477 border-color: #527bbd;
480 table
.tableblock
.frame-topbot
{
481 border-left-style: hidden
;
482 border-right-style: hidden
;
484 table
.tableblock
.frame-sides
{
485 border-top-style: hidden
;
486 border-bottom-style: hidden
;
488 table
.tableblock
.frame-none
{
489 border-style: hidden
;
492 th
.tableblock
.halign-left
, td
.tableblock
.halign-left
{
495 th
.tableblock
.halign-center
, td
.tableblock
.halign-center
{
498 th
.tableblock
.halign-right
, td
.tableblock
.halign-right
{
502 th
.tableblock
.valign-top
, td
.tableblock
.valign-top
{
505 th
.tableblock
.valign-middle
, td
.tableblock
.valign-middle
{
506 vertical-align: middle
;
508 th
.tableblock
.valign-bottom
, td
.tableblock
.valign-bottom
{
509 vertical-align: bottom
;
520 padding-bottom: 0.5em;
521 border-top: 2px solid silver
;
522 border-bottom: 2px solid silver
;
527 body
.manpage div
.sectionbody
{
532 body
.manpage div#toc
{ display: none
; }
537 <script type=
"text/javascript">
539 var asciidoc
= { // Namespace.
541 /////////////////////////////////////////////////////////////////////
542 // Table Of Contents generator
543 /////////////////////////////////////////////////////////////////////
545 /* Author: Mihai Bazon, September 2002
546 * http://students.infoiasi.ro/~mishoo
548 * Table Of Content generator
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.
555 /* modified by Troy D. Hanson, September 2006. License: GPL */
556 /* modified by Stuart Rackham, 2006, 2009. License: GPL */
559 toc: function (toclevels
) {
561 function getText(el
) {
563 for (var i
= el
.firstChild
; i
!= null; i
= i
.nextSibling
) {
564 if (i
.nodeType
== 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
566 else if (i
.firstChild
!= null)
572 function TocEntry(el
, text
, toclevel
) {
575 this.toclevel
= toclevel
;
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
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);
599 var toc
= document
.getElementById("toc");
604 // Delete existing TOC entries in case we're reloading the TOC.
605 var tocEntriesToRemove
= [];
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
);
614 for (i
= 0; i
< tocEntriesToRemove
.length
; i
++) {
615 toc
.removeChild(tocEntriesToRemove
[i
]);
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");
629 div
.className
= "toclevel" + entry
.toclevel
;
630 toc
.appendChild(div
);
632 if (entries
.length
== 0)
633 toc
.parentNode
.removeChild(toc
);
637 /////////////////////////////////////////////////////////////////////
638 // Footnotes generator
639 /////////////////////////////////////////////////////////////////////
641 /* Based on footnote generation code from:
642 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
645 footnotes: function () {
646 // Delete existing footnote entries in case we're reloading the footnodes.
648 var noteholder
= document
.getElementById("footnotes");
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
);
658 for (i
= 0; i
< entriesToRemove
.length
; i
++) {
659 noteholder
.removeChild(entriesToRemove
[i
]);
662 // Rebuild footnote entries.
663 var cont
= document
.getElementById("content");
664 var spans
= cont
.getElementsByTagName("span");
667 for (i
=0; i
<spans
.length
; i
++) {
668 if (spans
[i
].className
== "footnote") {
670 var note
= spans
[i
].getAttribute("data-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];
676 "[<a id='_footnoteref_" + n
+ "' href='#_footnote_" + n
+
677 "' title='View footnote' class='footnote'>" + n
+ "</a>]";
678 spans
[i
].setAttribute("data-note", note
);
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
;
689 noteholder
.parentNode
.removeChild(noteholder
);
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.
698 "[<a href='#_footnote_" + n
+
699 "' title='View footnote' class='footnote'>" + n
+ "</a>]";
705 install: function(toclevels
) {
708 function reinstall() {
709 asciidoc
.footnotes();
711 asciidoc
.toc(toclevels
);
715 function reinstallAndRemoveTimer() {
716 clearInterval(timerId
);
720 timerId
= setInterval(reinstall
, 500);
721 if (document
.addEventListener
)
722 document
.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer
, false);
724 window
.onload
= reinstallAndRemoveTimer
;
732 <body class=
"manpage">
735 pxelinux(
1) Manual Page
738 <div class=
"sectionbody">
740 The Syslinux derivative PXELINUX for PXE network booting
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">
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
758 server, using a network ROM conforming to the Intel PXE (Pre-Execution
759 Environment) specification.
<strong>PXELINUX
</strong> is
<em>*not*
</em> a program that is
760 intended to be flashed or burned into a PROM on the network card; if
761 you want that, check out Etherboot (
<a href=
"http://www.etherboot.org/">http://www.etherboot.org/
</a>).
762 Etherboot
5.4 or later can also be used to create a PXE-compliant boot
763 PROM 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>
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
771 option
210 (pxelinux.pathprefix), the hardcoded path-prefix or the
772 parent 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"
774 results in
"tftp://192.168.2.3/boot/",
"192.168.2.3::boot/" in older
775 PXELINUX 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>
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
784 configuration file name depends on the IP address of the booting
785 machine. After attempting the file as specified in the DHCP or
786 hardcoded options, PXELINUX will probe the following paths, prefixed
787 with
"pxelinux.cfg/", under the initial current working directory:
</p></div>
788 <div class=
"ulist"><ul>
791 The client UUID if provided by the PXE stack (note, some BIOSes don
’t
792 have a valid UUID, and you might end up with something like all
1’s.)
793 This is in the standard UUID format using lower case hexadecimal digits,
794 e.g. b8945908-d6a6-
41a9-
611d-
74a6ab80b83d.
799 The hardware type (using its ARP type code) and address, all in lower
800 case hexadecimal with dash separators; for example, for an Ethernet (ARP
801 type
1) with address
88:
99:AA:BB:CC:DD it would search for the filename
802 01-
88-
99-aa-bb-cc-dd.
807 The 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
809 hexadecimal IP address for any host.) followed by removing characters,
810 one at a time, from the end.
819 <div class=
"paragraph"><p>Starting in release
3.20, if PXELINUX can not find a configuration file,
820 it will reboot after the timeout interval has expired. This keeps a
821 machine from getting stuck indefinitely due to a boot server failure.
</p></div>
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
828 nonstandard DHCP options, which depending on your DHCP server you may be
829 able to use to customize the specific behaviour of
<strong>PXELINUX
</strong>. See RFC
830 5071 for some additional information about these options. Options for
831 <strong>PXELINUX
</strong> can be specified by DHCP options or hardcoded into the
834 <h3 id=
"_option_priority">Option Priority
</h3>
835 <div class=
"paragraph"><p>Hardcoded after-options are applied after DHCP options (and overrride)
836 while hardcoded before-options are applied prior to DHCP options and
837 default behavior takes the lowest priority.
</p></div>
840 <h3 id=
"_dhcp_options">DHCP options
</h3>
841 <div class=
"dlist"><dl>
843 <strong>Option
208</strong> (pxelinux.magic)
847 Earlier 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
849 whatsoever. As of
<strong>PXELINUX
</strong> 3.55, this option is deprecated and is no
854 <strong>Option
209</strong> (pxelinux.configfile)
858 Specifies the initial
<strong>PXELINUX
</strong> configuration file name which may be
859 qualified or unqualified.
863 <strong>Option
210</strong> (pxelinux.pathprefix)
867 Specifies the
<strong>PXELINUX
</strong> common path prefix, instead of deriving it from
868 the boot file name. This almost certainly needs to end in whatever
869 character the TFTP server OS uses as a pathname separator, e.g. slash
874 <strong>Option
211</strong> (pxelinux.reboottime)
878 Specifies, in seconds, the time to wait before reboot in the event of
879 TFTP failure.
0 means wait
"forever" (in reality, it waits
880 approximately
136 years.)
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
888 hard-code DHCP options into the pxelinux
.0 image file; this is
889 sometimes useful when the DHCP server is under different
890 administrative 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',
896 209 =
> 'config-file',
897 210 =
> 'path-prefix',
898 211 =
> 'reboottime'
</code></pre>
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
907 supports HTTP and FTP transfers, greatly increasing load speed and
908 allowing for standard HTTP scripts to present PXELINUX
’s configuration
909 file. To use http or ftp, use standard URL syntax as filename; use the
910 DHCP options below to transmit a suitable URL prefix to the client, or
911 use the
"pxelinux-options" tool provided in the utils directory to
912 program it directly into the lpxelinux
.0 file.
</p></div>
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>
921 <strong>::filename
</strong>
925 Suppresses the common filename prefix, i.e. passes the string
"filename"
926 unmodified to the server.
930 <strong>IP address::filename
</strong> (e.g.
192.168.2.3::filename)
934 Suppresses 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.
938 <div class=
"paragraph"><p>:: was chosen because it is unlikely to conflict with operating system
939 usage. However, if you happen to have an environment for which the
940 special treatment of :: is a problem, please contact the Syslinux
941 mailing list.
</p></div>
942 <div class=
"paragraph"><p>Since version
4.00, PXELINUX also supports standard URL syntax.
</p></div>
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
949 the kernel. In special circumstances (for example, when using MEMDISK
950 to boot an operating system with an UNDI network driver) it might be
951 desirable to keep the PXE stack in memory. If the option
"keeppxe"
952 is given on the kernel command line, PXELINUX will keep the PXE and
953 UNDI stacks in memory. (If you don
’t know what this means, you
954 probably don
’t need it.)
</p></div>
958 <h2 id=
"_examples">EXAMPLES
</h2>
959 <div class=
"sectionbody">
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
963 b8945908-d6a6-
41a9-
611d-
74a6ab80b83d, Ethernet MAC address
964 88:
99:AA:BB:CC:DD and IPv4 address
192.168.2.91, the following files in
965 this 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
969 mybootdir/pxelinux.cfg/
01-
88-
99-aa-bb-cc-dd
970 mybootdir/pxelinux.cfg/C0A8025B
971 mybootdir/pxelinux.cfg/C0A8025
972 mybootdir/pxelinux.cfg/C0A802
973 mybootdir/pxelinux.cfg/C0A80
974 mybootdir/pxelinux.cfg/C0A8
975 mybootdir/pxelinux.cfg/C0A
976 mybootdir/pxelinux.cfg/C0
977 mybootdir/pxelinux.cfg/C
978 mybootdir/pxelinux.cfg/default
</code></pre>
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
984 option (RFC
1784/RFC
2349). The
"tftp-hpa" TFTP server, which support
985 options, is available at:
</p></div>
986 <div class=
"literalblock">
987 <div class=
"content">
988 <pre><code>http://www.kernel.org/pub/software/network/tftp/
989 ftp://www.kernel.org/pub/software/network/tftp/
</code></pre>
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
994 <div class=
"literalblock">
995 <div class=
"content">
996 <pre><code>ftp://ftp.mamalinux.com/pub/atftp/
</code></pre>
998 <div class=
"paragraph"><p>If your boot server is running Windows (and you can
’t fix that), try
999 tftpd32 by Philippe Jounin (you need version
2.11 or later; previous
1000 versions 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>
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
1009 BOOTP. However, most PXE implementations
 — this includes all Intel
1010 ones version
0.99n and later
 — seem to be able to boot in a
1011 "conventional" DHCP/TFTP configuration. Assuming you don
’t have to
1012 support any very old or otherwise severely broken clients, this is
1013 probably the best configuration unless you already have a PXE boot
1014 server on your network.
</p></div>
1015 <div class=
"paragraph"><p>A sample DHCP setup, using the
"conventional TFTP" configuration,
1016 would look something like the following, using ISC dhcp
2.0 dhcpd.conf
1018 <div class=
"listingblock">
1019 <div class=
"content">
1020 <pre><code>allow booting;
1023 # Standard configuration directives...
1025 option domain-name
"<domain name>";
1026 option subnet-mask
<subnet mask
>;
1027 option broadcast-address
<broadcast address
>;
1028 option domain-name-servers
<dns servers
>;
1029 option routers
<default router
>;
1031 # Group the PXE bootable hosts together
1033 # PXE-specific configuration directives...
1034 next-server
<TFTP server address
>;
1035 filename
"/tftpboot/pxelinux.0";
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
>;
1045 <div class=
"paragraph"><p>Note that if your particular TFTP daemon runs under chroot (tftp-hpa
1046 will do this if you specify the -s (secure) option; this is highly
1047 recommended), you almost certainly should not include the /tftpboot
1048 prefix in the filename statement.
</p></div>
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
1053 should set up a
"PXE boot server" on port
4011 of your TFTP server; a
1054 free 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
1057 the same except for an
"option dhcp-class-identifier" (
"option
1058 vendor-class-identifier" if you are using DHCP
3.0):
</p></div>
1059 <div class=
"listingblock">
1060 <div class=
"content">
1061 <pre><code>allow booting;
1064 # Standard configuration directives...
1066 option domain-name
"<domain name>";
1067 option subnet-mask
<subnet mask
>;
1068 option broadcast-address
<broadcast address
>;
1069 option domain-name-servers
<dns servers
>;
1070 option routers
<default router
>;
1072 # Group the PXE bootable hosts together
1074 # PXE-specific configuration directives...
1075 option dhcp-class-identifier
"PXEClient";
1076 next-server
<pxe boot server address
>;
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
>;
1086 <div class=
"paragraph"><p>Here, the boot file name is obtained from the PXE server.
</p></div>
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,
1091 and setting up a PXE boot server is not an option, you can attempt the
1092 following configuration. It has been known to boot some
1093 configurations correctly; however, there are no guarantees:
</p></div>
1094 <div class=
"listingblock">
1095 <div class=
"content">
1096 <pre><code>allow booting;
1099 # Standard configuration directives...
1101 option domain-name
"<domain name>";
1102 option subnet-mask
<subnet mask
>;
1103 option broadcast-address
<broadcast address
>;
1104 option domain-name-servers
<dns servers
>;
1105 option routers
<default router
>;
1107 # Group the PXE bootable hosts together
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";
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
>;
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
1125 known to fall into this category.
</p></div>
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
1130 options; you can use the following syntax in dhcpd.conf if you are
1131 running this version of dhcpd:
</p></div>
1132 <div class=
"listingblock">
1133 <div class=
"content">
1134 <pre><code>option space pxelinux;
1135 option pxelinux.magic code
208 = string;
1136 option pxelinux.configfile code
209 = text;
1137 option pxelinux.pathprefix code
210 = text;
1138 option pxelinux.reboottime code
211 = unsigned integer
32;
</code></pre>
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
1146 dhcp-parameter-request-list, as detailed below.
</code></pre>
1148 <div class=
"paragraph"><p>Then, inside your PXELINUX-booting group or class (whereever you have
1149 the PXELINUX-related options, such as the filename option), you can
1150 add, for example:
</p></div>
1151 <div class=
"listingblock">
1152 <div class=
"content">
1153 <pre><code># Always include the following lines for all PXELINUX clients
1154 site-option-space
"pxelinux";
1155 option pxelinux.magic f1:
00:
74:
7e;
1156 if 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);
1160 # These lines should be customized to your setup
1161 option pxelinux.configfile
"configs/common";
1162 option pxelinux.pathprefix
"/tftpboot/pxelinux/files/";
1163 option pxelinux.reboottime
30;
1164 filename
"/tftpboot/pxelinux/pxelinux.bin";
</code></pre>
1166 <div class=
"paragraph"><p>Note that the configfile is relative to the pathprefix: this will look
1167 for a config file called /tftpboot/pxelinux/files/configs/common on
1168 the TFTP server.
</p></div>
1169 <div class=
"paragraph"><p>The
"option dhcp-parameter-request-list" statement forces the DHCP
1170 server to send the PXELINUX-specific options, even though they are not
1171 explicitly requested. Since the DHCP request is done before PXELINUX
1172 is 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.
1174 For example, to use the hexadecimal form of the hardware address as
1175 the 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";
1179 option pxelinux.magic f1:
00:
74:
7e;
1180 if 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);
1184 option pxelinux.configfile =
1185 concat(
"pxelinux.cfg/", binary-to-ascii(
16,
8,
":", hardware));
1186 filename
"/tftpboot/pxelinux.bin";
</code></pre>
1188 <div class=
"paragraph"><p>If you used this from a client whose Ethernet address was
1189 58: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>
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>
1201 The error recovery routine doesn
’t work quite right. For right now,
1202 it just does a hard reset - seems good enough.
1207 We should probably call the UDP receive function in the keyboard
1208 entry loop, so that we answer ARP requests.
1213 Boot sectors/disk images are not supported yet.
1217 <div class=
"paragraph"><p>If you have additional problems, please contact the Syslinux mailing
1218 list (see syslinux.txt for the address.)
</p></div>
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
1222 varying 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>
1227 <div class=
"olist lowerroman"><ol class=
"lowerroman">
1230 for a list of currently known hardware problems, with workarounds
1235 <div class=
"paragraph"><p>There are a number of extremely broken PXE stacks in the field. The
1236 gPXE project (formerly known as Etherboot) provides an open-source PXE
1237 stack that works with a number of cards, and which can be loaded from
1238 a 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>
1244 <div class=
"olist lowerroman"><ol class=
"lowerroman">
1247 and ready-to-use ROM or disk images from:
1249 <div class=
"literalblock">
1250 <div class=
"content">
1251 <pre><code>http://www.rom-o-matic.net/
</code></pre>
1255 <div class=
"paragraph"><p>Some cards, like may systems with the SiS
900, has a PXE stack which
1256 works just barely well enough to load a single file, but doesn
’t
1257 handle the more advanced items required by PXELINUX. If so, it is
1258 possible to use the built-in PXE stack to load gPXE, which can then
1259 load PXELINUX. See:
</p></div>
1260 <div class=
"literalblock">
1261 <div class=
"content">
1262 <pre><code>http://www.etherboot.org/wiki/pxechaining
</code></pre>
1268 <h2 id=
"_notes">NOTES
</h2>
1269 <div class=
"sectionbody">
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
1273 MTFTP is inherently broken for files more than
65535 packets (about
92
1274 MB) in size. It is of course possible to use MTFTP for the initial
1275 boot, if you have such a setup. MTFTP server setup is beyond the scope
1276 of this document.
</p></div>
1279 <h3 id=
"_error_recovery">Error Recovery
</h3>
1280 <div class=
"paragraph"><p>If the boot fails, PXELINUX (unlike SYSLINUX) will not wait forever;
1281 rather, if it has not received any input for approximately five
1282 minutes after displaying an error message, it will reset the machine.
1283 This allows an unattended machine to recover in case it had bad enough
1284 luck of trying to boot at the same time the TFTP server goes down.
</p></div>
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>
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
1300 to an AsciiDoc was made by Gene Cumm
<<a href=
"mailto:gene.cumm@gmail.com">gene.cumm@gmail.com
</a>></p></div>
1304 <div id=
"footnotes"><hr /></div>
1306 <div id=
"footer-text">
1307 Last updated
2014-
01-
17 16:
09:
56 PST