# Lazy client, part IV



Ok, so far I've created a `cfengine` setup that works. On
my main host 'elektron' I've created a `/export/nfsroot/x86`
directory. This holds the general files for the x86 Ubuntu 
lazy clients. With 2 scripts (see below) I can easily create a
whole new `x86` from scratch. Bringing up new lazy clients is
even more easy, once the groundwork is there.
I only need to do three things:

 * fix the DNS (forward and reverse)
 * fix the DHCP and add an ip address.
 * add this ip address to some cfengine file (2 in total)
 * optionally add some *extra* configuration in cfengine
   for this specific host.

# Create a generic lazy client from scratch
There is one script that creates a new host in a `chroot`ed environment,
it starts a `debootstrap` and after that calls a follow-up script to 
finish the configuration for this host - after this step `cfengine`
takes over. The second stage script takes care of setting up the
`sources.list` for apt and a preliminary `/etc/hosts` file. Cfengine
fixes everything else. 

After this step I can mv the `chroot`ed Linux install to the correct
directory and let `cfengine` take over.

So when installing a completely *new* lazy client I need to perform
the following steps:
    
    1. mkdir linux.$$
    2. cd linux.$$
    3 ~/lazy/chroot-lazy-p1 x86 dapper (calls chroot-lazy-p2 when finished)
    4. cd ..
    5. mv linux.$$ /export/nfsroot/x86
    6. cfagent -v

Step 6 is the most complex one, it triggers on the existence of the
`/export/nfsroot/x86` directory, hence step 5 above. When this
directory is found the following cfengine script is called:
`elektron/nfsroot/_init.cf`, which in turn will execute other
scripts which takes care of the post-configuration of this host.

All the configuration which is done now will be shared by all
lazy clients. But as I've already written (link to part 3), 
I may also need some *per* host configuration. This is done
running `cfengine` as part of the booting process. When this
`cfengine` is running all changes will be made to the ramdisk
which holds `/etc`. Typical tasks may be to setup user accounts
and a message of the day which may be different on each lazy client.

#Closing remarks
This solution is scalable to -- I think -- 50 to 100 lazy clients. So
for medium sized networks. The initial setup is complicated, but adding
new lazy clients is easy enough to be scriptable.

If you want to scale it up more you need to look a thin clients,
but those are less powerful and you may need network audio and 
local devices (USB sticks) may not be fully supported.

