Table of Contents
Booting gPXE from a memory stick partition with SYSLINUX
Much like the howto usbwithstorage, this will guide you through installing gPXE on your flash drive (or any other FAT/ext234/btrfs partition for that matter) without losing ability to store files on it. In fact, using EXTLINUX or SYSLINUX, it's possible to use this method to make almost any medium gPXE-bootable.
Warning: Following this guide is generally quite safe, but if you have important data on your USB stick, you may want to make a backup first just to be safe.
Getting SYSLINUX
I'll leave this part mostly down to you. It's probably available in your distribution's package manager, but if not, you can get it from http://syslinux.zytor.com
NOTE: I'd highly recommend the latest official pre-compiled package (Yes, it's been a source/binary package since the beginning). See also Official Binaries -GeneC
Making the partition bootable
The partition will first need to be labelled as “boot” using fdisk.
Start fdisk. As root:
fdisk /dev/sdb
Replace /dev/sdb with your disk.
Type “p” to show your partition table. Eg, heres mine:
Device Boot Start End Blocks Id System /dev/sdb1 1 1012 1035245 83 Linux
Identify which partition it is which you want to make bootable. If, like me, you only have one, this task is trivial.
Type “a” to toggle the bootable flag, and it will ask you which partition number. This done, you can type “w” to write the changes and exit.
Building and copying the gPXE image
Simply enter the source directory (gpxe-*/src) and:
make bin/gpxe.lkrn
This creates a gPXE image which acts a bit like a linux kernel, meaning SYSLINUX will recognise it as its own.
Copy this to your mounted flash drive:
cp bin/gpxe.lkrn /media/disk/
Replace /media/disk/ with the appropriate path.
Installing SYSLINUX
Follow these steps if you are using a FAT16 or FAT32 partition
Now SYSLINUX will need a config file. Here's how you can make a really simple one. No menus or anything:
cat > /media/disk/syslinux.cfg << EOF default gpxe label gpxe kernel /gpxe.lkrn EOF
If you want anything more complex, see the SYSLINUX documentation.
Now that the config's done, you can unmount and install SYSLINUX on the partition. As root:
umount /dev/sdb1 syslinux -s /dev/sdb1
Replacing /dev/sdb1 with your partition.
Continue with the “Installing an MBR” section below.
Installing EXTLINUX
Follow these steps if you're using an ext2/3/4 or btrfs partition. ext4 and btrfs are only supported in EXTLINUX 4.0.0 and later
EXTLINUX requires a different filename for its config file compared to SYSLINUX. Generate a simple one like this:
cat > /media/disk/extlinux.conf << EOF default gpxe label gpxe kernel /gpxe.lkrn EOF
To install EXTLINUX, you don't even need to unmount the medium. As root, simply:
extlinux -i /media/disk/
Continue with the “Installing an MBR” section below.
Installing an MBR
You should have a SYSLINUX mbr.bin file somewhere on your system. For me, it was /usr/share/syslinux/mbr.bin You might be able to find yours using:
locate mbr.bin
As root, write this to your flash drive:
dd if=/usr/share/syslinux/mbr.bin of=/dev/sdb
And you're done! Now you should be able to boot gPXE from the memory stick.