tools/build_pxe_env.sh
a4b58776
 #!/bin/bash -e
e62ba4d3
 
 # **build_pxe_env.sh**
 
 # Create a PXE boot environment
3f717002
 #
ec74eef1
 # build_pxe_env.sh destdir
 #
 # Requires Ubuntu Oneiric
3f717002
 #
9b5ebb5a
 # Only needs to run as root if the destdir permissions require it
3f717002
 
ec74eef1
 dpkg -l syslinux || apt-get install -y syslinux
 
1f80bfb3
 DEST_DIR=${1:-/tmp}/tftpboot
d7326d2e
 PXEDIR=${PXEDIR:-/opt/ramstack/pxe}
c945bf8d
 PROGDIR=`dirname $0`
3f717002
 
55c02737
 # Clean up any resources that may be in use
 cleanup() {
     set +o errexit
 
     # Mop up temporary files
     if [ -n "$MNTDIR" -a -d "$MNTDIR" ]; then
         umount $MNTDIR
         rmdir $MNTDIR
     fi
 
     # Kill ourselves to signal any calling process
     trap 2; kill -2 $$
 }
 
d7326d2e
 trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT
 
 # Keep track of the current directory
 TOOLS_DIR=$(cd $(dirname "$0") && pwd)
 TOP_DIR=`cd $TOOLS_DIR/..; pwd`
55c02737
 
1f80bfb3
 mkdir -p $DEST_DIR/pxelinux.cfg
 cd $DEST_DIR
 for i in memdisk menu.c32 pxelinux.0; do
f2a343b0
     cp -pu /usr/lib/syslinux/$i $DEST_DIR
1f80bfb3
 done
 
dd6636be
 CFG=$DEST_DIR/pxelinux.cfg/default
 cat >$CFG <<EOF
3f717002
 default menu.c32
 prompt 0
9b5ebb5a
 timeout 0
3f717002
 
d7326d2e
 MENU TITLE devstack PXE Boot Menu
3f717002
 
 EOF
 
c945bf8d
 # Setup devstack boot
3f717002
 mkdir -p $DEST_DIR/ubuntu
3508a3a9
 if [ ! -d $PXEDIR ]; then
     mkdir -p $PXEDIR
c945bf8d
 fi
f2a343b0
 
 # Get image into place
 if [ ! -r $PXEDIR/stack-initrd.img ]; then
d7326d2e
     cd $TOP_DIR
f2a343b0
     $PROGDIR/build_ramdisk.sh $PXEDIR/stack-initrd.img
 fi
 if [ ! -r $PXEDIR/stack-initrd.gz ]; then
     gzip -1 -c $PXEDIR/stack-initrd.img >$PXEDIR/stack-initrd.gz
 fi
 cp -pu $PXEDIR/stack-initrd.gz $DEST_DIR/ubuntu
 
 if [ ! -r $PXEDIR/vmlinuz-*-generic ]; then
     MNTDIR=`mktemp -d --tmpdir mntXXXXXXXX`
     mount -t ext4 -o loop $PXEDIR/stack-initrd.img $MNTDIR
 
     if [ ! -r $MNTDIR/boot/vmlinuz-*-generic ]; then
c945bf8d
         echo "No kernel found"
f2a343b0
         umount $MNTDIR
         rmdir $MNTDIR
         exit 1
c945bf8d
     else
f2a343b0
         cp -pu $MNTDIR/boot/vmlinuz-*-generic $PXEDIR
c945bf8d
     fi
f2a343b0
     umount $MNTDIR
     rmdir $MNTDIR
c945bf8d
 fi
f2a343b0
 
 # Get generic kernel version
 KNAME=`basename $PXEDIR/vmlinuz-*-generic`
 KVER=${KNAME#vmlinuz-}
 cp -pu $PXEDIR/vmlinuz-$KVER $DEST_DIR/ubuntu
dd6636be
 cat >>$CFG <<EOF
c945bf8d
 
 LABEL devstack
     MENU LABEL ^devstack
     MENU DEFAULT
958fa3de
     KERNEL ubuntu/vmlinuz-$KVER
c945bf8d
     APPEND initrd=ubuntu/stack-initrd.gz ramdisk_size=2109600 root=/dev/ram0
 EOF
 
 # Get Ubuntu
dd6636be
 if [ -d $PXEDIR -a -r $PXEDIR/natty-base-initrd.gz ]; then
f2a343b0
     cp -pu $PXEDIR/natty-base-initrd.gz $DEST_DIR/ubuntu
dd6636be
     cat >>$CFG <<EOF
3f717002
 
 LABEL ubuntu
c945bf8d
     MENU LABEL ^Ubuntu Natty
958fa3de
     KERNEL ubuntu/vmlinuz-$KVER
c945bf8d
     APPEND initrd=ubuntu/natty-base-initrd.gz ramdisk_size=419600 root=/dev/ram0
3f717002
 EOF
1f80bfb3
 fi
 
 # Local disk boot
dd6636be
 cat >>$CFG <<EOF
1f80bfb3
 
 LABEL local
c945bf8d
     MENU LABEL ^Local disk
1f80bfb3
     LOCALBOOT 0
 EOF
d7326d2e
 
 trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT