blob: 332c8698a4245b628eb2ba7850604ed5d3d8b124 [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#
4# build_usb_boot.sh [-k kernel-version] destdev
5#
6# Assumes syslinux is installed
Dean Troyer274ec102011-10-11 20:32:07 -05007# Needs to run as root
8
9KVER=`uname -r`
10if [ "$1" = "-k" ]; then
11 KVER=$2
12 shift;shift
13fi
14
15DEST_DIR=${1:-/tmp/syslinux-boot}
16PXEDIR=${PXEDIR:-/var/cache/devstack/pxe}
17OPWD=`pwd`
18PROGDIR=`dirname $0`
19
20if [ -b $DEST_DIR ]; then
21 # We have a block device, install syslinux and mount it
22 DEST_DEV=$DEST_DIR
23 DEST_DIR=`mktemp -d mntXXXXXX`
Dean Troyerd642f862011-10-17 14:55:10 -050024 mount $DEST_DEV $DEST_DIR
25
26 if [ ! -d $DEST_DIR/syslinux ]; then
27 mkdir -p $DEST_DIR/syslinux
28 fi
Dean Troyer274ec102011-10-11 20:32:07 -050029
30 # Install syslinux on the device
31 syslinux --install --directory syslinux $DEST_DEV
Dean Troyer274ec102011-10-11 20:32:07 -050032else
33 # We have a directory (for sanity checking output)
Dean Troyerd642f862011-10-17 14:55:10 -050034 DEST_DEV=""
35 if [ ! -d $DEST_DIR/syslinux ]; then
36 mkdir -p $DEST_DIR/syslinux
37 fi
Dean Troyer274ec102011-10-11 20:32:07 -050038fi
39
40# Get some more stuff from syslinux
41for i in memdisk menu.c32; do
Dean Troyerd642f862011-10-17 14:55:10 -050042 cp -p /usr/lib/syslinux/$i $DEST_DIR/syslinux
Dean Troyer274ec102011-10-11 20:32:07 -050043done
44
45CFG=$DEST_DIR/syslinux/syslinux.cfg
46cat >$CFG <<EOF
47default /syslinux/menu.c32
48prompt 0
49timeout 0
50
51MENU TITLE Boot Menu
52
53EOF
54
55# Setup devstack boot
56mkdir -p $DEST_DIR/ubuntu
57if [ ! -d $PXEDIR ]; then
58 mkdir -p $PXEDIR
59fi
60if [ ! -r $PXEDIR/vmlinuz-${KVER} ]; then
61 sudo chmod 644 /boot/vmlinuz-${KVER}
62 if [ ! -r /boot/vmlinuz-${KVER} ]; then
63 echo "No kernel found"
64 else
65 cp -p /boot/vmlinuz-${KVER} $PXEDIR
66 fi
67fi
68cp -p $PXEDIR/vmlinuz-${KVER} $DEST_DIR/ubuntu
69if [ ! -r $PXEDIR/stack-initrd.gz ]; then
70 cd $OPWD
71 sudo $PROGDIR/build_ramdisk.sh $PXEDIR/stack-initrd.gz
72fi
73cp -p $PXEDIR/stack-initrd.gz $DEST_DIR/ubuntu
74cat >>$CFG <<EOF
75
76LABEL devstack
77 MENU LABEL ^devstack
78 MENU DEFAULT
79 KERNEL /ubuntu/vmlinuz-$KVER
80 APPEND initrd=/ubuntu/stack-initrd.gz ramdisk_size=2109600 root=/dev/ram0
81EOF
82
83# Get Ubuntu
84if [ -d $PXEDIR -a -r $PXEDIR/natty-base-initrd.gz ]; then
85 cp -p $PXEDIR/natty-base-initrd.gz $DEST_DIR/ubuntu
86 cat >>$CFG <<EOF
87
88LABEL ubuntu
89 MENU LABEL ^Ubuntu Natty
90 KERNEL /ubuntu/vmlinuz-$KVER
91 APPEND initrd=/ubuntu/natty-base-initrd.gz ramdisk_size=419600 root=/dev/ram0
92EOF
93fi
94
95# Local disk boot
96cat >>$CFG <<EOF
97
98LABEL local
99 MENU LABEL ^Local disk
Dean Troyer274ec102011-10-11 20:32:07 -0500100 LOCALBOOT 0
101EOF
102
103if [ -n "$DEST_DEV" ]; then
104 umount $DEST_DIR
105 rmdir $DEST_DIR
106fi