Note! Be sure that you've already setup PXE Booting BEFORE you do this! Consider that step 1, and then this step 2.
Knoppix is an amazing "one CD does it all" distro. About 1900MB of software compressed and stuck on a 700MB CD, with everything from sed to Openoffice. It does it all. I wanted to be able to network boot it, so here's how I pulled it off.
Knoppix I used 3.7, so these instructions may not work on earlier versions, and they may have changed to accomodate later versions.
NFS Server This is required by knoppix to successfully network boot. Setting up NFS is beyond the scope of this document, although it will tell you which exports you need to create and with what permissions. NFS is a very common server that runs on linux, and chances are good that your distro has already installed it for you.
Configuring Knoppix to PXE boot
Step One: Generating the needed files
Knoppix has the built-in ability to auto-configure itself to network boot itself, and this makes the process rather easy. In the "KNOPPIX" submenu, select the "Start Terminal Server" option.
IMPORTANT NOTE! By doing this, it will start up dhcp, and many other services! Running two DHCP servers on the same subnet is generally a very bad idea!
When prompted, select the menu item to configure the terminal server, and run through that.
1. If at all possible, start the terminal service on a different NIC. This will prevent a LOT of possible mayhem. If you only have a single NIC, then before you click the final "OK" button, be sure to unplug your ethernet cable.
2. For the IPs, just a low number of IPs (must be specified as "192.168.0.2 192.168.0.3") is fine. You cannot enter a single IP, and the range is inclusive of what you input.
3. Be sure to select all needed kernel modules on the slaves!
4. Be sure NOT to check the NX thin client button! The other software does not matter, however, if you check the secure box, by default your clients will not be able to access the root user. (Note: The "secure" option is easily changable later on.)
5. Specify any needed kernel paramaters for your slaves. If you don't need any, do as the box says and just click ok.
5b. If you only have one NIC in the computer running knoppix, and an existing DHCP server on the network, unplug the knoppix computer now.
6. Click the final ok, all done.
6b. If you unplugged your ethernet cable, be sure to stop the DHCP server on knoppix before plugging it back in.
Once you're done, knoppix WILL start a myriad of services that may cause havoc on your local network. This is why you should unplug that computer from the LAN and then stop the dhcp server, or configure it to run on a different NIC (prefreable, but not always possible).
Importante note #2: If your network does not have DHCP, and if you just want to have clients that can network boot knoppix, stop here, and restart the DHCP server. You're done. However, if you have existing PXE setup and want to be able to network boot knoppix without having it running on a computer, keep on reading.
Step Two: Setting up your PXE server to network boot knoppix
Knoppix kernel and initrd
Once you've stopped the DHCP server, take a look around in /tftpboot. There's three files of importance to us: vmlinuz, miniroot.gz, and pxelinux.cfg/default. The first is the kernel used to start knoppix, the second is the needed initrd to boot knoppix, and the last one contains all needed settings for your pxelinux configuration.
"vmlinuz" is a very generic kernel name, so I renamed mine to "knoppix-kernel", and the miniroot.gz to "knoppix-miniroot.gz". Take these two files and place them in your tftp server's root directory (you should be able to connect directly to your tftp server and make a request for "knoppix-kernel"). Now, on to our pxelinux configuration.
Open up /tftpboot/pxelinux.cfg/default on the knoppix computer. Mine looks like so:
DEFAULT vmlinuz APPEND secure nfsdir=192.168.0.3:/cdrom nodhcp lang=us ramdisk_size=100000 init=/etc/init apm=power-off nomce vga=791 initrd=miniroot.gz quiet BOOT_IMAGE=knoppix TIMEOUT 300 PROMPT 1 DISPLAY boot.msg LABEL knoppix KERNEL vmlinuz APPEND secure nfsdir=192.168.0.3:/cdrom nodhcp lang=us ramdisk_size=100000 init=/etc/init apm=power-off nomce vga=791 initrd=miniroot.gz quiet BOOT_IMAGE=knoppix LABEL knoppix-txt KERNEL vmlinuz APPEND secure nfsdir=192.168.0.3:/cdrom nodhcp lang=us ramdisk_size=100000 init=/etc/init apm=power-off nomce vga=normal initrd=miniroot.gz BOOT_IMAGE=knoppix LABEL expert KERNEL vmlinuz APPEND secure nfsdir=192.168.0.3:/cdrom nodhcp lang=us ramdisk_size=100000 init=/etc/init apm=power-off nomce vga=791 initrd=miniroot.gz BOOT_IMAGE=expert LABEL fb1024x768 KERNEL vmlinuz APPEND secure nfsdir=192.168.0.3:/cdrom nodhcp lang=us ramdisk_size=100000 init=/etc/init apm=power-off nomce vga=791 xmodule=fbdev initrd=miniroot.gz BOOT_IMAGE=knoppix LABEL fb800x600 KERNEL vmlinuz APPEND secure nfsdir=192.168.0.3:/cdrom nodhcp lang=us ramdisk_size=100000 init=/etc/init apm=power-off nomce vga=788 xmodule=fbdev initrd=miniroot.gz BOOT_IMAGE=knoppix
Special note: the "secure" option you see here is the same as the secure option you checked in the terminal server setup. If you do not want this, remove it now.
Out of all of this, I took the default kernel line and made a label block that looks like so:
label knoppix kernel knoppix-kernel append nfsdir=192.168.0.1:/srv/diskless/knoppix nodhcp lang=us ramdisk_size=100000 init=/etc/init apm=power-off nomce vga=791 xmodule=fbdev initrd=knoppix-miniroot.gz BOOT_IMAGE=knoppix
A little explanation here. If you remember, I renamed my "vmlinuz" to "knoppix-kernel", which is why I specified that under the kernel line and not "vmlinuz". Same goes for the last param, I renamed my "miniroot.gz" to "knoppix-miniroot.gz". I left the rest alone, minus the "nfsdir" paramater, which will be explained next.
Be sure to append this to a (or create a new) pxelinux.cfg/(config file) block, otherwise pxelinux knows nothing at all of your bootable knoppix :)
NFS Server Configuration
Installing an NFS server is beyond the scope of this document, however this will give you what's needed to configure your NFS server.
In /etc/exports on the knoppix computer:
Note how this matches up with the initial nfsdir parameter in the original knoppix pxelinux.cfg/default file.
If you look in /cdrom on the knoppix computer, you'll find a directory called "KNOPPIX". I copied this entire folder over to /srv/diskless/knoppix/, so that the full path to the knoppix boot image is actually /srv/diskless/knoppix/KNOPPIX/KNOPPIX. It looks a little redundant, but here's why.
I like to keep everything organized, and if you look in the KNOPPIX folder, you'll see that there's quite a few files in there. Additionally, knoppix is expecting to mount a directory over NFS and see the folder "KNOPPIX" right there. So what I did, is I changed my nfsdir line to match my server's IP address, and then added an expoort on my NFS server that looks like so:
On the knoppix computer, it's clients are instructed to mount /cdrom and go from there. /cdrom contains folder KNOPPIX.
On my PXE server, the clients are instructed to mount /srv/diskless/knoppix and go from there. /srv/diskless/knoppix contains folder KNOPPIX. Note how that just kind of works out ;)
Reboot a PXE client, and at the boot prompt, type "knoppix" and see what happens. Enjoy! :)