|  | #!/bin/bash -e | 
|  | # build_pxe_boot.sh - Create a PXE boot environment | 
|  | # | 
|  | # build_pxe_boot.sh [-k kernel-version] destdir | 
|  | # | 
|  | # Assumes syslinux is installed | 
|  | # Assumes devstack files are in `pwd`/pxe | 
|  | # Only needs to run as root if the destdir permissions require it | 
|  |  | 
|  | UBUNTU_MIRROR=http://archive.ubuntu.com/ubuntu/dists/natty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64 | 
|  |  | 
|  | MEMTEST_VER=4.10 | 
|  | MEMTEST_BIN=memtest86+-${MEMTEST_VER}.bin | 
|  | MEMTEST_URL=http://www.memtest.org/download/${MEMTEST_VER}/ | 
|  |  | 
|  | KVER=`uname -r` | 
|  | if [ "$1" = "-k" ]; then | 
|  | KVER=$2 | 
|  | shift;shift | 
|  | fi | 
|  |  | 
|  | DEST_DIR=${1:-/tmp}/tftpboot | 
|  | PXEDIR=${PXEDIR:-/var/cache/devstack/pxe} | 
|  | OPWD=`pwd` | 
|  | PROGDIR=`dirname $0` | 
|  |  | 
|  | mkdir -p $DEST_DIR/pxelinux.cfg | 
|  | cd $DEST_DIR | 
|  | for i in memdisk menu.c32 pxelinux.0; do | 
|  | cp -p /usr/lib/syslinux/$i $DEST_DIR | 
|  | done | 
|  |  | 
|  | DEFAULT=$DEST_DIR/pxelinux.cfg/default | 
|  | cat >$DEFAULT <<EOF | 
|  | default menu.c32 | 
|  | prompt 0 | 
|  | timeout 0 | 
|  |  | 
|  | MENU TITLE PXE Boot Menu | 
|  |  | 
|  | EOF | 
|  |  | 
|  | # Setup devstack boot | 
|  | mkdir -p $DEST_DIR/ubuntu | 
|  | if [ ! -d $PXEDIR ]; then | 
|  | mkdir -p $PXEDIR | 
|  | fi | 
|  | if [ ! -r $PXEDIR/vmlinuz-${KVER} ]; then | 
|  | sudo chmod 644 /boot/vmlinuz-${KVER} | 
|  | if [ ! -r /boot/vmlinuz-${KVER} ]; then | 
|  | echo "No kernel found" | 
|  | else | 
|  | cp -p /boot/vmlinuz-${KVER} $PXEDIR | 
|  | fi | 
|  | fi | 
|  | cp -p $PXEDIR/vmlinuz-${KVER} $DEST_DIR/ubuntu | 
|  | if [ ! -r $PXEDIR/stack-initrd.gz ]; then | 
|  | cd $OPWD | 
|  | sudo $PROGDIR/build_pxe_ramdisk.sh $PXEDIR/stack-initrd.gz | 
|  | fi | 
|  | cp -p $PXEDIR/stack-initrd.gz $DEST_DIR/ubuntu | 
|  | cat >>$DEFAULT <<EOF | 
|  |  | 
|  | LABEL devstack | 
|  | MENU LABEL ^devstack | 
|  | MENU DEFAULT | 
|  | KERNEL ubuntu/vmlinuz-$KVER | 
|  | APPEND initrd=ubuntu/stack-initrd.gz ramdisk_size=2109600 root=/dev/ram0 | 
|  | EOF | 
|  |  | 
|  | # Get Ubuntu | 
|  | if [ -d $PXEDIR ]; then | 
|  | cp -p $PXEDIR/natty-base-initrd.gz $DEST_DIR/ubuntu | 
|  | fi | 
|  | cat >>$DEFAULT <<EOF | 
|  |  | 
|  | LABEL ubuntu | 
|  | MENU LABEL ^Ubuntu Natty | 
|  | KERNEL ubuntu/vmlinuz-$KVER | 
|  | APPEND initrd=ubuntu/natty-base-initrd.gz ramdisk_size=419600 root=/dev/ram0 | 
|  | EOF | 
|  |  | 
|  | # Get Memtest | 
|  | cd $DEST_DIR | 
|  | if [ ! -r $MEMTEST_BIN ]; then | 
|  | wget -N --quiet ${MEMTEST_URL}/${MEMTEST_BIN}.gz | 
|  | gunzip $MEMTEST_BIN | 
|  | fi | 
|  | cat >>$DEFAULT <<EOF | 
|  |  | 
|  | LABEL memtest | 
|  | MENU LABEL ^Memtest86+ | 
|  | KERNEL $MEMTEST_BIN | 
|  | EOF | 
|  |  | 
|  | # Get FreeDOS | 
|  | mkdir -p $DEST_DIR/freedos | 
|  | cd $DEST_DIR/freedos | 
|  | wget -N --quiet http://www.fdos.org/bootdisks/autogen/FDSTD.288.gz | 
|  | gunzip -f FDSTD.288.gz | 
|  | cat >>$DEFAULT <<EOF | 
|  |  | 
|  | LABEL freedos | 
|  | MENU LABEL ^FreeDOS bootdisk | 
|  | KERNEL memdisk | 
|  | APPEND initrd=freedos/FDSTD.288 | 
|  | EOF | 
|  |  | 
|  | # Local disk boot | 
|  | cat >>$DEFAULT <<EOF | 
|  |  | 
|  | LABEL local | 
|  | MENU LABEL ^Local disk | 
|  | MENU DEFAULT | 
|  | LOCALBOOT 0 | 
|  | EOF |