Installing Debian using network booting


Installation using network booting must not be confused with DebianNetworkInstall. In network install, you start with a CD to install a minimal Linux system before you proceed to download further packages over the network. Here, you need no CD at all. You instruct you BIOS boot menu to boot directly from the network.

To do so, you need a network boot server. As there are no fiducial boot servers out in the wild, you need to setup your own. This is considerably more complicated than installing Debian from CD. Normally, network booting is only used if there is really no way to boot from CD.

In the Web, several articles can be found that describe in more or less detail how to setup a network boot server. They all have the same weakness: You are required to execute a long list of instructions without getting any feedback before the very end of the procedure when you try to boot. If it works, fine. If not, debugging will become very very difficult. Therefore in the following we break down the procedure into steps that can be debugged separately.


The computer you want to install to will be called the Client.

The computer you install from will be called the Server. We assume that the Server is running Debian.

To be specific, we assume that the Client and the Server are part of a LAN with the following IP addresses:

You will find out the value of x later.

The following instructions have been tested with Debian 6.0 (squeeze) in January 2012.

Change boot menu

Setup the BIOS boot menu of the Client to boot from the network.

Reboot. This should produce an output that contains the Client's MAC address. Then, it will fail with

  PXE-E53: no boot filename received.

Set up DHCP server

On the Server, we need to set up a DHCP server.

Current best practice seems to be to use the package isc-dhcp-server, which provides a daemon dhcpd.

It's configuration file is /etc/dhcp/dhcpd.conf. Modify this file so that it contains about the following; adapt IP and MAC addresses to your local needs:

default-lease-time 600;
max-lease-time 7200;

allow booting;
allow bootp;

# in this example, we serve DHCP requests from 192.168.0.(2 to 253)
# and we have a router at
subnet netmask {
  option broadcast-address;
  option routers;             # our router
  option domain-name-servers; # our router, again

group {
  host tftpclient {
    hardware ethernet  00:12:34:56:AB:CD; # replace by the MAC of your Client
    filename "pxelinux.0";

After each modification of the above, restart the DHCP server with

  /etc/init.d/isc-dhcp-server restart

Install TFTP

On the already installed computer, set up a tftp server. Use the tftpd-hpa and not the atftp (the later did not work for me): apt-get install tftpd-hpa.

In the tftp directory create a directory named pxelinux.cfg and create a default file there:

mkdir /var/lib/tftpboot/pxelinux.cfg
printf "label linuxboot\n\tKERNEL pxeboot\n" >/var/lib/tftpboot/pxelinux.cfg/default

Configure BIOS

On the new to install computer, enter BIOS setup and chose network boot (PXE boot) - sometimes before it is possible to chose network booting only if also some boot rom is enabled.

Compile Kernel

Grab a kernel from, unpack and configure it for the new computer, compile it. (Note: Do not use modules.) Be sure to add all the device drivers needed for installation. Especially the CD-/DVD-Rom and harddisk interface driver are needed.

After compiling copy the kernel image to the tftp server directory /var/lib/tftpboot. Name it pxeboot.

Install pxelinux.0

Do a

apt-get install syslinux 
cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot

Install initrd.gz

Mount the CD, copy over the initrd.gz to /var/lib/tftpboot.


The tftp dir should now looks like:



Put the CD in the new computer. Boot the new computer via network. It should get the IP address from the DHCP server and also the pxelinux.0 file from the tftp server. The bootloader prints some lines concering some non existing files which can be ignored and than displays a boot prompt. On the command line enter:

pxeboot initrd=initrd.gz

Install Debian

At this point, all the drivers that are needed to install Debian on the new system are available and the normal installtion procedure can be used to install the whole Debian system to the new computer.