Some questions regarding PXE servers and multi-booting

I currently work in a technology help desk for my college, where we fix the personal computers of all the students. We have hundreds of DVD's and CD's that we use to boot into all kinds of different things to troubleshoot. Among them are:

  • Various Linux distros
  • Windows PE environments
  • hard drive Regen
  • Windows recovery consoles (all versions)
  • Windows installation disks (all versions)

This means that we spend a ton of money on CD's and DVD's as they get lost, scratched, etc. It is becoming quite a hassle to manage them! I have been considering toying with a PXE server that could allow us to boot to these things over the network and reduce the clutter.

Some of these disks have special boot information such that you can't simply copy the files to a blank disc. And some of them are incompatible with each other on multi-boot CD's I've made. For example, I haven't been able to make a multi-boot CD with Ubuntu 11.04 and Hiren's boot CD.

  1. Is it possible to have one PXE server that can allow devices to "boot to" many different environments?

  2. Is it possible for the PXE server to have bootable disk images (ISO's) that it simply 'emulates' for the connected computers to boot to?

  3. If the answer to #2 is 'no', how can one set up a PXE server to boot to multiple things?

  4. Ultimately, I would like to boot to a PXE server that just gives a numbered menu of items that we can boot to. Like 1) Ubuntu, 2) hard drive Regen, 3) Windows 7 Home, etc. Is this possible?

    Where can I start?


Solution 1:

Yep. I've managed many a PXE server. I'd recommend NeoPXE. There's tons of documentation on it and it's very powerful. You can do things like create a menu that will chainload to other PXE servers and install targets.

You should also know that a PXE server is simply a DHCP server paired with a TFTP server. To do more advanced things like what I explain below, you'll be setting up a proxy DHCP server.

For example, we have it set up so that when you first PXE boot you have a list of options to go to several different departments' PXE servers or go to Linux, Solaris, or BSD. From there you can go to Stable/Devel then pick your architecture and version. Finally you'd be given an option to do a kickstart/autoyast/jumpstart or an attended install.

The menus can be created programmatically and/or by hand. You edit configuration files then run make. I think this answers 1, 2, and 4. For number 3, if I understand you correctly... you can't simply serve an ISO to a client from a PXE server. For Linux distros, generally, you'll have to pull out the initrd and vmlinuz and then make the rest of the packages accessible via NFS, FTP, HTTP, or smb.

I think this is exactly what you're looking for.

http://download.oracle.com/docs/cd/E19273-01/835-0781/sfx46losig.gisnq.html

Let me know if you want more specific instructions for a given distro or if you need help setting up NeoPXE.

Solution 2:

I had a PXE server that doubled as a local Ubuntu mirror, and as new versions came out, I would add new images to boot with. I believe many OSes are capable of this, but Linux is the easiest. If the link in Amartel's post isn't enough to get you there, I can write a detailed post on my blog and shoot you a link in the comments, but here is the basic outline of what you need:

  1. A DHCP server that supports the NEXT-SERVER directive, which tells clients what server and which file to boot. If you are operating in a large network, this can be an issue. It is often best to have an isolated network for the purpose.
  2. The NeXT-SERVER needs to be a tftp server with syslinux. The syslinux menu is what will actually allow you to select and boot the images over the network. Adding new options to the menu is as simple as editing a text file after adding the iso. This setup is completely agnostic as to what the images are -- the computer boots it as if it were in the CD drive.
  3. A server with accessible storage for the images (can be the same as the tftp server, but could also use NFS from elsewhere).