tools/build_usb_boot.sh
274ec102
 #!/bin/bash -e
e62ba4d3
 
 # **build_usb_boot.sh**
 
 # Create a syslinux boot environment
274ec102
 #
e33c5f63
 # build_usb_boot.sh destdev
274ec102
 #
 # Assumes syslinux is installed
 # Needs to run as root
 
 DEST_DIR=${1:-/tmp/syslinux-boot}
d7326d2e
 PXEDIR=${PXEDIR:-/opt/ramstack/pxe}
274ec102
 
55c02737
 # Clean up any resources that may be in use
 cleanup() {
     set +o errexit
 
     # Mop up temporary files
     if [ -n "$DEST_DEV" ]; then
         umount $DEST_DIR
         rmdir $DEST_DIR
     fi
     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
 
274ec102
 if [ -b $DEST_DIR ]; then
     # We have a block device, install syslinux and mount it
     DEST_DEV=$DEST_DIR
e33c5f63
     DEST_DIR=`mktemp -d --tmpdir mntXXXXXX`
d642f861
     mount $DEST_DEV $DEST_DIR
 
     if [ ! -d $DEST_DIR/syslinux ]; then
         mkdir -p $DEST_DIR/syslinux
     fi
274ec102
 
     # Install syslinux on the device
     syslinux --install --directory syslinux $DEST_DEV
 else
     # We have a directory (for sanity checking output)
d642f861
     DEST_DEV=""
     if [ ! -d $DEST_DIR/syslinux ]; then
         mkdir -p $DEST_DIR/syslinux
     fi
274ec102
 fi
 
 # Get some more stuff from syslinux
 for i in memdisk menu.c32; do
a0cf3c82
     cp -pu /usr/lib/syslinux/$i $DEST_DIR/syslinux
274ec102
 done
 
 CFG=$DEST_DIR/syslinux/syslinux.cfg
 cat >$CFG <<EOF
 default /syslinux/menu.c32
 prompt 0
 timeout 0
 
d7326d2e
 MENU TITLE devstack Boot Menu
274ec102
 
 EOF
 
 # Setup devstack boot
 mkdir -p $DEST_DIR/ubuntu
 if [ ! -d $PXEDIR ]; then
     mkdir -p $PXEDIR
 fi
e33c5f63
 
 # Get image into place
 if [ ! -r $PXEDIR/stack-initrd.img ]; then
d7326d2e
     cd $TOP_DIR
3edca549
     $TOOLS_DIR/build_uec_ramdisk.sh $PXEDIR/stack-initrd.img
e33c5f63
 fi
 if [ ! -r $PXEDIR/stack-initrd.gz ]; then
     gzip -1 -c $PXEDIR/stack-initrd.img >$PXEDIR/stack-initrd.gz
 fi
a0cf3c82
 cp -pu $PXEDIR/stack-initrd.gz $DEST_DIR/ubuntu
e33c5f63
 
 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
274ec102
         echo "No kernel found"
e33c5f63
         umount $MNTDIR
         rmdir $MNTDIR
         if [ -n "$DEST_DEV" ]; then
             umount $DEST_DIR
             rmdir $DEST_DIR
         fi
         exit 1
274ec102
     else
a0cf3c82
         cp -pu $MNTDIR/boot/vmlinuz-*-generic $PXEDIR
274ec102
     fi
e33c5f63
     umount $MNTDIR
     rmdir $MNTDIR
274ec102
 fi
e33c5f63
 
 # Get generic kernel version
 KNAME=`basename $PXEDIR/vmlinuz-*-generic`
 KVER=${KNAME#vmlinuz-}
a0cf3c82
 cp -pu $PXEDIR/vmlinuz-$KVER $DEST_DIR/ubuntu
274ec102
 cat >>$CFG <<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 -a -r $PXEDIR/natty-base-initrd.gz ]; then
a0cf3c82
     cp -pu $PXEDIR/natty-base-initrd.gz $DEST_DIR/ubuntu
274ec102
     cat >>$CFG <<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
 fi
 
 # Local disk boot
 cat >>$CFG <<EOF
 
 LABEL local
     MENU LABEL ^Local disk
     LOCALBOOT 0
 EOF
 
 if [ -n "$DEST_DEV" ]; then
     umount $DEST_DIR
     rmdir $DEST_DIR
 fi
d7326d2e
 
 trap - SIGHUP SIGINT SIGTERM SIGQUIT EXIT