blob: 856622983376ecf460b0d7b5790e8a3e8c672798 [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 -050014
Dean Troyer55c02732011-11-01 17:44:03 -050015# Clean up any resources that may be in use
16cleanup() {
17 set +o errexit
18
19 # Mop up temporary files
20 if [ -n "$DEST_DEV" ]; then
21 umount $DEST_DIR
22 rmdir $DEST_DIR
23 fi
24 if [ -n "$MNTDIR" -a -d "$MNTDIR" ]; then
25 umount $MNTDIR
26 rmdir $MNTDIR
27 fi
28
29 # Kill ourselves to signal any calling process
30 trap 2; kill -2 $$
31}
32
Jesse Andrewsd7326d22011-11-20 10:02:26 -080033trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT
34
35# Keep track of the current directory
36TOOLS_DIR=$(cd $(dirname "$0") && pwd)
37TOP_DIR=`cd $TOOLS_DIR/..; pwd`
Dean Troyer55c02732011-11-01 17:44:03 -050038
Dean Troyer274ec102011-10-11 20:32:07 -050039if [ -b $DEST_DIR ]; then
40 # We have a block device, install syslinux and mount it
41 DEST_DEV=$DEST_DIR
Dean Troyere33c5f62011-10-26 15:13:00 -050042 DEST_DIR=`mktemp -d --tmpdir mntXXXXXX`
Dean Troyerd642f862011-10-17 14:55:10 -050043 mount $DEST_DEV $DEST_DIR
44
45 if [ ! -d $DEST_DIR/syslinux ]; then
46 mkdir -p $DEST_DIR/syslinux
47 fi
Dean Troyer274ec102011-10-11 20:32:07 -050048
49 # Install syslinux on the device
50 syslinux --install --directory syslinux $DEST_DEV
Dean Troyer274ec102011-10-11 20:32:07 -050051else
52 # We have a directory (for sanity checking output)
Dean Troyerd642f862011-10-17 14:55:10 -050053 DEST_DEV=""
54 if [ ! -d $DEST_DIR/syslinux ]; then
55 mkdir -p $DEST_DIR/syslinux
56 fi
Dean Troyer274ec102011-10-11 20:32:07 -050057fi
58
59# Get some more stuff from syslinux
60for i in memdisk menu.c32; do
Dean Troyera0cf3c82011-10-26 15:52:34 -050061 cp -pu /usr/lib/syslinux/$i $DEST_DIR/syslinux
Dean Troyer274ec102011-10-11 20:32:07 -050062done
63
64CFG=$DEST_DIR/syslinux/syslinux.cfg
65cat >$CFG <<EOF
66default /syslinux/menu.c32
67prompt 0
68timeout 0
69
Jesse Andrewsd7326d22011-11-20 10:02:26 -080070MENU TITLE devstack Boot Menu
Dean Troyer274ec102011-10-11 20:32:07 -050071
72EOF
73
74# Setup devstack boot
75mkdir -p $DEST_DIR/ubuntu
76if [ ! -d $PXEDIR ]; then
77 mkdir -p $PXEDIR
78fi
Dean Troyere33c5f62011-10-26 15:13:00 -050079
80# Get image into place
81if [ ! -r $PXEDIR/stack-initrd.img ]; then
Jesse Andrewsd7326d22011-11-20 10:02:26 -080082 cd $TOP_DIR
Dmitriy Budnik3edca542012-11-06 09:58:24 +020083 $TOOLS_DIR/build_uec_ramdisk.sh $PXEDIR/stack-initrd.img
Dean Troyer274ec102011-10-11 20:32:07 -050084fi
Dean Troyere33c5f62011-10-26 15:13:00 -050085if [ ! -r $PXEDIR/stack-initrd.gz ]; then
86 gzip -1 -c $PXEDIR/stack-initrd.img >$PXEDIR/stack-initrd.gz
87fi
Dean Troyera0cf3c82011-10-26 15:52:34 -050088cp -pu $PXEDIR/stack-initrd.gz $DEST_DIR/ubuntu
Dean Troyere33c5f62011-10-26 15:13:00 -050089
90if [ ! -r $PXEDIR/vmlinuz-*-generic ]; then
91 MNTDIR=`mktemp -d --tmpdir mntXXXXXXXX`
92 mount -t ext4 -o loop $PXEDIR/stack-initrd.img $MNTDIR
93
94 if [ ! -r $MNTDIR/boot/vmlinuz-*-generic ]; then
95 echo "No kernel found"
96 umount $MNTDIR
97 rmdir $MNTDIR
98 if [ -n "$DEST_DEV" ]; then
99 umount $DEST_DIR
100 rmdir $DEST_DIR
101 fi
102 exit 1
103 else
Dean Troyera0cf3c82011-10-26 15:52:34 -0500104 cp -pu $MNTDIR/boot/vmlinuz-*-generic $PXEDIR
Dean Troyere33c5f62011-10-26 15:13:00 -0500105 fi
106 umount $MNTDIR
107 rmdir $MNTDIR
108fi
109
110# Get generic kernel version
111KNAME=`basename $PXEDIR/vmlinuz-*-generic`
112KVER=${KNAME#vmlinuz-}
Dean Troyera0cf3c82011-10-26 15:52:34 -0500113cp -pu $PXEDIR/vmlinuz-$KVER $DEST_DIR/ubuntu
Dean Troyer274ec102011-10-11 20:32:07 -0500114cat >>$CFG <<EOF
115
116LABEL devstack
117 MENU LABEL ^devstack
118 MENU DEFAULT
119 KERNEL /ubuntu/vmlinuz-$KVER
120 APPEND initrd=/ubuntu/stack-initrd.gz ramdisk_size=2109600 root=/dev/ram0
121EOF
122
123# Get Ubuntu
124if [ -d $PXEDIR -a -r $PXEDIR/natty-base-initrd.gz ]; then
Dean Troyera0cf3c82011-10-26 15:52:34 -0500125 cp -pu $PXEDIR/natty-base-initrd.gz $DEST_DIR/ubuntu
Dean Troyer274ec102011-10-11 20:32:07 -0500126 cat >>$CFG <<EOF
127
128LABEL ubuntu
129 MENU LABEL ^Ubuntu Natty
130 KERNEL /ubuntu/vmlinuz-$KVER
131 APPEND initrd=/ubuntu/natty-base-initrd.gz ramdisk_size=419600 root=/dev/ram0
132EOF
133fi
134
135# Local disk boot
136cat >>$CFG <<EOF
137
138LABEL local
139 MENU LABEL ^Local disk
Dean Troyer274ec102011-10-11 20:32:07 -0500140 LOCALBOOT 0
141EOF
142
143if [ -n "$DEST_DEV" ]; then
144 umount $DEST_DIR
145 rmdir $DEST_DIR
146fi
Jesse Andrewsd7326d22011-11-20 10:02:26 -0800147
148trap - SIGHUP SIGINT SIGTERM SIGQUIT EXIT