blob: cca2a681d64dd92449257feb3bb7e2327161bb91 [file] [log] [blame]
Dean Troyer274ec102011-10-11 20:32:07 -05001#!/bin/bash -e
2# build_usb_boot.sh - Create a syslinux boot environment
3#
Dean Troyere33c5f62011-10-26 15:13:00 -05004# build_usb_boot.sh destdev
Dean Troyer274ec102011-10-11 20:32:07 -05005#
6# Assumes syslinux is installed
Dean Troyer274ec102011-10-11 20:32:07 -05007# Needs to run as root
8
Dean Troyer274ec102011-10-11 20:32:07 -05009DEST_DIR=${1:-/tmp/syslinux-boot}
Jesse Andrewsd7326d22011-11-20 10:02:26 -080010PXEDIR=${PXEDIR:-/opt/ramstack/pxe}
Dean Troyer274ec102011-10-11 20:32:07 -050011PROGDIR=`dirname $0`
12
Dean Troyer55c02732011-11-01 17:44:03 -050013# Clean up any resources that may be in use
14cleanup() {
15 set +o errexit
16
17 # Mop up temporary files
18 if [ -n "$DEST_DEV" ]; then
19 umount $DEST_DIR
20 rmdir $DEST_DIR
21 fi
22 if [ -n "$MNTDIR" -a -d "$MNTDIR" ]; then
23 umount $MNTDIR
24 rmdir $MNTDIR
25 fi
26
27 # Kill ourselves to signal any calling process
28 trap 2; kill -2 $$
29}
30
Jesse Andrewsd7326d22011-11-20 10:02:26 -080031trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT
32
33# Keep track of the current directory
34TOOLS_DIR=$(cd $(dirname "$0") && pwd)
35TOP_DIR=`cd $TOOLS_DIR/..; pwd`
Dean Troyer55c02732011-11-01 17:44:03 -050036
Dean Troyer274ec102011-10-11 20:32:07 -050037if [ -b $DEST_DIR ]; then
38 # We have a block device, install syslinux and mount it
39 DEST_DEV=$DEST_DIR
Dean Troyere33c5f62011-10-26 15:13:00 -050040 DEST_DIR=`mktemp -d --tmpdir mntXXXXXX`
Dean Troyerd642f862011-10-17 14:55:10 -050041 mount $DEST_DEV $DEST_DIR
42
43 if [ ! -d $DEST_DIR/syslinux ]; then
44 mkdir -p $DEST_DIR/syslinux
45 fi
Dean Troyer274ec102011-10-11 20:32:07 -050046
47 # Install syslinux on the device
48 syslinux --install --directory syslinux $DEST_DEV
Dean Troyer274ec102011-10-11 20:32:07 -050049else
50 # We have a directory (for sanity checking output)
Dean Troyerd642f862011-10-17 14:55:10 -050051 DEST_DEV=""
52 if [ ! -d $DEST_DIR/syslinux ]; then
53 mkdir -p $DEST_DIR/syslinux
54 fi
Dean Troyer274ec102011-10-11 20:32:07 -050055fi
56
57# Get some more stuff from syslinux
58for i in memdisk menu.c32; do
Dean Troyera0cf3c82011-10-26 15:52:34 -050059 cp -pu /usr/lib/syslinux/$i $DEST_DIR/syslinux
Dean Troyer274ec102011-10-11 20:32:07 -050060done
61
62CFG=$DEST_DIR/syslinux/syslinux.cfg
63cat >$CFG <<EOF
64default /syslinux/menu.c32
65prompt 0
66timeout 0
67
Jesse Andrewsd7326d22011-11-20 10:02:26 -080068MENU TITLE devstack Boot Menu
Dean Troyer274ec102011-10-11 20:32:07 -050069
70EOF
71
72# Setup devstack boot
73mkdir -p $DEST_DIR/ubuntu
74if [ ! -d $PXEDIR ]; then
75 mkdir -p $PXEDIR
76fi
Dean Troyere33c5f62011-10-26 15:13:00 -050077
78# Get image into place
79if [ ! -r $PXEDIR/stack-initrd.img ]; then
Jesse Andrewsd7326d22011-11-20 10:02:26 -080080 cd $TOP_DIR
81 $PROGDIR/build_uec_ramdisk.sh $PXEDIR/stack-initrd.img
Dean Troyer274ec102011-10-11 20:32:07 -050082fi
Dean Troyere33c5f62011-10-26 15:13:00 -050083if [ ! -r $PXEDIR/stack-initrd.gz ]; then
84 gzip -1 -c $PXEDIR/stack-initrd.img >$PXEDIR/stack-initrd.gz
85fi
Dean Troyera0cf3c82011-10-26 15:52:34 -050086cp -pu $PXEDIR/stack-initrd.gz $DEST_DIR/ubuntu
Dean Troyere33c5f62011-10-26 15:13:00 -050087
88if [ ! -r $PXEDIR/vmlinuz-*-generic ]; then
89 MNTDIR=`mktemp -d --tmpdir mntXXXXXXXX`
90 mount -t ext4 -o loop $PXEDIR/stack-initrd.img $MNTDIR
91
92 if [ ! -r $MNTDIR/boot/vmlinuz-*-generic ]; then
93 echo "No kernel found"
94 umount $MNTDIR
95 rmdir $MNTDIR
96 if [ -n "$DEST_DEV" ]; then
97 umount $DEST_DIR
98 rmdir $DEST_DIR
99 fi
100 exit 1
101 else
Dean Troyera0cf3c82011-10-26 15:52:34 -0500102 cp -pu $MNTDIR/boot/vmlinuz-*-generic $PXEDIR
Dean Troyere33c5f62011-10-26 15:13:00 -0500103 fi
104 umount $MNTDIR
105 rmdir $MNTDIR
106fi
107
108# Get generic kernel version
109KNAME=`basename $PXEDIR/vmlinuz-*-generic`
110KVER=${KNAME#vmlinuz-}
Dean Troyera0cf3c82011-10-26 15:52:34 -0500111cp -pu $PXEDIR/vmlinuz-$KVER $DEST_DIR/ubuntu
Dean Troyer274ec102011-10-11 20:32:07 -0500112cat >>$CFG <<EOF
113
114LABEL devstack
115 MENU LABEL ^devstack
116 MENU DEFAULT
117 KERNEL /ubuntu/vmlinuz-$KVER
118 APPEND initrd=/ubuntu/stack-initrd.gz ramdisk_size=2109600 root=/dev/ram0
119EOF
120
121# Get Ubuntu
122if [ -d $PXEDIR -a -r $PXEDIR/natty-base-initrd.gz ]; then
Dean Troyera0cf3c82011-10-26 15:52:34 -0500123 cp -pu $PXEDIR/natty-base-initrd.gz $DEST_DIR/ubuntu
Dean Troyer274ec102011-10-11 20:32:07 -0500124 cat >>$CFG <<EOF
125
126LABEL ubuntu
127 MENU LABEL ^Ubuntu Natty
128 KERNEL /ubuntu/vmlinuz-$KVER
129 APPEND initrd=/ubuntu/natty-base-initrd.gz ramdisk_size=419600 root=/dev/ram0
130EOF
131fi
132
133# Local disk boot
134cat >>$CFG <<EOF
135
136LABEL local
137 MENU LABEL ^Local disk
Dean Troyer274ec102011-10-11 20:32:07 -0500138 LOCALBOOT 0
139EOF
140
141if [ -n "$DEST_DEV" ]; then
142 umount $DEST_DIR
143 rmdir $DEST_DIR
144fi
Jesse Andrewsd7326d22011-11-20 10:02:26 -0800145
146trap - SIGHUP SIGINT SIGTERM SIGQUIT EXIT