I boot over the network using PXE.

On my build machine, I have installed a tftpserver. Specifically, I use the one built into dnscache. In /tftpboot, I have symlinks to pistachio, sigma0, and the root of the build tree.

My build machine boots using PXE. It gets an IP address, contacts my build machine and loads grub2pxe. Note that there is no need to use pxelinux; grub2 is a valid PXE executable. Further, grub2 uses the PXE interface for accessing the network, so if your hardware supports PXE, then you do not need to worry about a network driver. Here is how I build grub2 and the grub2 image:

cd ~/src
svn co svn://svn.savannah.gnu.org/grub/trunk/grub2
cd grub2
mkdir build
cd build
../configure --prefix=$HOME/src/grub2/install && make && make install
cd ~/src/grub2/install
bin/grub-mkimage --output=core.img --prefix="(pxe)" pxe pxecmd help reboot serial multiboot pc configfile normal boot
cat lib/grub/i386-pc/pxeboot.img core.img > grub2pxe

Here is my /tftpboot/grub.cfg, which sends output to the first serial port:

# Timeout for menu
set timeout=1

# Set default boot entry as Entry 0
set default=0

menuentry "Viengoos" {
    multiboot /viengoos/laden/laden -o serial -D
    module /pistachio
    module /sigma0
    module /viengoos/viengoos/viengoos.stripped -D 3 -o serial
    module /viengoos/hieronymus/hieronymus.stripped
}