====== 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 [[http://syslinux.zytor.com/wiki/index.php/Common_Problems#Official_Binaries|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.