1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
|
PXELINUX
Version 1.48
September 26, 1999
A bootloader for Linux using the PXE network booting protocol
Copyright (C) 1999 H. Peter Anvin
This program is provided under the terms of the GNU General Public
License, version 2 or, at your option, any later version. There is no
warranty, neither expressed nor implied, to the function of this
program. Please see the included file COPYING for details.
----------------------------------------------------------------------
PXELINUX is a SYSLINUX derivative, for booting Linux off a network
server, using a network ROM conforming to the Intel PXE (Pre-Execution
Environment) specification. PXELINUX is *not* a program that is
intended to be flashed or burned into a PROM on the network card; if
you want that, check out NILO (http://www.nilo.org/). NILO can also
be used to create a PXE-compliant boot PROM for most network cards
which have drivers for Linux or FreeBSD.
++++ HOW TO CONFIGURE PXELINUX ++++
PXELINUX operates in many ways like SYSLINUX. If you are not familiar
with SYSLINUX, read syslinux.doc first, since this documentation only
explains the differences.
On the TFTP server, create the directory "/tftpboot", and copy the
following files to it:
pxelinux.bin - from the SYSLINUX distribution
any kernel or initrd images you want to boot
Finally, create the directory "/tftpboot/pxelinux.cfg". The
configuration file (equivalent of syslinux.cfg) will live in this
directory. Because more than one system may be booted from the same
server, the configuration file name depends on the IP address of the
booting machine. PXELINUX will search for its config file on the boot
server in the following way:
First, it will search for the config file using its own IP address
in upper case hexadecimal, e.g. 192.0.2.91 -> C000025B.
If that file is not found, it will remove one hex digit and try
again. For 192.0.2.91, if C000025B is not found, it will try
C000025, C00002, C0000, C000, C00, C0, and C in that order.
Finally, it will try looking for a file named "default" (in lower
case).
It should be noted that all filename references are relative to the
directory pxelinux.bin lives in (usually /tftpboot). PXELINUX
generally requires that filenames are 31 characters or shorter in
length.
PXELINUX does not support MTFTP, and I have no immediate plans of
doing so. It is of course possible to use MTFTP for the initial boot,
if you have such a setup. MTFTP server setup is beyond the scope of
this document.
++++ SOME NOTES ON THE TFTP SERVER ++++
PXELINUX currently requires that the boot server has a TFTP server
which supports the "tsize" TFTP option (RFC 1784/RFC 2349). The
"tftp-hpa" TFTP server, which support options, is available at:
http://www.kernel.org/pub/software/network/tftp/
ftp://www.kernel.org/pub/software/network/tftp/
... and on any kernel.org mirror (see http://www.kernel.org/mirrors/).
Unfortunately, the Intel LANDesk Service Agent II prior to version
0.99h (PXE PDK V2.4) seems to have a rather serious bug: it requests
the TFTP "blksize" option, but will be mortally confused if this
option is actually accepted by the server! There are three possible
workarounds for this bug:
1. Use a TFTP server with doesn't support "blksize".
Unfortunately, PXELINUX requires the "tsize" option to be
supported, and it is very unusual for TFTP servers to implement one
and not the other. The "tftp-hpa" TFTP server (see above) therefore
can be configured to disable individual options with a command-line
option (-r <optionname>). In this case, use "-r blksize".
2. Use MTFTP for the initial bootstrap. You need an MTFTP server with
the appropriate DHCP setup to do this.
3. Use appropriate DHCP options that the client will attempt MTFTP
before trying conventional TFTP. It seems that the client will not
request the "blksize" option if it has tried MTFTP and failed.
These DHCP options are beyond the scope of this document.
++++ SETTING UP THE DHCP SERVER ++++
The PXE protocol uses a very complex set of extensions to DHCP or
BOOTP. ISC dhcp 3.0, currently in beta, appears to have enough smarts
to support at least most of the full protocol.
However, I believe I have found a magic cookie set of options which is
adequate to make all or most existing PXE client boot.
Using ISC dhcp 2.0 dhcpd.conf syntax:
configuration:
allow booting;
allow bootp;
filename "/tftpboot/pxelinux.bin" ;
option dhcp-class-identifier "PXEClient";
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;
next-server <TFTP-server>;
# server-identifier <TFTP-server>; # Illegal! See below
option domain-name "<domain name>";
option subnet-mask <subnet mask>;
option broadcast-address <broadcast address>;
option domain-name-servers <dns servers>;
option routers <default router>;
host <hostname> {
hardware ethernet <ethernet address>;
fixed-address <hostname>;
}
Note that if your particular TFTP daemon runs under chroot (tftp-hpa
will do this if you specify the -s (secure) option; this is
recommended), you most likely should not include the /tftpboot prefix.
If the DHCP and TFTP servers are not on the same machine, you are
supposed to set up a DHCP server on port 4011 on the TFTP server; this
is the "PXE boot server", which uses the DHCP protocol. If this is
not possible, you can try adding the directive "server-identifier
<TFTP-server>;" Unfortunately this is a violation of DHCP
protocol, but some PXE implementations do not accept the next-server
directive without it or the "boot server".
I have successfully booted an Intel N440BX ("Nightshade") motherboard
with onboard Ethernet and "Intel LANDesk(R) Service Agent II version
0.99c" (derived from the Intel PXE PDK V2.0) and the Intel PRO/100+
Management Adapter "Boot agent 2.6 (build 071)" (derived from the
Intel PXE PDK V3.0 bld 071) using the configuration above and ISC
dhcpd 2.0.
++++ SOME NOTES ++++
If the boot fails, PXELINUX (unlike SYSLINUX) will not wait forever;
rather, if it has not received any input for approximately five
minutes after displaying an error message, it will reset the machine.
This allows the machine to recover in case it had bad enough luck of
trying to boot at the same time the TFTP server goes down.
++++ PXELINUX IS STILL BETA ++++
PXELINUX is still very much beta; however, I'd be interested in
hearing about any experiences you might have with it, good or bad. If
you have any comments, please use the SYSLINUX mailing list mentioned
at the end of syslinux.doc. Thanks!
Currently known problems:
+ Requires a TFTP server which supports the "tsize" option.
+ The error recovery routine doesn't work quite right. For right now,
it just does a hard reset - seems good enough.
+ There may be funnies with memory management. The PXE spec has no
decent way of telling it to free up all memory and unchain any
interrupts; it allows the base stack to be unloaded, but not the
UNDI driver.
+ There seems to be a problem with sending ACK "storms"; a number of
ACK packets fired off without the proper delay in between. I
suspect this is a PXE firmware problem, rather than a PXELINUX
problem.
+ We should probably call the UDP receive function in the keyboard
entry loop, so that we answer ARP requests.
+ Boot sectors don't work yet... they probably need auxilliary information
(such as device) to work at all.
|