blob: e6f98b4b7536bc92137624ce05e06459fa52d985 [file] [log] [blame]
Dean Troyera4b58772011-09-29 21:30:27 -05001#!/bin/bash -e
Dean Troyere62ba4d2012-06-27 22:07:34 -05002
3# **build_pxe_env.sh**
4
5# Create a PXE boot environment
Dean Troyer3f717002011-09-27 17:53:11 -05006#
Jesse Andrewsec74eef2011-11-11 13:51:55 -08007# build_pxe_env.sh destdir
Dean Troyer3f717002011-09-27 17:53:11 -05008#
Jesse Andrewsec74eef2011-11-11 13:51:55 -08009# Requires Ubuntu Oneiric
10#
Dean Troyer9b5ebb52011-09-28 14:14:33 -050011# Only needs to run as root if the destdir permissions require it
Dean Troyer3f717002011-09-27 17:53:11 -050012
Jesse Andrewsec74eef2011-11-11 13:51:55 -080013dpkg -l syslinux || apt-get install -y syslinux
14
Dean Troyer1f80bfb2011-09-27 22:19:32 -050015DEST_DIR=${1:-/tmp}/tftpboot
Jesse Andrewsd7326d22011-11-20 10:02:26 -080016PXEDIR=${PXEDIR:-/opt/ramstack/pxe}
Dean Troyerc945bf82011-09-29 16:15:23 -050017PROGDIR=`dirname $0`
Dean Troyer3f717002011-09-27 17:53:11 -050018
Dean Troyer55c02732011-11-01 17:44:03 -050019# Clean up any resources that may be in use
20cleanup() {
21 set +o errexit
22
23 # Mop up temporary files
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 Troyer1f80bfb2011-09-27 22:19:32 -050039mkdir -p $DEST_DIR/pxelinux.cfg
40cd $DEST_DIR
41for i in memdisk menu.c32 pxelinux.0; do
Dean Troyerf2a343b2011-10-26 16:05:28 -050042 cp -pu /usr/lib/syslinux/$i $DEST_DIR
Dean Troyer1f80bfb2011-09-27 22:19:32 -050043done
44
Dean Troyerdd6636b2011-10-11 20:28:39 -050045CFG=$DEST_DIR/pxelinux.cfg/default
46cat >$CFG <<EOF
Dean Troyer3f717002011-09-27 17:53:11 -050047default menu.c32
Dean Troyer3f717002011-09-27 17:53:11 -050048prompt 0
Dean Troyer9b5ebb52011-09-28 14:14:33 -050049timeout 0
Dean Troyer3f717002011-09-27 17:53:11 -050050
Jesse Andrewsd7326d22011-11-20 10:02:26 -080051MENU TITLE devstack PXE Boot Menu
Dean Troyer3f717002011-09-27 17:53:11 -050052
53EOF
54
Dean Troyerc945bf82011-09-29 16:15:23 -050055# Setup devstack boot
Dean Troyer3f717002011-09-27 17:53:11 -050056mkdir -p $DEST_DIR/ubuntu
Dean Troyer3508a3a2011-10-03 11:43:28 -050057if [ ! -d $PXEDIR ]; then
58 mkdir -p $PXEDIR
Dean Troyerc945bf82011-09-29 16:15:23 -050059fi
Dean Troyerf2a343b2011-10-26 16:05:28 -050060
61# Get image into place
62if [ ! -r $PXEDIR/stack-initrd.img ]; then
Jesse Andrewsd7326d22011-11-20 10:02:26 -080063 cd $TOP_DIR
Dean Troyerf2a343b2011-10-26 16:05:28 -050064 $PROGDIR/build_ramdisk.sh $PXEDIR/stack-initrd.img
Dean Troyerc945bf82011-09-29 16:15:23 -050065fi
Dean Troyerf2a343b2011-10-26 16:05:28 -050066if [ ! -r $PXEDIR/stack-initrd.gz ]; then
67 gzip -1 -c $PXEDIR/stack-initrd.img >$PXEDIR/stack-initrd.gz
68fi
69cp -pu $PXEDIR/stack-initrd.gz $DEST_DIR/ubuntu
70
71if [ ! -r $PXEDIR/vmlinuz-*-generic ]; then
72 MNTDIR=`mktemp -d --tmpdir mntXXXXXXXX`
73 mount -t ext4 -o loop $PXEDIR/stack-initrd.img $MNTDIR
74
75 if [ ! -r $MNTDIR/boot/vmlinuz-*-generic ]; then
76 echo "No kernel found"
77 umount $MNTDIR
78 rmdir $MNTDIR
79 exit 1
80 else
81 cp -pu $MNTDIR/boot/vmlinuz-*-generic $PXEDIR
82 fi
83 umount $MNTDIR
84 rmdir $MNTDIR
85fi
86
87# Get generic kernel version
88KNAME=`basename $PXEDIR/vmlinuz-*-generic`
89KVER=${KNAME#vmlinuz-}
90cp -pu $PXEDIR/vmlinuz-$KVER $DEST_DIR/ubuntu
Dean Troyerdd6636b2011-10-11 20:28:39 -050091cat >>$CFG <<EOF
Dean Troyerc945bf82011-09-29 16:15:23 -050092
93LABEL devstack
94 MENU LABEL ^devstack
95 MENU DEFAULT
Dean Troyer958fa3d2011-09-30 09:22:23 -050096 KERNEL ubuntu/vmlinuz-$KVER
Dean Troyerc945bf82011-09-29 16:15:23 -050097 APPEND initrd=ubuntu/stack-initrd.gz ramdisk_size=2109600 root=/dev/ram0
98EOF
99
100# Get Ubuntu
Dean Troyerdd6636b2011-10-11 20:28:39 -0500101if [ -d $PXEDIR -a -r $PXEDIR/natty-base-initrd.gz ]; then
Dean Troyerf2a343b2011-10-26 16:05:28 -0500102 cp -pu $PXEDIR/natty-base-initrd.gz $DEST_DIR/ubuntu
Dean Troyerdd6636b2011-10-11 20:28:39 -0500103 cat >>$CFG <<EOF
Dean Troyer3f717002011-09-27 17:53:11 -0500104
105LABEL ubuntu
Dean Troyerc945bf82011-09-29 16:15:23 -0500106 MENU LABEL ^Ubuntu Natty
Dean Troyer958fa3d2011-09-30 09:22:23 -0500107 KERNEL ubuntu/vmlinuz-$KVER
Dean Troyerc945bf82011-09-29 16:15:23 -0500108 APPEND initrd=ubuntu/natty-base-initrd.gz ramdisk_size=419600 root=/dev/ram0
Dean Troyer3f717002011-09-27 17:53:11 -0500109EOF
Dean Troyer1f80bfb2011-09-27 22:19:32 -0500110fi
Dean Troyer1f80bfb2011-09-27 22:19:32 -0500111
112# Local disk boot
Dean Troyerdd6636b2011-10-11 20:28:39 -0500113cat >>$CFG <<EOF
Dean Troyer1f80bfb2011-09-27 22:19:32 -0500114
115LABEL local
Dean Troyerc945bf82011-09-29 16:15:23 -0500116 MENU LABEL ^Local disk
Dean Troyer1f80bfb2011-09-27 22:19:32 -0500117 LOCALBOOT 0
118EOF
Jesse Andrewsd7326d22011-11-20 10:02:26 -0800119
120trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT