blob: ab6409831a0ded0d469757a81cf93289f46c6442 [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 Troyerf2a343b2011-10-26 16:05:28 -05004# build_pxe_boot.sh destdir
Dean Troyer3f717002011-09-27 17:53:11 -05005#
6# Assumes syslinux is installed
Dean Troyer9b5ebb52011-09-28 14:14:33 -05007# Only needs to run as root if the destdir permissions require it
Dean Troyer3f717002011-09-27 17:53:11 -05008
Dean Troyer1f80bfb2011-09-27 22:19:32 -05009DEST_DIR=${1:-/tmp}/tftpboot
Dean Troyerd4a3bac2011-10-03 21:16:27 -050010PXEDIR=${PXEDIR:-/var/cache/devstack/pxe}
Dean Troyer3f717002011-09-27 17:53:11 -050011OPWD=`pwd`
Dean Troyerc945bf82011-09-29 16:15:23 -050012PROGDIR=`dirname $0`
Dean Troyer3f717002011-09-27 17:53:11 -050013
Dean Troyer55c02732011-11-01 17:44:03 -050014# Clean up any resources that may be in use
15cleanup() {
16 set +o errexit
17
18 # Mop up temporary files
19 if [ -n "$MNTDIR" -a -d "$MNTDIR" ]; then
20 umount $MNTDIR
21 rmdir $MNTDIR
22 fi
23
24 # Kill ourselves to signal any calling process
25 trap 2; kill -2 $$
26}
27
28trap cleanup SIGHUP SIGINT SIGTERM
29
Dean Troyer1f80bfb2011-09-27 22:19:32 -050030mkdir -p $DEST_DIR/pxelinux.cfg
31cd $DEST_DIR
32for i in memdisk menu.c32 pxelinux.0; do
Dean Troyerf2a343b2011-10-26 16:05:28 -050033 cp -pu /usr/lib/syslinux/$i $DEST_DIR
Dean Troyer1f80bfb2011-09-27 22:19:32 -050034done
35
Dean Troyerdd6636b2011-10-11 20:28:39 -050036CFG=$DEST_DIR/pxelinux.cfg/default
37cat >$CFG <<EOF
Dean Troyer3f717002011-09-27 17:53:11 -050038default menu.c32
Dean Troyer3f717002011-09-27 17:53:11 -050039prompt 0
Dean Troyer9b5ebb52011-09-28 14:14:33 -050040timeout 0
Dean Troyer3f717002011-09-27 17:53:11 -050041
42MENU TITLE PXE Boot Menu
43
44EOF
45
Dean Troyerc945bf82011-09-29 16:15:23 -050046# Setup devstack boot
Dean Troyer3f717002011-09-27 17:53:11 -050047mkdir -p $DEST_DIR/ubuntu
Dean Troyer3508a3a2011-10-03 11:43:28 -050048if [ ! -d $PXEDIR ]; then
49 mkdir -p $PXEDIR
Dean Troyerc945bf82011-09-29 16:15:23 -050050fi
Dean Troyerf2a343b2011-10-26 16:05:28 -050051
52# Get image into place
53if [ ! -r $PXEDIR/stack-initrd.img ]; then
Dean Troyerc0a67392011-10-03 16:31:36 -050054 cd $OPWD
Dean Troyerf2a343b2011-10-26 16:05:28 -050055 $PROGDIR/build_ramdisk.sh $PXEDIR/stack-initrd.img
Dean Troyerc945bf82011-09-29 16:15:23 -050056fi
Dean Troyerf2a343b2011-10-26 16:05:28 -050057if [ ! -r $PXEDIR/stack-initrd.gz ]; then
58 gzip -1 -c $PXEDIR/stack-initrd.img >$PXEDIR/stack-initrd.gz
59fi
60cp -pu $PXEDIR/stack-initrd.gz $DEST_DIR/ubuntu
61
62if [ ! -r $PXEDIR/vmlinuz-*-generic ]; then
63 MNTDIR=`mktemp -d --tmpdir mntXXXXXXXX`
64 mount -t ext4 -o loop $PXEDIR/stack-initrd.img $MNTDIR
65
66 if [ ! -r $MNTDIR/boot/vmlinuz-*-generic ]; then
67 echo "No kernel found"
68 umount $MNTDIR
69 rmdir $MNTDIR
70 exit 1
71 else
72 cp -pu $MNTDIR/boot/vmlinuz-*-generic $PXEDIR
73 fi
74 umount $MNTDIR
75 rmdir $MNTDIR
76fi
77
78# Get generic kernel version
79KNAME=`basename $PXEDIR/vmlinuz-*-generic`
80KVER=${KNAME#vmlinuz-}
81cp -pu $PXEDIR/vmlinuz-$KVER $DEST_DIR/ubuntu
Dean Troyerdd6636b2011-10-11 20:28:39 -050082cat >>$CFG <<EOF
Dean Troyerc945bf82011-09-29 16:15:23 -050083
84LABEL devstack
85 MENU LABEL ^devstack
86 MENU DEFAULT
Dean Troyer958fa3d2011-09-30 09:22:23 -050087 KERNEL ubuntu/vmlinuz-$KVER
Dean Troyerc945bf82011-09-29 16:15:23 -050088 APPEND initrd=ubuntu/stack-initrd.gz ramdisk_size=2109600 root=/dev/ram0
89EOF
90
91# Get Ubuntu
Dean Troyerdd6636b2011-10-11 20:28:39 -050092if [ -d $PXEDIR -a -r $PXEDIR/natty-base-initrd.gz ]; then
Dean Troyerf2a343b2011-10-26 16:05:28 -050093 cp -pu $PXEDIR/natty-base-initrd.gz $DEST_DIR/ubuntu
Dean Troyerdd6636b2011-10-11 20:28:39 -050094 cat >>$CFG <<EOF
Dean Troyer3f717002011-09-27 17:53:11 -050095
96LABEL ubuntu
Dean Troyerc945bf82011-09-29 16:15:23 -050097 MENU LABEL ^Ubuntu Natty
Dean Troyer958fa3d2011-09-30 09:22:23 -050098 KERNEL ubuntu/vmlinuz-$KVER
Dean Troyerc945bf82011-09-29 16:15:23 -050099 APPEND initrd=ubuntu/natty-base-initrd.gz ramdisk_size=419600 root=/dev/ram0
Dean Troyer3f717002011-09-27 17:53:11 -0500100EOF
Dean Troyer1f80bfb2011-09-27 22:19:32 -0500101fi
Dean Troyer1f80bfb2011-09-27 22:19:32 -0500102
103# Local disk boot
Dean Troyerdd6636b2011-10-11 20:28:39 -0500104cat >>$CFG <<EOF
Dean Troyer1f80bfb2011-09-27 22:19:32 -0500105
106LABEL local
Dean Troyerc945bf82011-09-29 16:15:23 -0500107 MENU LABEL ^Local disk
Dean Troyer1f80bfb2011-09-27 22:19:32 -0500108 LOCALBOOT 0
109EOF