This page is specific to Ubuntu versions 8.04, 8.10, 9.04, 9.10, 10.04, 12.04

If you find this information applicable to additional versions/releases, please edit this page and modify this header to reflect that. Please also include any necessary modifications for this information to apply to the additional versions.


Introduction

A proxy DHCP server is defined by the PXE specification as a server which sends auxiliary boot information to clients, like the boot filename, tftp server or rootpath, but leaves the task of IP leasing to the normal DHCP server. This functionality perfectly matches certain LTSP configurations where an external, unmodifiable DHCP server is present (e.g. a router).

Getting a recent dnsmasq version

The usual dhcp3-server can't be configured to act as a proxy DHCP server; fortunately, the newest dnsmasq versions (>=2.48) support this functionality. Karmic comes with dnsmasq 2.49; for previous Ubuntu versions read on.

You can find a backport of dnsmasq 2.49 in this PPA: https://launchpad.net/~ts.sch.gr/+archive/ppa; you may either download the appropriate dnsmasq.deb file for your Ubuntu series, or insert the PPA to your apt sources:

echo "deb http://ppa.launchpad.net/ts.sch.gr/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/ts.sch.gr/ppa/ubuntu jaunty main" \
  | sudo tee /etc/apt/sources.list.d/ts.sch.gr-ppa-jaunty.list > /dev/null
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 03AFA832
sudo apt-get update

The example above is for jaunty, replace with intrepid or hardy as appropriate. *Note: 12.04 users should have a good working dnsmasq program already in the repositories.

Installing dnsmasq and removing ltsp-server-standalone

If you've installed your LTSP server using the alternate CD, then ltsp-server-standalone was automatically installed. This package depends on dhcp3-server which would conflict with dnsmasq. In order to remove dhcp3-server and install dnsmasq, follow the steps below.

Mark ltsp-server as manually installed, so that it doesn't get purged along with ltsp-server-standalone:

sudo apt-get install ltsp-server  # This may update ltsp-server instead
sudo apt-get install ltsp-server  # So do it twice to be certain

Remove dhcp3-server and ltsp-server-standalone:

sudo apt-get --yes --auto-remove purge ltsp-server-standalone

Install dnsmasq. If you haven't put the PPA to your apt sources, then you need to do dpkg -i dnsmasq.deb instead.

sudo apt-get install dnsmasq

Creating the dnsmasq ltsp.conf file

Now an appropriate configuration file needs to be created for dnsmasq to function as a proxy DHCP server.

Create an /etc/dnsmasq.d/ltsp.conf file and paste the following contents into it, while adjusting them to your needs:

# Sample configuration for dnsmasq to function as a proxyDHCP server,
# enabling LTSP clients to boot when an external, unmodifiable DHCP
# server is present.
# The main dnsmasq configuration is in /etc/dnsmasq.conf;
# the contents of this script are added to the main configuration.
# You may modify the file to suit your needs.

# Don't function as a DNS server:
port=0

# Log lots of extra information about DHCP transactions.
log-dhcp

# Dnsmasq can also function as a TFTP server. You may uninstall
# tftpd-hpa if you like, and uncomment the next line:
#enable-tftp

# Set the root directory for files available via FTP.
tftp-root=/var/lib/tftpboot

# The boot filename.
dhcp-boot=/ltsp/i386/pxelinux.0

# rootpath option, for NFS
dhcp-option=17,/opt/ltsp/i386

# kill multicast
dhcp-option=vendor:PXEClient,6,2b

# Disable re-use of the DHCP servername and filename fields as extra
# option space. That's to avoid confusing some old or broken DHCP clients.
dhcp-no-override

# PXE menu
pxe-prompt="Press F8 for boot menu", 3

# The known types are x86PC, PC98, IA64_EFI, Alpha, Arc_x86,
# Intel_Lean_Client, IA32_EFI, BC_EFI, Xscale_EFI and X86-64_EFI
pxe-service=X86PC, "Boot from network", /ltsp/i386/pxelinux

# A boot service type of 0 is special, and will abort the
# net boot procedure and continue booting from local media.
pxe-service=X86PC, "Boot from local hard disk", 0

# If an integer boot service type, rather than a basename is given, then the
# PXE client will search for a suitable boot service for that type on the
# network. This search may be done by multicast or broadcast, or direct to a
# server if its IP address is provided.
#pxe-service=x86PC, "Install windows from RIS server", 1

# This range(s) is for the public interface, where dnsmasq functions
# as a proxy DHCP server providing boot information but no IP leases.
# Any ip in the subnet will do, so you may just put your server NIC ip here.
dhcp-range=10.160.31.10,proxy

# This range(s) is for the private network on 2-NIC servers,
# where dnsmasq functions as a normal DHCP server, providing IP leases.
#dhcp-range=192.168.0.20,192.168.0.250,8h

# For static client IPs, and only for the private subnets,
# you may put entries like this:
#dhcp-host=00:20:e0:3b:13:af,10.160.31.111,client111,infinite

*Note: 12.04 users can also use the AMD64 version, but must replace all "i386" with "amd64".

Adjusting pxelinux.cfg/default

Unfortunately, the ipconfig and udhcp programs used in the initramfs do not support the proxy DHCP part of the PXE specification.

Adjusting pxelinux.cfg/default for Ubuntu 8.04 - 9.10

In order to work around this problem, an "IPAPPEND 3" line needs to be added at the end of the /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default file., so that it contains the following:

DEFAULT vmlinuz ro initrd=initrd.img quiet splash
IPAPPEND 3

If you use nfs (which isn't used by default), then you also need to put boot=nfs nfsroot=10.160.31.10:/opt/ltsp/i386 right next to "splash".

The pxelinux.cfg/default file may get overwritten by the ltsp-update-kernels command. To make it keep its contents, run:

sudo cp /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default \
 /opt/ltsp/i386/boot/pxelinux.cfg/
sudo mkdir -p /opt/ltsp/i386/etc/ltsp/
(cat <<EOF
BOOTPROMPT_OPTS='quiet splash'
IPAPPEND=3
PXELINUX_CMDLINE='$(cat /opt/ltsp/i386/boot/pxelinux.cfg/default)'
EOF
) | sudo tee /opt/ltsp/i386/etc/ltsp/update-kernels.conf

Also, the following line must be executed in order to prevent some problems locating lts.conf:

sudo ln -s ltsp/i386/lts.conf /var/lib/tftpboot/lts.conf

Adjusting pxelinux.cfg/default for Ubuntu 10.04

Run the following commands in order to put the necessary options to /etc/ltsp/ltsp-update-image.conf, followed by ltsp-update-image --force to create a new pxelinux.cfg/default file with those options:

(cat <<EOF
BOOTPROMPT_OPTIONS='quiet splash autoconf=dhcp'
IPAPPEND=3
EOF
) | sudo tee -a /etc/ltsp/ltsp-update-image.conf
sudo ltsp-update-image --force

Adjusting pxelinux.cfg/default for Ubuntu 12.04

(cat <<EOF
ipappend 3
EOF
) | sudo tee -a /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default

Additional step for 12.04

Installing ltsp-server does not install tftpd-hpa, which is a necessary component needed in order to load tftp images to the client computers upon pxe boot. The tftpd-hpa program listens on port 69, therefore in order to transfer the ltsp image files to the clients it must be installed. There is no additional configuring to do once it is installed. APT should install and start the program, you do not have to "ltsp-update-image", the syntax:

sudo apt-get install tftpd-hpa

Compatibility

"Real" PXE clients do support the proxy DHCP specification, as do recent (> May 2009) gPXE clients. But older etherboot clients may be unable to get their boot information from a proxy DHCP server, so for those clients a normal DHCP server is needed (either dhcp3-server or dnsmasq in normal DHCP mode).

Troubleshooting

Dynamic Server IP Address Precaution

With an external DHCP server, it may change the assigned IP address for your LTSP server. This will result in thin clients being unable to login because the ssh key is tied to the server's IP address. To prevent this, you can either assign your ltsp server a static IP address, or if you have a modifiable external dhcp server, provide a reserved IP address for the LTSP server.

Should the IP address change and you find clients unable to login, run these two commands to regenerate the ssh keys and rebuilt the client image.

  sudo ltsp-update-sshkeys
  sudo ltsp-update-image

Then reboot your thin client(s.)

Failure: Insufficient Information to set up nbd, quitting

This is the most common error, there are many tutorials used to get ltsp working on Ubuntu. The most common error made is setting nbdroot=192.168.x.x (where x is you ip information). In 12.04 you must specify that nbdroot=:ltsp_i386 (or amd64 depending on your installation). N.B. for more recent version of ltsp, use nbdroot=/opt/ltsp/i386 instead, i.e. the name of the section in /etc/nbd-server/conf.d/ltsp_i386.conf)

Error: Socket failed: Connection refused

This is another type of error seen alot in setting up ltsp. Specific to 12.04, nbd-server uses a separate port (with the standard being port 2000). You may need to modify the default file and remove the port number after the nbdroot. ex:

nbdroot=192.168.x.x:2000 or nbdroot=192.168.x.x nbdport=2000

In the above case nbdroot should again be:

nbdroot=:ltsp_i386

N.B. for more recent version of ltsp, use nbdroot=/opt/ltsp/i386 instead.

Ubuntu LTSP debugging

Sometimes when those pesky errors do occur its difficult to see whats happening with the new ubuntu bootup screen. To get console debugging working you can remove the below from the /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default file:

quiet splash and / or plymouth:force-splash vt.handoff=7

*Note: you do not need to restart nbd-server for the setting to take. The settings should be immediate.

See Also

  • UbuntuLTSP - Community Ubuntu LTSP Documentation.

External Links

  • Dnsmasq - A light DHCP/DNS/TFTP server that supports the proxy DHCP specification.

  • Proxy DHCP - A small explanation of the term by wikipedia.

  • PXE specification - The complete PXE specification, published by Intel and Systemsoft.


CategoryLtsp

UbuntuLTSP/ProxyDHCP (last edited 2013-11-23 14:02:55 by mmenaz)