Setting up a server for PXE network booting

Posted by Steve on Fri 22 Dec 2006 at 09:18

If you're looking to perform a lot of system recovery, or system installation, then network booting with PXE is ideal. PXE allows you to boot up a system and have it automatically get an IP address via DHCP and start booting a kernel over the network.

PXE itself stands for "Pre-boot eXecution Environment", which describes how it works in the sense that the clients using it haven't booted in a traditional manner.

In order to use PXE you need to setup a boot-server which will allow client systems to :

  • Request an IP address (via DHCP)
  • Download a kernel (via TFTP)

With both of these services in place any system which supports PXE/network-booting (you might need to enable it in the BIOS) should be able to gain an IP address, fetch a kernel, and boot without an installed operating system.

(This is ideal for systems which can't be booted by a traditional approach; for example your new AMD-64 system which doesn't have a CD/DVD drive!)

Our Setup

For the purposes of this article we'll assume:

  • We're working with a small network 192.168.1.0/24
  • We'll allow all local machines to boot and get an IP address via DHCP from the range 196.168.1.70-192.168.1.100
  • Our "boot-server" is the host "itchy" with IP address 192.168.1.50
  • We will serve the same kernel to each host.

In our example we'll configure a PXE-server which will allow remote systems to run the Debian Etch installer, but nothing here is specific to that. PXE allows you to configure a system to boot from an arbitrary kernel (and matching ramdisk if you wish to use one). With the correct configuration you can even cause the clients to mount a remote file-system via NFS and have a diskless thin-client system.

TFTP Setup

TFTP is a very simple file-transfer protocol, which is very similar to FTP but which doesn't use any kind of authentication. If you're not already running a TFTP server you can install one by running:

root@itchy:~# apt-get install tftpd-hpa

Once installed you'll need to enable it by editing the file /etc/default/tftpd-hpa. You should change RUN_DAEMON to yes, leaving you with contents like these:

#Defaults for tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"

Now create the root directory, if it is missing, and start the server:

root@itchy:~# mkdir -p /var/lib/tftpboot
root@itchy:~# /etc/init.d/tftpd-hpa start
Starting HPA's tftpd: in.tftpd.

Once our systems have retrieved an IP address via DHCP they will request files from beneath the /var/lib/tftpboot root directory. We'll come back to the contents of this directory shortly.

DHCP Setup

If you don't already have a DHCP server configured upon your LAN you'll need to install one. If you're using a small home router, or similar, to provide local DHCP services you must disable this first. (Since we require the DHCP server to pass back some extra options to clients which the majority of routers won't allow).

Discussing a full DHCP installation is mostly beyond the scope of this introduction but the thing we're trying to do is fairly simple. The goal of the DHCP server in this setup is twofold:

  • We obviously want to use it to allow clients to request and receive an IP address.
  • We want to cause the DHCP "answer" to give some extra details to the clients which are requesting an address:
    • The address of the TFTP server.
    • The initial filename to request from the TFTP server.

The most common DHCP server is the dhcp-server package, and you can install this by running:

root@itchy:~# apt-get install dhcp3-server

Once installed the server is configured in the file /etc/dhcp3/dhcpd.conf, and there are a lot of available options described there. For our example we'll use the following configuration:

option domain-name-servers 62.31.64.39, 62.31.112.39;
default-lease-time 86400;
max-lease-time 604800;
authoritative;

subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.70 192.168.1.100;
        filename "pxelinux.0";
        next-server 192.168.1.50;
        option subnet-mask 255.255.255.0;
        option broadcast-address 192.168.1.255;
        option routers 192.168.1.1;
}

Here we've configured the server to give out IP addresses from the range 192.168.1.70-100, set the default gateway to be 192.168.1.1 and use our ISP's nameservers.

We've also used next-server to point to the TFTP server we're using (which is the same host as our DHCP server, but doesn't need to be). We've chosen the default name of pxelinux.0 as the name of the file for booting clients to request.

Using dnsmasq instead

Personally I use the dnsmasq package to provide DHCP services upon my LAN, since this is small and simple and provides other useful abilities, setting up PXE booting with dnsmasq just requires the addition of the following line to /etc/dnsmasq.conf:

dhcp-boot=pxelinux.0,itchy,192.168.1.50

(Again we've setup the filename along with the name and IP address of the TFTP server which is "itchy" / 192.168.1.50 in this example)

Restarting the service after this change is as simple as:

root@itchy:~# /etc/init.d/dnsmasq restart
Restarting DNS forwarder and DHCP server: dnsmasq.
PXE Configuration

Now that we've configured the TFTP and DHCP servers we need to go back and complete the configuration. By default when a client boots up it will use its own MAC address to specify which configuration file to read - however after trying several options it will fall back to requesting a default file.

We need to create that that file, which will contain the list of kernels which are available to boot, we'll firstly need to create a directory to hold it:

root@itchy:~# mkdir /var/lib/tftpboot/pxelinux.cfg

Now save the following as /var/lib/tftpboot/pxelinux.cfg/default:

DISPLAY boot.txt

DEFAULT etch_i386_install

LABEL etch_i386_install
        kernel debian/etch/i386/linux
        append vga=normal initrd=debian/etch/i386/initrd.gz  --
LABEL etch_i386_linux
        kernel debian/etch/i386/linux
        append vga=normal initrd=debian/etch/i386/initrd.gz  --

LABEL etch_i386_expert
        kernel debian/etch/i386/linux
        append priority=low vga=normal initrd=debian/etch/i386/initrd.gz  --

LABEL etch_i386_rescue
        kernel debian/etch/i386/linux
        append vga=normal initrd=debian/etch/i386/initrd.gz  rescue/enable=true --

PROMPT 1
TIMEOUT 0

This file instructs the client to display the contents of the file boot.txt so create that too:

- Boot Menu -
=============

etch_i386_install
etch_i386_linux
etch_i386_expert
etch_i386_rescue

The only remaining job is to download the official Etch installer kernel and associated files and save them in the directories specified in the default file we created:

root@itchy:~# cd /var/lib/tftpboot/
root@itchy:~# wget http://ftp.uk.debian.org/debian/dists/etch/main/installer-i386/current/images/netboot/debian-installer/i386/pxelinux.0

root@itchy:~# mkdir -p /var/lib/tftpboot/debian/etch/i386
root@itchy:~# cd /var/lib/tftpboot/debian/etch/i386
root@itchy:~# wget http://ftp.uk.debian.org/debian/dists/etch/main/installer-i386/current/images/netboot/debian-installer/i386/linux
root@itchy:~# wget http://ftp.uk.debian.org/debian/dists/etch/main/installer-i386/current/images/netboot/debian-installer/i386/initrd.gz

When these commands have been completed we'll have the following structure:

root@itchy:~# tree /var/lib/tftpboot/
/var/lib/tftpboot/
|-- boot.txt
|-- debian
|   `-- etch
|       `-- i386
|           |-- initrd.gz
|           `-- linux
|-- pxelinux.0
`-- pxelinux.cfg
    `-- default

4 directories, 5 files

(We only used debian/etch here in case we want to offer other installers in the future. You can put everything in one directory if you wish, just update pxelinux.cfg/default to match.)

We should now be ready to test the setup.

We've installed a pxelinux.0 file which will instruct booting clients to request pxelinux.cfg/default. This will then make a list of boot options available, which are displayed by the simple boot menu file we created.

The files which are used for booting are stored beneath the TFTP root directory and thus accessible to booting clients.

Sample Run

A sample remote boot looks like this:

PXE entry point found (we hope) at 9AE5:00D6
My IP address seems to be C0A80146 192.168.1.70
FTFTP prefix:
Trying to load: pxelinux.cfg/01-00-14-22-a1-53-85
Trying to load: pxelinux.cfg/C0A80146
Trying to load: pxelinux.cfg/C0A8014
Trying to load: pxelinux.cfg/C0A801
Trying to load: pxelinux.cfg/C0A80
Trying to load: pxelinux.cfg/C0A8
Trying to load: pxelinux.cfg/C0A
Trying to load: pxelinux.cfg/C0
Trying to load: pxelinux.cfg/C
Trying to load: pxelinux.cfg/default
- Boot Menu -
=============

etch_i386_install
etch_i386_linux
etch_i386_expert
etch_i386_rescue

As you can see the system here attempted to load several configuration files, based upon its MAC address (01-00-14-22-a1-53-85) initially then falling back to the octets in the IP address it was given by DHCP (192.167.1.70).

Finally it managed to load a working configuration using the last-chance default file we created. This in turn instructed it to show the boot menu we created.

From here on the system will boot into whichever kernel you specify. (We could configure the system to timeout here and just boot into a default option, but we didn't.)

From here on you should understand how PXE can be used to boot an arbitrary kernel and initial ramdisk. Later we'll look at mounting a remote file-system over NFS to provide a diskless thin-client.

 

 


Posted by mvanbaak (213.154.xx.xx) on Fri 22 Dec 2006 at 11:18
[ Send Message ]
Nice article.
I've been playing with this the last 2 days because I got 2 soekris boards.
The setup you provide here offers PXEboot to all machines in the subnet.
What I want is to provide PXEboot options to specific hosts only.
I managed to get this done in dhcp3-server but I want to do it with dnsmasq (because now I have to connect the soekris to a small switch and use an old laptop for temp dhcp/tftp server)

Do you happen to know how to do this with dnsmasq ?
(in dhcp3-server I used a host "bla" {} block)

[ Parent | Reply to this comment ]

Posted by Steve (80.68.xx.xx) on Fri 22 Dec 2006 at 11:28
[ Send Message | View Steve's Scratchpad | View Weblogs ]

Looking at the documentation I can't see an obvious way to do this - it seems to be an all or nothing setting. There are other flags in the dnsmasq.conf file for setting specific DHCP options for hosts by ip/name/mac address but I can't see how to combine these.

The way I'd do it is to broadcast globally, but disable network booting for the other hosts on the LAN, or just press "Esc" to cancel the netboot PROM.. (That works well for me since I rarely reboot!)

Steve

[ Parent | Reply to this comment ]

Posted by mvanbaak (213.154.xx.xx) on Fri 22 Dec 2006 at 11:35
[ Send Message ]
Yeah, I was thinking the same thing.
A lot of options can be prepanded with some identifier, but not the pxeboot function.

I think I'll stick with the seperate net+laptop to bootstrap my soekris machines.
It's only to install OpenBSD on those boards + CF card so after initial setup I dont need the pxeboot anymore.

Thanks for your time.

[ Parent | Reply to this comment ]

Posted by Steve (80.68.xx.xx) on Fri 22 Dec 2006 at 11:47
[ Send Message | View Steve's Scratchpad | View Weblogs ]

If you did want to keep the bootserver around for future use you could always just cause it to automatically boot from the local disk after a short timeout? That would just need your pxelinux.cfg/default file to look like this:

timeout 120
default local
prompt 1

LABEL local
        DISPLAY boot.txt
        localboot 0

LABEL etch_i386_install
        kernel debian/etch/i386/linux
        append vga=normal initrd=debian/etch/i386/initrd.gz  --
...
...

Steve

[ Parent | Reply to this comment ]

Posted by mvanbaak (80.126.xx.xx) on Sun 24 Dec 2006 at 18:14
[ Send Message ]
Thanks.
I'm not familiar with the pxelinux image and couldn't get it to load the OpenBSD installer on my soekris.

I installed dhcp3-server on my debian box and disabled it in rc2.d.
Now if I need to netboot a soekris I put a static host stanza in /etc/dhcp3/dhcpd.conf, stop dnsmasq, start dhcp3-server, boot soekris, wait for the OpenBSD install to start and reverse everything.
Annoying, but it works.

[ Parent | Reply to this comment ]

Posted by Anonymous (207.250.xx.xx) on Fri 2 Feb 2007 at 21:43
Yes, you can do this per host... Here is what I have to specifically target on box I all ares. Apollo is the TFTP server.

dhcp-host =00:XX:XX:XX:XX:XX,net:ares,192.168.2.3,ares
dhcp-option =ares,17,192.168.2.2:/mnt/ares
dhcp-boot =net:ares,pxelinux.0,apollo,192.168.2.2

The options are a bit inconsistent (net: is not allowed for dhcp-option), but it works as documented.

[ Parent | Reply to this comment ]

Posted by Anonymous (83.42.xx.xx) on Tue 15 Jun 2010 at 18:50
try Serva, perfect for soekris. it' s even able to locally offer the whole repository from a cd/dv or iso image usinh HTTO or FTP, then you can install locally w/o Internet.
HTTP/FTP/TFTP/DHCP/Proxy DHCP/DNS etc.. all in one app
http://www.vercot.com/~serva/

[ Parent | Reply to this comment ]

Posted by dopehouse (84.131.xx.xx) on Fri 22 Dec 2006 at 13:11
[ Send Message | View dopehouse's Scratchpad ]
If you own a Router which can handle the dd-wrt firmware you don't have to disable the dhcp service in the router. Just open the 'Administration'->'Services' tab and enable 'DNSMasq' and in the 'Additional DNS Options' input field enter 'dhcp-boot=pxelinux.0,tfptd-hostname,tftpd-ip'. Replace tfptd-hostname with the hostname of your tftpd machine and tftpd-ip with the ip-address of you tfptd. Thats all. Nice articel. Can't wait until the next comes out, which handles the PXE and NFS-Root. ;)

[ Parent | Reply to this comment ]

Posted by Anonymous (69.219.xx.xx) on Sat 7 Jul 2007 at 22:52
THANK YOU FOR THE TIP - you saved my bacon!

[ Parent | Reply to this comment ]

Posted by Anonymous (71.65.xx.xx) on Sun 8 Aug 2010 at 19:27
Thank you, years later this still helped greatly.

[ Parent | Reply to this comment ]

Posted by dopehouse (92.226.xx.xx) on Sun 8 Aug 2010 at 21:38
[ Send Message | View dopehouse's Scratchpad ]
Maybe this helps you and other, who try to use gpxe with the DD-WRT integrated DHCPd. If you want to use http or one of the other supported boot sources, this could be helpful. Instead of just pointing to the pxelinux.0 file, specify the URI and insert the dhcp-no-override command, as shown in the code below.
#dhcp-boot=/pxelinux.0,"192.168.0.2",192.168.0.2
dhcp-no-override
dhcp-boot=http://www.example.com/pxelinux.0,"192.168.0.2",192.168.0.2

[ Parent | Reply to this comment ]

Posted by xrat (128.130.xx.xx) on Tue 9 Jan 2007 at 11:20
[ Send Message ]
Hi folks, there is a typo in the code for /etc/dhcp3/dhcpd.conf. There should be a ; (semicolon) at the end of
next-server 192.168.1.50
HTH,
-- Andreas

[ Parent | Reply to this comment ]

Posted by Steve (80.68.xx.xx) on Tue 9 Jan 2007 at 11:23
[ Send Message | View Steve's Scratchpad | View Weblogs ]

Thanks for the report - I've updated the article text now.

Well spotted!

Steve

[ Parent | Reply to this comment ]

Posted by Petzolinni (212.190.xx.xx) on Wed 24 Jan 2007 at 13:47
[ Send Message ]
a little typo I think.

root@itchy:~# mkdir -p /var/lib/tftpboot/debian/etch/i386
root@itchy:~# cd /var/lib/tftpboot/pxelinux.cfg/etch/i386

first you create a directory and then you cd to another?
Shouldn't the last line be?

root@itchy:~# cd /var/lib/tftpboot/debian/etch/i386

or am I missing something here?

[ Parent | Reply to this comment ]

Posted by Steve (80.68.xx.xx) on Wed 24 Jan 2007 at 13:50
[ Send Message | View Steve's Scratchpad | View Weblogs ]

Yes it should, thanks. I've updated the text now.

Well spotted!

Steve

[ Parent | Reply to this comment ]

Posted by Anonymous (200.104.xx.xx) on Fri 2 Feb 2007 at 03:59
Is it possible to have a TFTP/DHCP server behind a home router? I've found an article in etherboot's wiki which says that it can be done by disabling the DHCP server on the router in a certain range of IP addresses and then setting up correctly the LAN server, not-authoritative. I guess it is possible to do it with PXE since the router won't do anything about it and there's no difference in the contents of the transmitted paquets for the router, since it doesn't handle them (not further that broadcasting them, i guess). Here is the links to the full article: http://www.etherboot.org/wiki/twodhcpservers?DokuWiki=4bf2b378a7d 1d85b1c807454e477ae18

[ Parent | Reply to this comment ]

Posted by Steve (80.68.xx.xx) on Fri 2 Feb 2007 at 09:19
[ Send Message | View Steve's Scratchpad | View Weblogs ]

My impression was that this wouldn't work since the bootloader users TFTP to transfer files - and that uses udp which the router wouldn't forward ...

Steve

[ Parent | Reply to this comment ]

Posted by acacs (201.32.xx.xx) on Fri 2 Mar 2007 at 15:07
[ Send Message ]
Hi.

Shouldn't the line "range 192.168.0.70 192.168.0.100;" be "range 192.168.1.70 192.168.1.100;"?

[ Parent | Reply to this comment ]

Posted by Steve (80.68.xx.xx) on Fri 2 Mar 2007 at 15:21
[ Send Message | View Steve's Scratchpad | View Weblogs ]

D'oh!

Yes, they should. Thanks!

Steve

[ Parent | Reply to this comment ]

Posted by sergi_mb (80.102.xx.xx) on Fri 9 Mar 2007 at 22:24
[ Send Message ]
Thanks for the article!
Very useful for me and my project involving Thinstation.

One extra point: dnsmasq is also TFTP capable since version 2.36. You only need to add these lines in dnsmasq.conf

enable-tftp
tftp-root=/var/lib/tfptboot

[ Parent | Reply to this comment ]

Posted by Steve (62.30.xx.xx) on Sat 10 Mar 2007 at 00:52
[ Send Message | View Steve's Scratchpad | View Weblogs ]

Very useful to know, thanks a lot!

Steve

[ Parent | Reply to this comment ]

Posted by Anonymous (212.44.xx.xx) on Mon 1 Oct 2007 at 15:59
Can't post a comment as I'm not logged in - but thanks - this was great.

I did however end up with boot.txt in the wrong directory following the instructions - it took me a while to spot it in the directory structure diagram.

Might be good to explicitly specify dropping a dir before creating boot.txt.

But it works pretty fast ;)

[ Parent | Reply to this comment ]

Posted by namit (83.70.xx.xx) on Sun 15 Jul 2007 at 01:54
[ Send Message ]
Is there any way of pxe booting a windows xp boot cd?

or

How can you create your own distro with your own stuff on it (for recovery purpose) and boot up with that image?

[ Parent | Reply to this comment ]

Posted by Anonymous (98.199.xx.xx) on Mon 5 Nov 2007 at 04:48
I too would like to know how to PXE boot regular cdrom ISO files. This tutorial tells us to download the debian netboot files, but what if I wanted to use the debian i386 cd (or dvd) binary? I have about 30 ISO's for a lot of different OS's (Linux, BSD, & Windows) and I am tired of having to reburn CDs and DVDs due to lost/scratched cd/dvd medium...

I have read that it is not possible to directly load a cdrom ISO because its in their nature to communicate directly ith the hardware, but is there some other way around it? Like, if I PXE boot to some virtualized mini OS, then have this load up the cdrom ISO's. Maybe something totally different from that, I'm not really sure where to look anymore, and I've been looking for nearly 15 man hours (seriously).

Any help would be greatly appreciated!

[ Parent | Reply to this comment ]

Posted by Anonymous (75.68.xx.xx) on Tue 4 Mar 2008 at 04:18
You can get an image file called "memdisk". A google search should help you out. Then you can use something like this in your pxelinux.cfg directory with the IP of the server, MAC address, or default for all to boot:

# Update BIOS via ISO image
DEFAULT dos
LABEL dos
KERNEL memdisk
append initrd=cdrom.img


The cdrom.img filename is just the ISO renamed.
I use this to network boot firmware update CDs, BMC config CDs, etc. for a Linux cluster. Works great for remote administration. As long as the KVM or serial port is behaving there's no reason to be physically present. :-)

[ Parent | Reply to this comment ]

Posted by Anonymous (216.228.xx.xx) on Tue 3 Feb 2009 at 01:44
Did you have to resize the firmware CD? Have you ever done it with an HP Firmware CD 8.20? When trying to load the CD via PXE, it says:

Memdisk: Image seems to have fractional end cylinder
Memdisk: Image appears to be truncated

The iso is fine with no issues. Does memdisk have some kind of limit to what it can load? This is a 500MB iso. Or maybe I have to specify options?

[ Parent | Reply to this comment ]

Posted by Anonymous (207.71.xx.xx) on Sat 22 May 2010 at 10:45
Memdisk won't be able to read the ISO from any kernel that runs in protected mode.

From http://syslinux.zytor.com/wiki/index.php/MEMDISK#ISO_images :

"The majority of Linux based CD images will also fail to work with MEMDISK ISO emulation. Linux distributions require kernel and initrd files to be specified, as soon as these files are loaded the protected mode kernel driver(s) take control and the virtual CD will no longer be accessible."

[ Parent | Reply to this comment ]

Posted by Anonymous (59.90.xx.xx) on Wed 16 Nov 2011 at 09:27
Hi intellectuals...
I have done with the PXE installation of Ubuntu...
Now its my actual time to make PXE booting possible for Windows flavors ,
Can any one please suggest me " how to install windows images make possible with PXE server".
And PXE server platform must be linux only ...

I have installed tftpd-hpa , dhcp3-server , nfs-kernel-server , samba server...
And my pxelinu.cfg/default file :

DEFAULT menu.c32
label winxp
KERNEL memdisk
APPEND initrd=winxp.img

I have copied the files memdisk & winxp.img( actual boot cd)...

Please suggest me some articles about PXE booting windows.

Thanks in advance,
David john

[ Parent | Reply to this comment ]

Posted by Anonymous (84.215.xx.xx) on Sun 21 Oct 2007 at 15:10
I have a problem where the computer boots but cant find the nfs-server.
I can easly mount the nfs if I use the mount-command on a running computer though.

I have a gateway that only runs the dhcpserver, and then I have another computer that runs the rest.

Debian install iso, memtest and the debian boots up perfectly but I cant get the nfs-support to work properly, and for that reason it doesn´t really work.


Has anyone else had the same problem?
I can mount the nfs with any ip on the subnet.

[ Parent | Reply to this comment ]

Posted by Anonymous (212.98.xx.xx) on Fri 9 Nov 2007 at 15:29
Hello.
Here is much more simple:


#cd /var/lib/tftpboot/
#wget http://http.us.debian.org/debian/dists/etch/main/installer-i386/c urrent/images/netboot/netboot.tar.gz
#tar xzvf netboot.tar.gz


after this without any manual files editing you will get standard Debian install splash screen which will install Etch.

[ Parent | Reply to this comment ]

Posted by Anonymous (195.184.xx.xx) on Wed 19 Dec 2007 at 09:38
Very good work - very easy to understand description which works very well. Thank you so much.

[ Parent | Reply to this comment ]

Posted by Anonymous (84.215.xx.xx) on Sat 12 Jan 2008 at 18:53
Hey

Great article. Saw two more typos though.

This:
"As you can see the system here attempted to load several configuration files, based upon its MAC address (01-00-14-22-a1-53-85) initially then falling back to the octets in the IP address it was given by DHCP (192.167.1.70)." should probably have the IP adress 192.168.1.170 and not 192.167.1.70.

And this:
We'll allow all local machines to boot and get an IP address via DHCP from the range 196.168.1.70-192.168.1.100"

Should probably have the IP adress range 192.168.1.170-192.168.1.100 and not 196.168.1.70-192.168.1.100.

Keep up the good work with the articles :)

[ Parent | Reply to this comment ]

Posted by Anonymous (76.199.xx.xx) on Wed 19 Mar 2008 at 20:28
Am having a problem getting the dhcp to work... when i try to run it i get "Starting DHCP server: dhcpd3 failed to start - check syslog for diagnostics."

here is the syslog
"
dhcpd: Wrote 2 leases to leases file.
dhcpd: No subnet declaration for eth0 (0.0.0.0).
dhcpd: ** Ignoring requests on eth0. If this is not what
dhcpd: you want, please write a subnet declaration
dhcpd: in your dhcpd.conf file for the network segment
dhcpd: to which interface eth0 is attached. **
dhcpd: Not configured to listen on any interfaces!
"

[ Parent | Reply to this comment ]

Posted by andmalc (24.226.xx.xx) on Thu 17 Apr 2008 at 00:18
[ Send Message ]
If you're running Lenny read menu.txt.gz in /usr/share/doc/syslinux.

In addition to pxelinux.0, you must also copy "menu.c32" from /usr/lib/syslinux into "/var/lib/tftpboot" and add "DEFAULT menu.c32" to top of menu. This is a recent change as of Syslinux 3.31 and not shown in most examples on the net (and not even in an April 2008 Linux Journal story on PXE menus.)

[ Parent | Reply to this comment ]

Posted by kroshka (66.253.xx.xx) on Mon 16 Jun 2008 at 23:59
[ Send Message | View Weblogs ]
Given bootp-dhcp-parameters ,what option numbers do filename "pxelinux.0" and next-server 192.168.1.50; correspond to?

I have tried a few, such as 67 Bootfile-Name and 150 TFTP server address without luck. I'm trying to configure our sonicwall 2040 dhcp server to work with this.

Thanks

[ Parent | Reply to this comment ]

Posted by Anonymous (203.58.xx.xx) on Thu 11 Dec 2008 at 00:49
Hi,

Did you ever getting the SonicWall 2040 DHCP working with PXE, I have exactly the same issue?

Thanks

Andrew webstean@gmail.com

[ Parent | Reply to this comment ]

Posted by kroshka (66.253.xx.xx) on Thu 11 Dec 2008 at 01:19
[ Send Message | View Weblogs ]
Nah, I just gave up. I think the SonicWall DHCP server is slightly broken, or at least will not work nicely when trying to configure it that way. I did ask on the sonicwall site's forums with little result. You're best off to just use a DHCP server on a Linux box if you need these options to work. And turn off Sonicwall's DHCP server, if they're clashing.

[ Parent | Reply to this comment ]

Posted by Anonymous (71.62.xx.xx) on Thu 26 Jun 2008 at 03:23
Dude this is awesome. One of the best and well written examples. I did this word for word and this worked. Just awesome. I cant say enough thanks.

[ Parent | Reply to this comment ]

Posted by Anonymous (84.112.xx.xx) on Wed 2 Jul 2008 at 11:18
First, thank your for this great article.
It really helped me since now I don't have to look for a cd drive to install debian on some machines.

But I have 2 questions:
1.
LABEL etch_i386_install
kernel debian/etch/i386/linux
append vga=normal initrd=debian/etch/i386/initrd.gz --
LABEL etch_i386_linux
kernel debian/etch/i386/linux
append vga=normal initrd=debian/etch/i386/initrd.gz --

Why do you have this in twice, it only has a different label, is it really necessary ?

2. What would the append line for an expertgui installation look like?

Thanks.

Greetings.
Markus

[ Parent | Reply to this comment ]

Posted by Steve (82.41.xx.xx) on Wed 2 Jul 2008 at 11:21
[ Send Message | View Steve's Scratchpad | View Weblogs ]

To answer your questions:

1. I just happen to have two copies - you only need one, as you guessed.

2. I'm afraid I'm not sure.

Steve

[ Parent | Reply to this comment ]

Posted by Ntsakzin (146.141.xx.xx) on Fri 4 Jul 2008 at 09:02
[ Send Message ]
"...Later we'll look at mounting a remote file-system over NFS to provide a diskless thin-client."

So where can I find this article because I am strugling with mounting the thin clients over NFS?

[ Parent | Reply to this comment ]

Posted by Anonymous (189.144.xx.xx) on Mon 27 Jul 2009 at 04:17
I thing it would be very good to see a complete and actualized example of thin clients setup, as the information available is somewhat sparse and even outdated.

[ Parent | Reply to this comment ]

Posted by vjm (130.155.xx.xx) on Thu 24 Jul 2008 at 06:53
[ Send Message ]
When playing with this, don't forget (as I did, for too long) that for Linux kernel images on i386, there is a 255-character length limit on the "append" part of the label stanza (see [1]).
This can be quite confusing! The moral is: don't try to add too many preseeding parameters to the boot line. Stick 'em in the preseed file.

[1] http://syslinux.zytor.com/archives/2005-February/004809.html
(The limits vary between architectures, see
http://syslinux.zytor.com/archives/2005-February/004812.html)

[ Parent | Reply to this comment ]

Posted by Anonymous (88.76.xx.xx) on Mon 28 Jul 2008 at 19:30
Is it possible to set-up an image that not pops up with the debian installer, but starts a ssh-server on the booting machine? I'll get a little KPC K45 soon and would love to set it up as home server.

But I don't have any monitors to attach, so, I need to _completely_ install the system by remote hands on. I suggested ssh would be fine, so that I can start debootstrapping my system via console.

Any ideas? Thanks!

[ Parent | Reply to this comment ]

Posted by Anonymous (88.76.xx.xx) on Mon 28 Jul 2008 at 19:33
And, yes, I DON'T HAVE ANY MONITOR HERE. And it's not an option to borrow one from a friend of mine. My friends life too far away ;)

I'm a laptop only user, right now.

[ Parent | Reply to this comment ]

Posted by Anonymous (91.178.xx.xx) on Thu 11 Sep 2008 at 21:55
Have a look at preseed files for debian-installer : http://wiki.debian.org/DebianInstaller/Preseed

[ Parent | Reply to this comment ]

Posted by Anonymous (96.253.xx.xx) on Sat 11 Oct 2008 at 05:25
One other point that delayed me 4-5 hours in trying to get this to work with an embedded box: If you're working with a system that is directing the console output to a serial port (such as a Soekris system), be sure to include "console=ttyS0,19200" (or whatever baud you will be using in place of 19200) to the append line for each kernel.

[ Parent | Reply to this comment ]

Posted by deadcat (98.207.xx.xx) on Wed 3 Dec 2008 at 06:12
[ Send Message | View Weblogs ]
i dont know why my setup takes so long for client machine to load the default file. it starts from Trying to load: pxelinux.cfg/ip-address
...
... default
then it just fails.
the above messages should just comes up real quick right?

heres my setup.
server:
/var/lib/tftpboot
|-- debian-installer
| `-- i386
| |-- boot-screens
| | |-- boot.txt
| | |-- f1.txt
| | |-- f10.txt
| | |-- f2.txt
| | |-- f3.txt
| | |-- f4.txt
| | |-- f5.txt
| | |-- f6.txt
| | |-- f7.txt
| | |-- f8.txt
| | |-- f9.txt
| | `-- splash.rle
| |-- initrd.gz
| |-- linux
| |-- pxelinux.0
| |-- pxelinux.cfg
| | `-- default
| `-- pxelinux.cfg.serial-9600
| `-- default
|-- pxelinux.0 -> debian-installer/i386/pxelinux.0
`-- pxelinux.cfg -> debian-installer/i386/pxelinux.cfg

/etc/dhcp3/dhcpd.conf:
...
allow booting;
allow bootp;

subnet 10.10.32.0 netmask 255.255.255.0 {
range 10.10.32.20 10.10.32.50;
option routers 10.10.32.80;
}

host deimos {
filename "pxelinux.0";
hardware ethernet 00:e0:81:32:5b:3a;
fixed-address 10.10.32.25;
}

[ Parent | Reply to this comment ]

Posted by Steve (2001:0xx:0xx:0xxx:0xxx:0xxx:xx) on Wed 3 Dec 2008 at 06:18
[ Send Message | View Steve's Scratchpad | View Weblogs ]

The obvious question is - what do the server error logs show?

You should be able to see the files being requested logged in syslog, by the TFTP server.. At a guess I'd that you've not specified the "next server" in the dhcpd.conf setting - so the TFTP request isn't being made against your server.

Steve

[ Parent | Reply to this comment ]

Posted by deadcat (98.207.xx.xx) on Wed 3 Dec 2008 at 06:26
[ Send Message | View Weblogs ]
ah. i dont have any next server tags in dhcpd.conf. let me see whats up

[ Parent | Reply to this comment ]

Posted by deadcat (98.207.xx.xx) on Wed 3 Dec 2008 at 06:34
[ Send Message | View Weblogs ]
thanks for spotting the error steve... next-server did the trick. (=

[ Parent | Reply to this comment ]

Posted by Steve (2001:0xx:0xx:0xxx:0xxx:0xxx:xx) on Wed 3 Dec 2008 at 06:36
[ Send Message | View Steve's Scratchpad | View Weblogs ]

Good to hear, thanks for the followup.

Steve

[ Parent | Reply to this comment ]

Posted by Double-V (89.251.xx.xx) on Tue 13 Jan 2009 at 13:46
[ Send Message ]
Awesome! I've just tried netbooting a Debian installer inside VMware Server 2.0 from a Debian host, and it works just fine. I was afraid to edit VMware's DHCP settings, but it seems to be ok to do it.
Thanks for the wonderful article.

[ Parent | Reply to this comment ]

Posted by Anonymous (82.67.xx.xx) on Fri 23 Jan 2009 at 14:20
Hi,
At home !
DISPLAY boot.txt
Doesn't work

But :
DISPLAY /pxelinux.cfg/boot.txt

works fine

[ Parent | Reply to this comment ]

Posted by Anonymous (85.147.xx.xx) on Mon 26 Jan 2009 at 00:52
Talk about life-saving comments!
Have that same issue here using Lenny. So might be a bug?

Maybe my fooling around changed something?, I made tftpd-hpa not running from inetd and as it's own user:
Added user & group tftpd with home dir /var/lib/tftpboot
Changed /etc/default/tftpd-hpa to:


#Defaults for tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-u tftpd -l -s /var/lib/tftpboot"

And in /etc/inetd.conf (commented the tftp line)

# tftp            dgram   udp    &nb sp;wait    root  /usr/sbin/in.tftpd  /usr/sbin/in.tftpd -s /var/lib/tftpboot

[ Parent | Reply to this comment ]

Posted by Anonymous (198.65.xx.xx) on Wed 11 Mar 2009 at 16:36
very useful post by all.

Thanks a lot.

[ Parent | Reply to this comment ]

Posted by Anonymous (190.75.xx.xx) on Mon 20 Apr 2009 at 01:36
I figured out that in lenny inetd tries to run tftpd as IPv6. You have to force it to run as IPv4 (hpa-tftpd version 5.0 is required for IPv6, and lenny comes with version 0.48). In /etc/inetd.conf you have to put "udp4" instead of the plain old "udp" that is there by default:

tftp dgram udp4 wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot

[ Parent | Reply to this comment ]

Posted by Anonymous (64.81.xx.xx) on Tue 1 Sep 2009 at 00:19
Not a bug, you put boot.txt in the wrong directory

[ Parent | Reply to this comment ]

Posted by vesperto (77.54.xx.xx) on Fri 17 Apr 2009 at 23:10
[ Send Message ]
1) tftpd is ran by inetd; while troubleshooting around (i.e. launching from the command-line) you might run into trouble. I took mine off of inetd.

2) If you've been fiddling with firewalls make sure the tftp port is open. :)

3) if you have a home router and nothing important (i.e. network dependant) on your host machine, connect it to your client machine. That way you can safely install dhcp servers in your host machine without messing the router's config (you won't be connected to it anyway).

[ Parent | Reply to this comment ]

Posted by Anonymous (58.187.xx.xx) on Sat 18 Apr 2009 at 12:07
The net installer requires internet access.
How could I build a local pxe boot/installer with full cd iso, like Ubuntu
https://wiki.ubuntu.com/LiveCDNetboot

[ Parent | Reply to this comment ]

Posted by etbe (59.167.xx.xx) on Sun 23 Aug 2009 at 12:13
[ Send Message ]
http://etbe.coker.com.au/2009/08/23/nbd-pxe-booting-debian/

I've documented my configuration of a diskless workstation with PXE booting at the above URL.

One significant thing that is missing from this article (maybe because of a missing feature in Etch) is that there is no mention of the syslinux-common package which contains the pxelinux.0 file. When you get pxelinux.0 from the syslinux-common package then APT will verify the integrity of the data. If you use wget then there is the potential for a corrupted mirror or a MITM attack.

[ Parent | Reply to this comment ]

Posted by Anonymous (161.116.xx.xx) on Mon 30 Nov 2009 at 12:02
I know it's been 3 years since you wrote this, but it has still been useful today. Thank you.

[ Parent | Reply to this comment ]

Posted by Anonymous (75.177.xx.xx) on Fri 14 May 2010 at 03:00
And today, thanks!

[ Parent | Reply to this comment ]

Posted by Anonymous (188.134.xx.xx) on Wed 26 Jan 2011 at 19:32
And today too

[ Parent | Reply to this comment ]

Posted by Anonymous (88.161.xx.xx) on Wed 15 Feb 2012 at 12:22
And today too.

[ Parent | Reply to this comment ]

Posted by Anonymous (212.175.xx.xx) on Tue 26 Feb 2013 at 16:34
And today too.

[ Parent | Reply to this comment ]

Posted by Anonymous (183.83.xx.xx) on Sat 25 Jan 2014 at 14:15
And today too...

[ Parent | Reply to this comment ]

Posted by Anonymous (91.148.xx.xx) on Sun 23 May 2010 at 11:34
hi i have 2 questions
1.How can i make boot menu,that i can select from
2.How could i put some kind of live cd and the users files to be stored some where and every time he uses the os his changes to load.
Thanks in advance.The article is very useful to me.By the way ,if it helps i can say restart your machine after u done and every thing will work properly,that was my problem.

[ Parent | Reply to this comment ]

Posted by Anonymous (212.121.xx.xx) on Wed 1 Sep 2010 at 12:40
Absolutely perfect. Works a treat. Thanks.

[ Parent | Reply to this comment ]

Posted by aclhkaclhk (118.142.xx.xx) on Wed 8 Sep 2010 at 08:04
[ Send Message ]
the installation is via debian mirror site. could we setup a mirror using the download dvd image? i do not want to have large traffic via WAN.

[ Parent | Reply to this comment ]

Posted by Anonymous (80.39.xx.xx) on Fri 19 Nov 2010 at 16:06
see here
www.vercot.com/~serva/howto/DebianPXE1.html

[ Parent | Reply to this comment ]

Posted by Anonymous (115.111.xx.xx) on Tue 1 Feb 2011 at 05:25
Hi,
For me PXE booting is working nicely but after booting i am getting to only from mirrors of debian only. But i want to install using NFS, i am not able to get this one and if NFS option able to get , please guide me how it is to be or how can i install debian from local LAN?

[ Parent | Reply to this comment ]

Posted by Anonymous (38.127.xx.xx) on Wed 18 May 2011 at 17:22
Thanks a lot, great write up!

[ Parent | Reply to this comment ]

Posted by Anonymous (2001:0xx:0xx:0xxx:0xxx:0xxx:xx) on Wed 8 Jun 2011 at 23:50
This is a fantastic write up, but I have one problem. I am trying to install the SERVER version of Ubuntu, and there is no CASPER directory on the disc. There's an INSTALL folder which contains vmlinuz and initrd.lz, but copying those files over and replacing casper under "boot=casper" to "boot=install" but this just returns back to the menu after a black screen, what am I missing here?

Thanks!
Mike

[ Parent | Reply to this comment ]

Posted by Anonymous (2001:0xx:0xx:0xxx:0xxx:0xxx:xx) on Thu 9 Jun 2011 at 00:02
Actually, I am stupid, I had a / instead of a "." But now when the install starts, it's looking for CD-ROM files instead of NFS. I have the NFS configured in the APPEND line, but it doesn't seem to notice...

[ Parent | Reply to this comment ]

Posted by Anonymous (67.169.xx.xx) on Sat 16 Jul 2011 at 08:45
Thanks for the excellent writeup. I have a question. Is it possible to control pxe boot through a script. So if i have 2 images fedora and debian and i want to boot any of these but don't want to manually select the image i load but would rather use a script to do it. I have root access to pxe/dhcp server. Thanks

[ Parent | Reply to this comment ]

Posted by V (129.187.xx.xx) on Mon 23 Jan 2012 at 14:17
[ Send Message ]
For a more recent tutorial that breaks the installation into debugable steps, see http://wiki.debian.org/PXEBootInstall.

[ Parent | Reply to this comment ]

Posted by Anonymous (24.246.xx.xx) on Sun 12 Aug 2012 at 22:56
Excellent write up, thanks!

[ Parent | Reply to this comment ]

Sign In

Username:

Password:

[Register|Advanced]

 

Flattr

 

Current Poll

Which init system are you using in Debian?






( 1609 votes ~ 7 comments )