I’m trying to setup LTSP in my school’s computer lab.
I downloaded and installed openSUSE 11.0 64 bit and KIWI-LTSP prebuilt
image on HP Proliant ML115. The clients are i386 machines.I set the
clients to pxe boot but they don’t load.
Below is the result of the code from the troubleshooting site.
Any help would be appreciated.


teacher@linux-e0fh:~> rpm -qa | grep kiwi
teacher@linux-e0fh:~> cat /etc/sysconfig/kiwi-ltsp

Path: System/Kiwi-ltsp

Description: kiwi-ltsp setup - Part of KIWI-LTSP as created by


Copyright (c) 2007 Cyberorg

This program is free software; you can redistribute it and/or modify

it under

the terms of the GNU General Public License as published by the Free


Foundation; either version 2 of the License, or (at your option) any



This program is distributed in the hope that it will be useful, but


ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or


FOR A PARTICULAR PURPOSE. See the GNU General Public License for



You should have received a copy of the GNU General Public License

along with

this program; if not, write to the Free Software Foundation, Inc., 59


Place, Suite 330, Boston, MA 02111-1307 USA

Authors: Cyberorg Cyberorg <>

Magnus Boman <>

Version Date Changes

0.1.1 2007-08-25 Initial release

0.1.2 2007-08-27 Added {SUSE,LTSP}_INSTALL_SOURCE

0.1.2 2007-09-05 Image type and nfs chroot paths

0.1.3 2007-09-09 Added DHCP_IFACE=“eth0”

0.1.4 2007-09-11 Move it to /etc/sysconfig

0.1.5 2007-09-24 Added LTSSQUASHPATH="/srv/kiwi-ltsp"

0.1.6 2007-11-04 Auto detect server IP address based on specified

DHCP interface

Type: integer(0:1)

Default: 0

#Set LTSP_DEBUG “0” logs to file and “1” to log KIWI activity to screen
instead of log file

Type: list(NFS,NBD)

Default: NBD

#Set the image type, NFS and NBD supported, NBD is default

Type: string

Default: /mnt/10.3

#Set the installation source path or URL

Type: string(yast2,rpm-dir)

Default: yast2

#Set the installation source type

Type: list(10.3,11.0)

Default: 11.0

#Set the openSUSE version to use for creating image

Type: string


#Range of IP addresses to be used for DHCP setup

Type: string


#Subnet to be used for DHCP setup

Type: string


#Netmask to be used for DHCP setup

Type: string(eth0,eth1,eth2,ANY)

Default: ANY

#DHCP Interface connected to ltsp network

Type: string


#Set the IP address of this server that would be accessed by ltsp

Type: string


#your domainname for DHCP setup

Type: string

Default: $SERVER_IP

#DNS server to be used for DHCP setup

Type: string

Default: $SERVER_IP

#Gateway IP to be used for DHCP setup

Type: string

Default: $SERVER_IP

#TFTP server IP for PXE boot, this is the server where the netboot
image is stored
#This is usually same as server IP, do not change this if you don’t
know what it is.

Type: string

Default: /usr/share/kiwi/image/ltsp/suse-$SUSE_VERSION

#Please do not change this, unless you know what you are doing

Type: string

Default: /srv/kiwi-ltsp

#Please do not change this, unless you know what you are doing

Type: string

Default: /srv/tftpboot

#Please do not change this, unless you know what you are doing

Type: string

Default: /tmp/kiwi-netboot

#Please do not change this, unless you know what you are doing

Type: string

Default: /srv/kiwi-ltsp

#Please do not change this, unless you know what you are doing

Type: string


#Please do not change this, unless you know what you are doing

Type: string

Default: /usr/share/kiwi/image/netboot/suse-$SUSE_VERSION

#Please do not change this, unless you know what you are doing

Type: string


#Add space separated list of packages to be installed in the client for
use as localapps
teacher@linux-e0fh:~> cat /etc/dhcpd.conf


Sample configuration file for ISC dhcpd

option definitions common to all supported networks…

option domain-name “”;
option domain-name-servers,;

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

if you do not use dynamical DNS updates:

this statement is needed by dhcpd-3 needs at least this statement.

you have to delete it for dhcpd-2, because it does not know it.

if you want to use dynamical DNS updates, you should first read

read /usr/share/doc/packages/dhcp-server/DDNS-howto.txt

ddns-update-style none; ddns-updates off;

If this DHCP server is the official DHCP server for the local

network, the authoritative directive should be uncommented.


Use this to send dhcp log messages to a different log file (you also

have to hack syslog.conf to complete the redirection).

log-facility local7;

No service will be given on this subnet, but declaring it helps the

DHCP server to understand the network topology.

subnet netmask {

This is a very basic subnet declaration.

subnet netmask {
option routers,;

This declaration allows BOOTP clients to get dynamic addresses,

which we don’t really recommend.

subnet netmask {
range dynamic-bootp;
option broadcast-address;
option routers;

A slightly different configuration for an internal subnet.

subnet netmask {
option domain-name-servers;
option domain-name “”;
option routers;
option broadcast-address;
default-lease-time 600;
max-lease-time 7200;

Hosts which require special configuration options can be listed in

host statements. If no address is specified, the address will be

allocated dynamically (if possible), but the host-specific


will still come from the host declaration.

host passacaglia {
hardware ethernet 0:0:c0:5d:bd:95;
filename “vmunix.passacaglia”;
server-name “”;

Fixed IP addresses can also be specified for hosts. These


should not also be listed as being available for dynamic assignment.

Hosts for which fixed IP addresses have been specified can boot


BOOTP or DHCP. Hosts for which no fixed address is specified can


be booted with DHCP, unless there is an address range on the subnet

to which a BOOTP client is connected which has the dynamic-bootp



host fantasia {
hardware ethernet 08:00:07:26:c0:a5;

You can declare a class of clients and then do address allocation

based on that. The example below shows a case where all clients

in a certain class get addresses on the 10.17.224/24 subnet, and all

other clients get addresses on the 10.0.29/24 subnet.

class “foo” {
match if substring (option vendor-class-identifier, 0, 4) = “SUNW”;

shared-network 224-29 {
subnet netmask {
option routers;
subnet netmask {
option routers;
pool {
allow members of “foo”;
pool {
deny members of “foo”;
teacher@linux-e0fh:~> ifconfig
bash: ifconfig: command not found
teacher@linux-e0fh:~> kiwi-ltsp-setup -c
bash: kiwi-ltsp-setup: command not found


philadelphia’s Profile:
View this thread:

Hi there,

I have only installed Kiwi-LTSP once, but I did as you did - installed
the pre-built image, etc. As I recall, I needed to set up the DHCP
settings and TFP next hop IP to be the localhost IP, etc.

I am sure you have already found this Wiki, but just in case:
‘LTSP/Configuration - openSUSE’

When you say the clients won’t PXE boot - do you mean they don’t get an
IP address at all? If that is the case, the DHCP sever is likely not
running. If they get an address, but then you see a long list of MAC
addresses, then it means the PXE image to TFTP to the client is not

Let me know what point exactly it is hanging at and perhaps we can get
this running for you.

NOTE: I though the clients ran the compute locally - meaning the
compute load was performed on the client. In actual fact, all the load
is carried by the server, all computer is performed there and the screen
is forwarded to the client. I was hoping for more of a cluster where
each client used it’s own CPU resources and ran the processes locally.
Despite this, Kiwi and LTSP is still very cool and might fit your school
needs very well. It would be great to get this set up for you!

Pete Eby


LewsTherinTelemon’s Profile:
View this thread:

Hi there,

Oh - I just noticed the end of your output. You have to be root to run
those commands, they are not is user’s paths so you are getting command
not found. su to root (#su -) and run them.



LewsTherinTelemon’s Profile:
View this thread:

The client never connect to the server.

Thanks Pete for your help.


philadelphia’s Profile:
View this thread:

Hey there,

Okay - so that means the DHCP server is not running.

First, let’s make sure the DHCP server is really installed and running.
Do you see the DHCP server in yast → Network Services. If not, use
Yast to install: DHCP-server and yast2-dhcp-server (for the Yast control
panel interface)

Also, ensure that yast2-tftp and yast2-nfs are also installed. You need
them after the DHCP server is running.

Once everything is installed you will see the DHCP, TFTP and NFS
servers in Yast -> Network Services, like this:


Next, go into the DHCP server in Yast. Complete the DHCP network Setup
Wizard - most steps are pretty self explanatory. Note that if you
already have a DHCP server running on your network (for example your
router?) you might need to turn it off - that way there is only one DHCP
server running on your network segment. I am not sure exactly how your
Suse server is set up - if it has two network cards, or does it connect
to a switch in your lab with no outside (internet) connection that will
be accessed by the clients, etc.

Once you have configured the DHCP wizard, start the DHCP server. Verify
it is running by:
Callandor:/ # netstat -tuple | grep dhcp
udp 0 0 *:bootps :
root 589261 30494/dhcpd

Now - the real test, connect a client to the server (via a switch or
using a crossover cable) and see if you can get a DHCP IP address -
don’t worry about PXE yet, just make sure the server gives out an IP
address. If it is a linux client just run #dhclient and see if it gets
an IP. If a Windows client, configure the interface for DHCP in control
panel, network settings, yadda yadda.

Once you have this working you are half way there.

Let us know how it goes!

If you have trouble let us know exactly what you see in response to the
netstat command above, exactly how your network is setup and what you
are seeing on the clients when they try to get an IP.




LewsTherinTelemon’s Profile:
View this thread:

Thanks Pete,

I’ll give that a try when I get back to school tomorrow morning.


philadelphia’s Profile:
View this thread:

Ok Pete,

The client now shows this message.

Client IP: MASK: dhcp IP:
Gateway IP:
PXE-E32: TFTP open timeout

But fails to load.



philadelphia’s Profile:
View this thread:

Hi Jay,

You got the DHCP server running, so that is great - you are half way

The error you are getting is saying the tftp server is not responding.
This may be because it is not running, or is blocked by the firewall

Check this out next: Go into Yast and ensure the TFTP server is running
(click on it and start it if needed) If there is no icon for the tftp
server in Yast then install the package (see previous post) Once
installed and running, ensure you have allowed the port in the firewall,
or turned off the firewall.

If it is running, and not blocked, but you the PXE client still does
not communicate with it - then you may need to specify the next hop IP
for the TFTP server as the IP of the server itself. (Some times the DHCP
server is one box, and the TFTP server is another. DHCP allows the lease
given the client to include the IP of the TFTP server too. This is how
the client learns who to contact to get the image.)

As I recall, you need to specify the next hop IP for the TFTP server
for Kiwi. Look at the Yast screen shot here ‘LTSP/Configuration -
openSUSE’ ( - although they
show the server’s main IP setting, you can also see in the Kiwi-ltsp
options and entry for “TFTP Server” - verify you have the correct IP
entered there.

Another option is to use another tftp server. The regular yast one just
uses a very simple one through xinit.d - there are not a lot of
configuration options, etc. The few options there are are given in
/etc/xinetd.d/tftp I believe.

You might try atfp instead. I used that and was able to get PXE working

The original guide I followed was this one: ‘Configuring a TFTP/PXE
Server » SUSE Linux Enterprise in the Americas’
( perhaps it might help you too.

Now - lastly, you need the files in /tftpboot that will be loaded
(these should have been installed when you installed Kiwi), but make
sure they are there. You should see pxelinux.0 pxelinux.cfg and other
files there

Try these suggestions out and let me know how it goes.


(By the way - what kind of school lab is this for? K-12, college, etc?)


LewsTherinTelemon’s Profile:
View this thread:

Hi there,

Oh, another site I found very useful in getting PXE to work was this

‘SuSE install with PXE boot - openSUSE’



LewsTherinTelemon’s Profile:
View this thread:

You’re aware that there’s a mailing list for Kiwi-LTSP you can ask for
help on?


ken_yap’s Profile:
View this thread:

Ah - and take all the fun out of it?

Where’s your sense of adventure! :wink:

Heck, Jay’s almost got it.



LewsTherinTelemon’s Profile:
View this thread:

Hey there,

Were you ever able to get this working? I hope so, if you got stuck let
us know and maybe we can help get you up and running.

What kind of school are you in? Do you use Linux in other areas of your

Lews Therin


LewsTherinTelemon’s Profile:
View this thread: