blob: f64b7b6866aa1bc9c99274c470b938034cb10a65 [file] [log] [blame]
Dean Troyer274ec102011-10-11 20:32:07 -05001#!/bin/bash -e
Dean Troyere62ba4d2012-06-27 22:07:34 -05002
3# **build_usb_boot.sh**
4
5# Create a syslinux boot environment
Dean Troyer274ec102011-10-11 20:32:07 -05006#
Dean Troyere33c5f62011-10-26 15:13:00 -05007# build_usb_boot.sh destdev
Dean Troyer274ec102011-10-11 20:32:07 -05008#
9# Assumes syslinux is installed
Dean Troyer274ec102011-10-11 20:32:07 -050010# Needs to run as root
11
Dean Troyer274ec102011-10-11 20:32:07 -050012DEST_DIR=${1:-/tmp/syslinux-boot}
Jesse Andrewsd7326d22011-11-20 10:02:26 -080013PXEDIR=${PXEDIR:-/opt/ramstack/pxe}
Dean Troyer274ec102011-10-11 20:32:07 -050014PROGDIR=`dirname $0`
15
Dean Troyer55c02732011-11-01 17:44:03 -050016# Clean up any resources that may be in use
17cleanup() {
18 set +o errexit
19
20 # Mop up temporary files
21 if [ -n "$DEST_DEV" ]; then
22 umount $DEST_DIR
23 rmdir $DEST_DIR
24 fi
25 if [ -n "$MNTDIR" -a -d "$MNTDIR" ]; then
26 umount $MNTDIR
27 rmdir $MNTDIR
28 fi
29
30 # Kill ourselves to signal any calling process
31 trap 2; kill -2 $$
32}
33
Jesse Andrewsd7326d22011-11-20 10:02:26 -080034trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT
35
36# Keep track of the current directory
37TOOLS_DIR=$(cd $(dirname "$0") && pwd)
38TOP_DIR=`cd $TOOLS_DIR/..; pwd`
Dean Troyer55c02732011-11-01 17:44:03 -050039
Dean Troyer274ec102011-10-11 20:32:07 -050040if [ -b $DEST_DIR ]; then
41 # We have a block device, install syslinux and mount it
42 DEST_DEV=$DEST_DIR
Dean Troyere33c5f62011-10-26 15:13:00 -050043 DEST_DIR=`mktemp -d --tmpdir mntXXXXXX`
Dean Troyerd642f862011-10-17 14:55:10 -050044 mount $DEST_DEV $DEST_DIR
45
46 if [ ! -d $DEST_DIR/syslinux ]; then
47 mkdir -p $DEST_DIR/syslinux
48 fi
Dean Troyer274ec102011-10-11 20:32:07 -050049
50 # Install syslinux on the device
51 syslinux --install --directory syslinux $DEST_DEV
Dean Troyer274ec102011-10-11 20:32:07 -050052else
53 # We have a directory (for sanity checking output)
Dean Troyerd642f862011-10-17 14:55:10 -050054 DEST_DEV=""
55 if [ ! -d $DEST_DIR/syslinux ]; then
56 mkdir -p $DEST_DIR/syslinux
57 fi
Dean Troyer274ec102011-10-11 20:32:07 -050058fi
59
60# Get some more stuff from syslinux
61for i in memdisk menu.c32; do
Dean Troyera0cf3c82011-10-26 15:52:34 -050062 cp -pu /usr/lib/syslinux/$i $DEST_DIR/syslinux
Dean Troyer274ec102011-10-11 20:32:07 -050063done
64
65CFG=$DEST_DIR/syslinux/syslinux.cfg
66cat >$CFG <<EOF
67default /syslinux/menu.c32
68prompt 0
69timeout 0
70
Jesse Andrewsd7326d22011-11-20 10:02:26 -080071MENU TITLE devstack Boot Menu
Dean Troyer274ec102011-10-11 20:32:07 -050072
73EOF
74
75# Setup devstack boot
76mkdir -p $DEST_DIR/ubuntu
77if [ ! -d $PXEDIR ]; then
78 mkdir -p $PXEDIR
79fi
Dean Troyere33c5f62011-10-26 15:13:00 -050080
81# Get image into place
82if [ ! -r $PXEDIR/stack-initrd.img ]; then
Jesse Andrewsd7326d22011-11-20 10:02:26 -080083 cd $TOP_DIR
84 $PROGDIR/build_uec_ramdisk.sh $PXEDIR/stack-initrd.img
Dean Troyer274ec102011-10-11 20:32:07 -050085fi
Dean Troyere33c5f62011-10-26 15:13:00 -050086if [ ! -r $PXEDIR/stack-initrd.gz ]; then
87 gzip -1 -c $PXEDIR/stack-initrd.img >$PXEDIR/stack-initrd.gz
88fi
Dean Troyera0cf3c82011-10-26 15:52:34 -050089cp -pu $PXEDIR/stack-initrd.gz $DEST_DIR/ubuntu
Dean Troyere33c5f62011-10-26 15:13:00 -050090
91if [ ! -r $PXEDIR/vmlinuz-*-generic ]; then
92 MNTDIR=`mktemp -d --tmpdir mntXXXXXXXX`
93 mount -t ext4 -o loop $PXEDIR/stack-initrd.img $MNTDIR
94
95 if [ ! -r $MNTDIR/boot/vmlinuz-*-generic ]; then
96 echo "No kernel found"
97 umount $MNTDIR
98 rmdir $MNTDIR
99 if [ -n "$DEST_DEV" ]; then
100 umount $DEST_DIR
101 rmdir $DEST_DIR
102 fi
103 exit 1
104 else
Dean Troyera0cf3c82011-10-26 15:52:34 -0500105 cp -pu $MNTDIR/boot/vmlinuz-*-generic $PXEDIR
Dean Troyere33c5f62011-10-26 15:13:00 -0500106 fi
107 umount $MNTDIR
108 rmdir $MNTDIR
109fi
110
111# Get generic kernel version
112KNAME=`basename $PXEDIR/vmlinuz-*-generic`
113KVER=${KNAME#vmlinuz-}
Dean Troyera0cf3c82011-10-26 15:52:34 -0500114cp -pu $PXEDIR/vmlinuz-$KVER $DEST_DIR/ubuntu
Dean Troyer274ec102011-10-11 20:32:07 -0500115cat >>$CFG <<EOF
116
117LABEL devstack
118 MENU LABEL ^devstack
119 MENU DEFAULT
120 KERNEL /ubuntu/vmlinuz-$KVER
121 APPEND initrd=/ubuntu/stack-initrd.gz ramdisk_size=2109600 root=/dev/ram0
122EOF
123
124# Get Ubuntu
125if [ -d $PXEDIR -a -r $PXEDIR/natty-base-initrd.gz ]; then
Dean Troyera0cf3c82011-10-26 15:52:34 -0500126 cp -pu $PXEDIR/natty-base-initrd.gz $DEST_DIR/ubuntu
Dean Troyer274ec102011-10-11 20:32:07 -0500127 cat >>$CFG <<EOF
128
129LABEL ubuntu
130 MENU LABEL ^Ubuntu Natty
131 KERNEL /ubuntu/vmlinuz-$KVER
132 APPEND initrd=/ubuntu/natty-base-initrd.gz ramdisk_size=419600 root=/dev/ram0
133EOF
134fi
135
136# Local disk boot
137cat >>$CFG <<EOF
138
139LABEL local
140 MENU LABEL ^Local disk
Dean Troyer274ec102011-10-11 20:32:07 -0500141 LOCALBOOT 0
142EOF
143
144if [ -n "$DEST_DEV" ]; then
145 umount $DEST_DIR
146 rmdir $DEST_DIR
147fi
Jesse Andrewsd7326d22011-11-20 10:02:26 -0800148
149trap - SIGHUP SIGINT SIGTERM SIGQUIT EXIT