blob: 4feb14d2fcc6e1966a8d0a9f590df446aa160952 [file] [log] [blame]
Dean Troyera4b58772011-09-29 21:30:27 -05001#!/bin/bash -e
Dean Troyer9b5ebb52011-09-28 14:14:33 -05002# build_pxe_boot.sh - Create a PXE boot environment
Dean Troyer3f717002011-09-27 17:53:11 -05003#
Dean Troyerc945bf82011-09-29 16:15:23 -05004# build_pxe_boot.sh [-k kernel-version] destdir
Dean Troyer3f717002011-09-27 17:53:11 -05005#
6# Assumes syslinux is installed
Dean Troyerc945bf82011-09-29 16:15:23 -05007# Assumes devstack files are in `pwd`/pxe
Dean Troyer9b5ebb52011-09-28 14:14:33 -05008# Only needs to run as root if the destdir permissions require it
Dean Troyer3f717002011-09-27 17:53:11 -05009
10UBUNTU_MIRROR=http://archive.ubuntu.com/ubuntu/dists/natty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64
11
Dean Troyer1f80bfb2011-09-27 22:19:32 -050012MEMTEST_VER=4.10
13MEMTEST_BIN=memtest86+-${MEMTEST_VER}.bin
14MEMTEST_URL=http://www.memtest.org/download/${MEMTEST_VER}/
15
Dean Troyerc945bf82011-09-29 16:15:23 -050016KVER=`uname -r`
17if [ "$1" = "-k" ]; then
18 KVER=$2
19 shift;shift
20fi
21
Dean Troyer1f80bfb2011-09-27 22:19:32 -050022DEST_DIR=${1:-/tmp}/tftpboot
Dean Troyerd4a3bac2011-10-03 21:16:27 -050023PXEDIR=${PXEDIR:-/var/cache/devstack/pxe}
Dean Troyer3f717002011-09-27 17:53:11 -050024OPWD=`pwd`
Dean Troyerc945bf82011-09-29 16:15:23 -050025PROGDIR=`dirname $0`
Dean Troyer3f717002011-09-27 17:53:11 -050026
Dean Troyer1f80bfb2011-09-27 22:19:32 -050027mkdir -p $DEST_DIR/pxelinux.cfg
28cd $DEST_DIR
29for i in memdisk menu.c32 pxelinux.0; do
30 cp -p /usr/lib/syslinux/$i $DEST_DIR
31done
32
Dean Troyer3f717002011-09-27 17:53:11 -050033DEFAULT=$DEST_DIR/pxelinux.cfg/default
34cat >$DEFAULT <<EOF
35default menu.c32
Dean Troyer3f717002011-09-27 17:53:11 -050036prompt 0
Dean Troyer9b5ebb52011-09-28 14:14:33 -050037timeout 0
Dean Troyer3f717002011-09-27 17:53:11 -050038
39MENU TITLE PXE Boot Menu
40
41EOF
42
Dean Troyerc945bf82011-09-29 16:15:23 -050043# Setup devstack boot
Dean Troyer3f717002011-09-27 17:53:11 -050044mkdir -p $DEST_DIR/ubuntu
Dean Troyer3508a3a2011-10-03 11:43:28 -050045if [ ! -d $PXEDIR ]; then
46 mkdir -p $PXEDIR
Dean Troyerc945bf82011-09-29 16:15:23 -050047fi
Dean Troyer3508a3a2011-10-03 11:43:28 -050048if [ ! -r $PXEDIR/vmlinuz-${KVER} ]; then
Dean Troyer783cc772011-09-29 18:43:44 -050049 sudo chmod 644 /boot/vmlinuz-${KVER}
50 if [ ! -r /boot/vmlinuz-${KVER} ]; then
Dean Troyerc945bf82011-09-29 16:15:23 -050051 echo "No kernel found"
52 else
Dean Troyer3508a3a2011-10-03 11:43:28 -050053 cp -p /boot/vmlinuz-${KVER} $PXEDIR
Dean Troyerc945bf82011-09-29 16:15:23 -050054 fi
55fi
Dean Troyer3508a3a2011-10-03 11:43:28 -050056cp -p $PXEDIR/vmlinuz-${KVER} $DEST_DIR/ubuntu
57if [ ! -r $PXEDIR/stack-initrd.gz ]; then
Dean Troyerc0a67392011-10-03 16:31:36 -050058 cd $OPWD
Dean Troyer3508a3a2011-10-03 11:43:28 -050059 sudo $PROGDIR/build_pxe_ramdisk.sh $PXEDIR/stack-initrd.gz
Dean Troyerc945bf82011-09-29 16:15:23 -050060fi
Dean Troyer3508a3a2011-10-03 11:43:28 -050061cp -p $PXEDIR/stack-initrd.gz $DEST_DIR/ubuntu
Dean Troyerc945bf82011-09-29 16:15:23 -050062cat >>$DEFAULT <<EOF
63
64LABEL devstack
65 MENU LABEL ^devstack
66 MENU DEFAULT
Dean Troyer958fa3d2011-09-30 09:22:23 -050067 KERNEL ubuntu/vmlinuz-$KVER
Dean Troyerc945bf82011-09-29 16:15:23 -050068 APPEND initrd=ubuntu/stack-initrd.gz ramdisk_size=2109600 root=/dev/ram0
69EOF
70
71# Get Ubuntu
Dean Troyer3508a3a2011-10-03 11:43:28 -050072if [ -d $PXEDIR ]; then
73 cp -p $PXEDIR/natty-base-initrd.gz $DEST_DIR/ubuntu
Dean Troyerc945bf82011-09-29 16:15:23 -050074fi
Dean Troyer3f717002011-09-27 17:53:11 -050075cat >>$DEFAULT <<EOF
76
77LABEL ubuntu
Dean Troyerc945bf82011-09-29 16:15:23 -050078 MENU LABEL ^Ubuntu Natty
Dean Troyer958fa3d2011-09-30 09:22:23 -050079 KERNEL ubuntu/vmlinuz-$KVER
Dean Troyerc945bf82011-09-29 16:15:23 -050080 APPEND initrd=ubuntu/natty-base-initrd.gz ramdisk_size=419600 root=/dev/ram0
Dean Troyer3f717002011-09-27 17:53:11 -050081EOF
Dean Troyer3f717002011-09-27 17:53:11 -050082
Dean Troyer1f80bfb2011-09-27 22:19:32 -050083# Get Memtest
84cd $DEST_DIR
85if [ ! -r $MEMTEST_BIN ]; then
86 wget -N --quiet ${MEMTEST_URL}/${MEMTEST_BIN}.gz
87 gunzip $MEMTEST_BIN
88fi
89cat >>$DEFAULT <<EOF
90
91LABEL memtest
Dean Troyerc945bf82011-09-29 16:15:23 -050092 MENU LABEL ^Memtest86+
Dean Troyer1f80bfb2011-09-27 22:19:32 -050093 KERNEL $MEMTEST_BIN
94EOF
Dean Troyer1f80bfb2011-09-27 22:19:32 -050095
Dean Troyer3f717002011-09-27 17:53:11 -050096# Get FreeDOS
97mkdir -p $DEST_DIR/freedos
98cd $DEST_DIR/freedos
99wget -N --quiet http://www.fdos.org/bootdisks/autogen/FDSTD.288.gz
100gunzip -f FDSTD.288.gz
101cat >>$DEFAULT <<EOF
102
103LABEL freedos
104 MENU LABEL ^FreeDOS bootdisk
105 KERNEL memdisk
106 APPEND initrd=freedos/FDSTD.288
107EOF
Dean Troyer1f80bfb2011-09-27 22:19:32 -0500108
109# Local disk boot
110cat >>$DEFAULT <<EOF
111
112LABEL local
Dean Troyerc945bf82011-09-29 16:15:23 -0500113 MENU LABEL ^Local disk
Dean Troyer1f80bfb2011-09-27 22:19:32 -0500114 MENU DEFAULT
115 LOCALBOOT 0
116EOF