Pxe booting – now with menus
I decided that the command line solution described in an earlier post, could be made to look nicer with menus and I want it to be easier to update the entries with the latest Backtrack or Debian.
How it used to look
It works, but you have to type everything. This is awkward with entries like squeeze_i386_install and no tab-completion.
After doing a bit of research and digging through memory, it turns out that we are able to do most of the boot time niceness that we see on most Linux distros. Splash, menus, graphics and so on are all controlled by syslinux. We are relying on a subpart called pxelinux.
I downloaded the latest syslinux from their site, and that gave me a lot of files and binaries – including the .c32 files mentioned later.
For debugging, I have Virtualbox running with a disk less virtual machine that I reboot again and again to test the configuration.
Menus!
That is simple (when you know how to do it). The documentation is found here. It boils down to adding
default menu.c32
to pxelinux.cfg/default, and copying menu.c32 to the root (as in the parent directory of pxelinux.cfg/).
Instead of menu.c32, you could use vesamenu.c32, but since I mostly use it for booting virtual machines and thin clients based on MAC, I decided on the simpler text-based menus.
The entries about BT5 and Debian are submenus. The last entry is just for booting for the local disk instead of via the network. Another point worth mentioning is the last entry in the bt5 submenu (not shown), it points back to the main menu (see the file below for details). Most entries are also using NFS for mounting the root file system (the nfsroot keyword) – it uses IP addresses, not the server host name…
Resulting config
Final pxelinux.cfg/default.
DEFAULT menu.c32 #PROMPT 0 #TIMEOUT 0 LABEL futsi MENU futsi KERNEL futsi/boot/vmlinuz-2.6.32-futsinfs APPEND root=/dev/nfs initrd=futsi/boot/initrd.img-2.6.32-futsinfs nfsroot=192.168.1.153:/var/tftp/futsi ip=dhcp rw # include bt5 menu LABEL bt5 MENU LABEL BT5 submenu KERNEL menu.c32 APPEND pxelinux.cfg/bt5.menu # include debian squeeze menu LABEL bt5 MENU LABEL Debian squeeze submenu KERNEL menu.c32 APPEND pxelinux.cfg/debian_squeeze.menu # weel, booting from hdd might be smart also 🙂 label hd menu label Hard Drive Boot - boot the first hard disk localboot 0x80 append -
An example of a submenu (pxelinux.cfg/bt5.menu)
menu title BT5r1 KDE label MEMTEST menu label BackTrack Memtest - Run memtest kernel bt5/isolinux/memtest append - label DEFAULT menu label Default Backtrack boot kernel bt5/casper/vmlinuz append nfsroot=192.168.1.153:/nobackup/tftp/bt5/ netboot=nfs ro file=/cdrom/preseed/custom.seed boot=casper initrd=bt5/casper/initrd.gz label FORENSICS menu label BackTrack Forensics - No Drive or Swap Mount kernel bt5/casper/vmlinuz append nfsroot=192.168.1.153:/nobackup/tftp/bt5/ netboot=nfs ro file=/cdrom/preseed/custom.seed boot=casper initrd=bt5/casper/initrd.gz LABEL back MENU LABEL back KERNEL menu.c32 APPEND ~
Wonderful submit, very informative. I wonder why the other experts of this sector don’t notice this. You must proceed your writing. I’m confident, you’ve a huge readers’ base already!|What’s Going down i am new to this, I stumbled upon this I’ve found It positively useful and it has aided me out loads. I hope to contribute & assist other customers like its aided me. Great job.
diskless caffe
July 25, 2012 at 13:42
Calling my readers’ base “huge” is overly optimistic, but I like that people benefit from my writings, so thanks for the nice comment.
moozing
July 25, 2012 at 20:35