If your machine is connected to a local area network, you may be able to boot it over the network from another machine, using TFTP. If you intend to boot the installation system from another machine, the boot files will need to be placed in specific locations on that machine, and the machine configured to support booting of your specific machine.
You need to setup a TFTP server, and for many machines, a BOOTP server , or DHCP server.
BOOTP is an IP protocol that informs a computer of its IP address and where on the network to obtain a boot image. The DHCP (Dynamic Host Configuration Protocol) is a more flexible, backwards-compatible extension of BOOTP. Some systems can only be configured via DHCP.
The Trivial File Transfer Protocol (TFTP) is used to serve the boot image to the client. Theoretically, any server, on any platform, which implements these protocols, may be used. In the examples in this section, we shall provide commands for SunOS 4.x, SunOS 5.x (a.k.a. Solaris), and GNU/Linux.
To use the Pre-boot Execution Environment (PXE) method of TFTP
booting, you will need a TFTP server with tsize
support. On an Ubuntu or Debian GNU/Linux server,
the atftpd
and
tftpd-hpa
packages qualify; we recommend
tftpd-hpa
.
There are two BOOTP servers available for GNU/Linux, the CMU
bootpd and the other is actually a DHCP server, ISC
dhcpd, which are contained in the
bootp
and dhcp
packages
in Ubuntu.
To use CMU bootpd, you must first uncomment (or
add) the relevant line in /etc/inetd.conf
. On
Ubuntu or Debian GNU/Linux, you can run update-inetd --enable
bootps
, then /etc/init.d/inetd
reload
to do so. Elsewhere, the line in question should
look like:
bootps dgram udp wait root /usr/sbin/bootpd bootpd -i -t 120
Now, you must create an /etc/bootptab
file. This
has the same sort of familiar and cryptic format as the good old BSD
printcap
, termcap
, and
disktab
files. See the
bootptab
manual page for more information. For
CMU bootpd, you will need to know the hardware
(MAC) address of the client. Here is an example
/etc/bootptab
:
client:\ hd=/tftpboot:\ bf=tftpboot.img:\ ip=192.168.1.90:\ sm=255.255.255.0:\ sa=192.168.1.1:\ ha=0123456789AB:
You will need to change at least the "ha" option, which specifies the hardware address of the client. The "bf" option specifies the file a client should retrieve via TFTP; see Section 4.5.4, “Move TFTP Images Into Place” for more details.
By contrast, setting up BOOTP with ISC dhcpd is
really easy, because it treats BOOTP clients as a moderately special
case of DHCP clients. Some architectures require a complex
configuration for booting clients via BOOTP. If yours is one of
those, read the section Section 4.5.2, “Setting up a DHCP server”. Otherwise, you
will probably be able to get away with simply adding the
allow bootp
directive to the configuration
block for the subnet containing the client, and restart
dhcpd with /etc/init.d/dhcpd
restart
.
One free software DHCP server is ISC dhcpd.
In Ubuntu, this is available in the dhcp
package.
Here is a sample configuration file for it (usually
/etc/dhcpd.conf
):
option domain-name "example.com"; option domain-name-servers ns1.example.com; option subnet-mask 255.255.255.0; default-lease-time 600; max-lease-time 7200; server-name "servername"; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.200 192.168.1.253; option routers 192.168.1.1; } host clientname { filename "/tftpboot/tftpboot.img"; server-name "servername"; next-server servername; hardware ethernet 01:23:45:67:89:AB; fixed-address 192.168.1.90; }
Note: the new (and preferred) dhcp3
package uses
/etc/dhcp3/dhcpd.conf
.
In this example, there is one server
"servername"
which performs all of the work
of DHCP, server, TFTP server, and network gateway. You will almost
certainly need to change the domain-name options, as well as the
server name and client hardware address. The
"filename"
option should be the name of the
file which will be retrieved via TFTP.
After you have edited the dhcpd configuration file,
restart it with /etc/init.d/dhcpd restart
.
Here is another example for a dhcp.conf
using the
Pre-boot Execution Environment (PXE) method of TFTP.
option domain-name "example.com"; default-lease-time 6048; max-lease-time 604800; allow booting; allow bootp; # The next paragraph needs to be modified to fit your case subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.200 192.168.1.253; option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; # the gateway address which can be different # (access to the internet for instance) option routers 192.168.1.1; # indicate the dns you want to use option domain-name-servers 192.168.1.3; } host tftpserver { # tftp server ip address fixed-address 192.168.1.90; # tftp server hardware address hardware ethernet 01:23:45:67:89:AB; } group { next-server 192.168.1.3; host tftpclient { # tftp client hardware address hardware ethernet 00:10:DC:27:6C:15; filename "/tftpboot/pxelinux.0"; } }
Note that for PXE booting, the client filename pxelinux.0
is a boot loader, not a kernel image (see Section 4.5.4, “Move TFTP Images Into Place”
below).
To get the TFTP server ready to go, you should first make sure that
tftpd is enabled. This is usually enabled by having
something like the following line in /etc/inetd.conf
:
tftp dgram udp wait nobody /usr/sbin/tcpd in.tftpd /tftpboot
Ubuntu packages will in general set this up correctly by default when they are installed.
Look in that file and remember the directory which is used as the
argument of in.tftpd; you'll need that below. The
-l
argument enables some versions of
in.tftpd to log all requests to the system logs;
this is useful for diagnosing boot errors. If you've had to change
/etc/inetd.conf
, you'll have to notify the
running inetd process that the file has changed.
On an Ubuntu or Debian machine, run /etc/init.d/inetd
reload
; on other machines,
find out the process ID for inetd, and run
kill -HUP
.
inetd-pid
Next, place the TFTP boot image you need, as found in
Section 4.2.1, “Where to Find Installation Images”, in the tftpd
boot image directory. Generally, this directory will be
/tftpboot
. You'll have to make a link from that
file to the file which tftpd will use for booting a
particular client. Unfortunately, the file name is determined by the
TFTP client, and there are no strong standards.
For PXE booting, everything you should need is set up in the
netboot/netboot.tar.gz
tarball. Simply extract this
tarball into the tftpd boot image directory. Make sure
your dhcp server is configured to pass /pxelinux.0
to tftpd as the filename to boot.