a4b58776 |
#!/bin/bash -e |
e62ba4d3 |
# **build_pxe_env.sh**
# Create a PXE boot environment |
3f717002 |
# |
ec74eef1 |
# build_pxe_env.sh destdir
#
# Requires Ubuntu Oneiric |
3f717002 |
# |
9b5ebb5a |
# Only needs to run as root if the destdir permissions require it |
3f717002 |
|
ec74eef1 |
dpkg -l syslinux || apt-get install -y syslinux
|
1f80bfb3 |
DEST_DIR=${1:-/tmp}/tftpboot |
d7326d2e |
PXEDIR=${PXEDIR:-/opt/ramstack/pxe} |
c945bf8d |
PROGDIR=`dirname $0` |
3f717002 |
|
55c02737 |
# Clean up any resources that may be in use
cleanup() {
set +o errexit
# Mop up temporary files
if [ -n "$MNTDIR" -a -d "$MNTDIR" ]; then
umount $MNTDIR
rmdir $MNTDIR
fi
# Kill ourselves to signal any calling process
trap 2; kill -2 $$
}
|
d7326d2e |
trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT
# Keep track of the current directory
TOOLS_DIR=$(cd $(dirname "$0") && pwd)
TOP_DIR=`cd $TOOLS_DIR/..; pwd` |
55c02737 |
|
1f80bfb3 |
mkdir -p $DEST_DIR/pxelinux.cfg
cd $DEST_DIR
for i in memdisk menu.c32 pxelinux.0; do |
f2a343b0 |
cp -pu /usr/lib/syslinux/$i $DEST_DIR |
1f80bfb3 |
done
|
dd6636be |
CFG=$DEST_DIR/pxelinux.cfg/default
cat >$CFG <<EOF |
3f717002 |
default menu.c32
prompt 0 |
9b5ebb5a |
timeout 0 |
3f717002 |
|
d7326d2e |
MENU TITLE devstack PXE Boot Menu |
3f717002 |
EOF
|
c945bf8d |
# Setup devstack boot |
3f717002 |
mkdir -p $DEST_DIR/ubuntu |
3508a3a9 |
if [ ! -d $PXEDIR ]; then
mkdir -p $PXEDIR |
c945bf8d |
fi |
f2a343b0 |
# Get image into place
if [ ! -r $PXEDIR/stack-initrd.img ]; then |
d7326d2e |
cd $TOP_DIR |
f2a343b0 |
$PROGDIR/build_ramdisk.sh $PXEDIR/stack-initrd.img
fi
if [ ! -r $PXEDIR/stack-initrd.gz ]; then
gzip -1 -c $PXEDIR/stack-initrd.img >$PXEDIR/stack-initrd.gz
fi
cp -pu $PXEDIR/stack-initrd.gz $DEST_DIR/ubuntu
if [ ! -r $PXEDIR/vmlinuz-*-generic ]; then
MNTDIR=`mktemp -d --tmpdir mntXXXXXXXX`
mount -t ext4 -o loop $PXEDIR/stack-initrd.img $MNTDIR
if [ ! -r $MNTDIR/boot/vmlinuz-*-generic ]; then |
c945bf8d |
echo "No kernel found" |
f2a343b0 |
umount $MNTDIR
rmdir $MNTDIR
exit 1 |
c945bf8d |
else |
f2a343b0 |
cp -pu $MNTDIR/boot/vmlinuz-*-generic $PXEDIR |
c945bf8d |
fi |
f2a343b0 |
umount $MNTDIR
rmdir $MNTDIR |
c945bf8d |
fi |
f2a343b0 |
# Get generic kernel version
KNAME=`basename $PXEDIR/vmlinuz-*-generic`
KVER=${KNAME#vmlinuz-}
cp -pu $PXEDIR/vmlinuz-$KVER $DEST_DIR/ubuntu |
dd6636be |
cat >>$CFG <<EOF |
c945bf8d |
LABEL devstack
MENU LABEL ^devstack
MENU DEFAULT |
958fa3de |
KERNEL ubuntu/vmlinuz-$KVER |
c945bf8d |
APPEND initrd=ubuntu/stack-initrd.gz ramdisk_size=2109600 root=/dev/ram0
EOF
# Get Ubuntu |
dd6636be |
if [ -d $PXEDIR -a -r $PXEDIR/natty-base-initrd.gz ]; then |
f2a343b0 |
cp -pu $PXEDIR/natty-base-initrd.gz $DEST_DIR/ubuntu |
dd6636be |
cat >>$CFG <<EOF |
3f717002 |
LABEL ubuntu |
c945bf8d |
MENU LABEL ^Ubuntu Natty |
958fa3de |
KERNEL ubuntu/vmlinuz-$KVER |
c945bf8d |
APPEND initrd=ubuntu/natty-base-initrd.gz ramdisk_size=419600 root=/dev/ram0 |
3f717002 |
EOF |
1f80bfb3 |
fi
# Local disk boot |
dd6636be |
cat >>$CFG <<EOF |
1f80bfb3 |
LABEL local |
c945bf8d |
MENU LABEL ^Local disk |
1f80bfb3 |
LOCALBOOT 0
EOF |
d7326d2e |
trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT |