blob: 1ab51f89549321281efdb9246e154b9694e5a32d [file] [log] [blame]
Dean Troyera4b58772011-09-29 21:30:27 -05001#!/bin/bash -e
Jesse Andrewsec74eef2011-11-11 13:51:55 -08002# build_pxe_env.sh - Create a PXE boot environment
Dean Troyer3f717002011-09-27 17:53:11 -05003#
Jesse Andrewsec74eef2011-11-11 13:51:55 -08004# build_pxe_env.sh destdir
Dean Troyer3f717002011-09-27 17:53:11 -05005#
Jesse Andrewsec74eef2011-11-11 13:51:55 -08006# Requires Ubuntu Oneiric
7#
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
Jesse Andrewsec74eef2011-11-11 13:51:55 -080010dpkg -l syslinux || apt-get install -y syslinux
11
Dean Troyer1f80bfb2011-09-27 22:19:32 -050012DEST_DIR=${1:-/tmp}/tftpboot
Dean Troyerd4a3bac2011-10-03 21:16:27 -050013PXEDIR=${PXEDIR:-/var/cache/devstack/pxe}
Dean Troyer3f717002011-09-27 17:53:11 -050014OPWD=`pwd`
Dean Troyerc945bf82011-09-29 16:15:23 -050015PROGDIR=`dirname $0`
Dean Troyer3f717002011-09-27 17:53:11 -050016
Dean Troyer55c02732011-11-01 17:44:03 -050017# Clean up any resources that may be in use
18cleanup() {
19 set +o errexit
20
21 # Mop up temporary files
22 if [ -n "$MNTDIR" -a -d "$MNTDIR" ]; then
23 umount $MNTDIR
24 rmdir $MNTDIR
25 fi
26
27 # Kill ourselves to signal any calling process
28 trap 2; kill -2 $$
29}
30
31trap cleanup SIGHUP SIGINT SIGTERM
32
Dean Troyer1f80bfb2011-09-27 22:19:32 -050033mkdir -p $DEST_DIR/pxelinux.cfg
34cd $DEST_DIR
35for i in memdisk menu.c32 pxelinux.0; do
Dean Troyerf2a343b2011-10-26 16:05:28 -050036 cp -pu /usr/lib/syslinux/$i $DEST_DIR
Dean Troyer1f80bfb2011-09-27 22:19:32 -050037done
38
Dean Troyerdd6636b2011-10-11 20:28:39 -050039CFG=$DEST_DIR/pxelinux.cfg/default
40cat >$CFG <<EOF
Dean Troyer3f717002011-09-27 17:53:11 -050041default menu.c32
Dean Troyer3f717002011-09-27 17:53:11 -050042prompt 0
Dean Troyer9b5ebb52011-09-28 14:14:33 -050043timeout 0
Dean Troyer3f717002011-09-27 17:53:11 -050044
45MENU TITLE PXE Boot Menu
46
47EOF
48
Dean Troyerc945bf82011-09-29 16:15:23 -050049# Setup devstack boot
Dean Troyer3f717002011-09-27 17:53:11 -050050mkdir -p $DEST_DIR/ubuntu
Dean Troyer3508a3a2011-10-03 11:43:28 -050051if [ ! -d $PXEDIR ]; then
52 mkdir -p $PXEDIR
Dean Troyerc945bf82011-09-29 16:15:23 -050053fi
Dean Troyerf2a343b2011-10-26 16:05:28 -050054
55# Get image into place
56if [ ! -r $PXEDIR/stack-initrd.img ]; then
Dean Troyerc0a67392011-10-03 16:31:36 -050057 cd $OPWD
Dean Troyerf2a343b2011-10-26 16:05:28 -050058 $PROGDIR/build_ramdisk.sh $PXEDIR/stack-initrd.img
Dean Troyerc945bf82011-09-29 16:15:23 -050059fi
Dean Troyerf2a343b2011-10-26 16:05:28 -050060if [ ! -r $PXEDIR/stack-initrd.gz ]; then
61 gzip -1 -c $PXEDIR/stack-initrd.img >$PXEDIR/stack-initrd.gz
62fi
63cp -pu $PXEDIR/stack-initrd.gz $DEST_DIR/ubuntu
64
65if [ ! -r $PXEDIR/vmlinuz-*-generic ]; then
66 MNTDIR=`mktemp -d --tmpdir mntXXXXXXXX`
67 mount -t ext4 -o loop $PXEDIR/stack-initrd.img $MNTDIR
68
69 if [ ! -r $MNTDIR/boot/vmlinuz-*-generic ]; then
70 echo "No kernel found"
71 umount $MNTDIR
72 rmdir $MNTDIR
73 exit 1
74 else
75 cp -pu $MNTDIR/boot/vmlinuz-*-generic $PXEDIR
76 fi
77 umount $MNTDIR
78 rmdir $MNTDIR
79fi
80
81# Get generic kernel version
82KNAME=`basename $PXEDIR/vmlinuz-*-generic`
83KVER=${KNAME#vmlinuz-}
84cp -pu $PXEDIR/vmlinuz-$KVER $DEST_DIR/ubuntu
Dean Troyerdd6636b2011-10-11 20:28:39 -050085cat >>$CFG <<EOF
Dean Troyerc945bf82011-09-29 16:15:23 -050086
87LABEL devstack
88 MENU LABEL ^devstack
89 MENU DEFAULT
Dean Troyer958fa3d2011-09-30 09:22:23 -050090 KERNEL ubuntu/vmlinuz-$KVER
Dean Troyerc945bf82011-09-29 16:15:23 -050091 APPEND initrd=ubuntu/stack-initrd.gz ramdisk_size=2109600 root=/dev/ram0
92EOF
93
94# Get Ubuntu
Dean Troyerdd6636b2011-10-11 20:28:39 -050095if [ -d $PXEDIR -a -r $PXEDIR/natty-base-initrd.gz ]; then
Dean Troyerf2a343b2011-10-26 16:05:28 -050096 cp -pu $PXEDIR/natty-base-initrd.gz $DEST_DIR/ubuntu
Dean Troyerdd6636b2011-10-11 20:28:39 -050097 cat >>$CFG <<EOF
Dean Troyer3f717002011-09-27 17:53:11 -050098
99LABEL ubuntu
Dean Troyerc945bf82011-09-29 16:15:23 -0500100 MENU LABEL ^Ubuntu Natty
Dean Troyer958fa3d2011-09-30 09:22:23 -0500101 KERNEL ubuntu/vmlinuz-$KVER
Dean Troyerc945bf82011-09-29 16:15:23 -0500102 APPEND initrd=ubuntu/natty-base-initrd.gz ramdisk_size=419600 root=/dev/ram0
Dean Troyer3f717002011-09-27 17:53:11 -0500103EOF
Dean Troyer1f80bfb2011-09-27 22:19:32 -0500104fi
Dean Troyer1f80bfb2011-09-27 22:19:32 -0500105
106# Local disk boot
Dean Troyerdd6636b2011-10-11 20:28:39 -0500107cat >>$CFG <<EOF
Dean Troyer1f80bfb2011-09-27 22:19:32 -0500108
109LABEL local
Dean Troyerc945bf82011-09-29 16:15:23 -0500110 MENU LABEL ^Local disk
Dean Troyer1f80bfb2011-09-27 22:19:32 -0500111 LOCALBOOT 0
112EOF