Make it easier to use Precise or Oneric with XenServer DevStack
This is a partial fix for bug 1009937
Change-Id: I1fc7059cd812bce1539a5050f60717db4cbd81ef
diff --git a/tools/xen/build_xva.sh b/tools/xen/build_xva.sh
index fdc6a60..9eae190 100755
--- a/tools/xen/build_xva.sh
+++ b/tools/xen/build_xva.sh
@@ -44,19 +44,14 @@
exit 1
fi
-# Directory where our conf files are stored
-FILES_DIR=$TOP_DIR/files
-TEMPLATES_DIR=$TOP_DIR/templates
-
-# Directory for supporting script files
-SCRIPT_DIR=$TOP_DIR/scripts
-
-# Version of ubuntu with which we are working
-UBUNTU_VERSION=`cat $STAGING_DIR/etc/lsb-release | grep "DISTRIB_CODENAME=" | sed "s/DISTRIB_CODENAME=//"`
-KERNEL_VERSION=`ls $STAGING_DIR/boot/vmlinuz* | head -1 | sed "s/.*vmlinuz-//"`
-
# Configure dns (use same dns as dom0)
-cp /etc/resolv.conf $STAGING_DIR/etc/resolv.conf
+# but only when not precise
+if [ "$UBUNTU_INST_RELEASE" != "precise" ]; then
+ cp /etc/resolv.conf $STAGING_DIR/etc/resolv.conf
+elif [ "$MGT_IP" != "dhcp" ] && [ "$PUB_IP" != "dhcp" ]; then
+ echo "Configuration without DHCP not supported on Precise"
+ exit 1
+fi
# Copy over devstack
rm -f /tmp/devstack.tar
@@ -90,6 +85,7 @@
# Configure the network
INTERFACES=$STAGING_DIR/etc/network/interfaces
+TEMPLATES_DIR=$TOP_DIR/templates
cp $TEMPLATES_DIR/interfaces.in $INTERFACES
if [ $VM_IP == "dhcp" ]; then
echo 'eth1 on dhcp'
diff --git a/tools/xen/install_os_domU.sh b/tools/xen/install_os_domU.sh
index 19453c1..0bb6ac8 100755
--- a/tools/xen/install_os_domU.sh
+++ b/tools/xen/install_os_domU.sh
@@ -169,7 +169,7 @@
HOST_IP=${HOST_IP:-`ifconfig xenbr0 | grep "inet addr" | cut -d ":" -f2 | sed "s/ .*//"`}
# Set up ip forwarding, but skip on xcp-xapi
-if [ -a /etc/sysconfig/network]; then
+if [ -a /etc/sysconfig/network ]; then
if ! grep -q "FORWARD_IPV4=YES" /etc/sysconfig/network; then
# FIXME: This doesn't work on reboot!
echo "FORWARD_IPV4=YES" >> /etc/sysconfig/network
@@ -218,7 +218,7 @@
#
GUEST_NAME=${GUEST_NAME:-"DevStackOSDomU"}
-TNAME="devstack_template_folsom_11.10"
+TNAME="devstack_template"
SNAME_PREPARED="template_prepared"
SNAME_FIRST_BOOT="before_first_boot"
@@ -242,19 +242,6 @@
# Install Ubuntu over network
#
- # try to find ubuntu template
- ubuntu_template_name="Ubuntu 11.10 for DevStack (64-bit)"
- ubuntu_template=$(xe_min template-list name-label="$ubuntu_template_name")
-
- # remove template, if we are in CLEAN_TEMPLATE mode
- if [ -n "$ubuntu_template" ]; then
- if $CLEAN_TEMPLATES; then
- xe template-param-clear param-name=other-config uuid=$ubuntu_template
- xe template-uninstall template-uuid=$ubuntu_template force=true
- ubuntu_template=""
- fi
- fi
-
# always update the preseed file, incase we have a newer one
PRESEED_URL=${PRESEED_URL:-""}
if [ -z "$PRESEED_URL" ]; then
@@ -272,13 +259,12 @@
fi
fi
- if [ -z "$ubuntu_template" ]; then
- $TOP_DIR/scripts/xenoneirictemplate.sh $PRESEED_URL
- fi
+ # Update the template
+ $TOP_DIR/scripts/install_ubuntu_template.sh $PRESEED_URL
# create a new VM with the given template
# creating the correct VIFs and metadata
- $TOP_DIR/scripts/install-os-vpx.sh -t "$ubuntu_template_name" -v $VM_BR -m $MGT_BR -p $PUB_BR -l $GUEST_NAME -r $OSDOMU_MEM_MB -k "flat_network_bridge=${VM_BR}"
+ $TOP_DIR/scripts/install-os-vpx.sh -t "$UBUNTU_INST_TEMPLATE_NAME" -v $VM_BR -m $MGT_BR -p $PUB_BR -l $GUEST_NAME -r $OSDOMU_MEM_MB -k "flat_network_bridge=${VM_BR}"
# wait for install to finish
wait_for_VM_to_halt
diff --git a/tools/xen/scripts/install_ubuntu_template.sh b/tools/xen/scripts/install_ubuntu_template.sh
new file mode 100755
index 0000000..f67547b
--- /dev/null
+++ b/tools/xen/scripts/install_ubuntu_template.sh
@@ -0,0 +1,78 @@
+#!/bin/bash
+#
+# This creates an Ubuntu Server 32bit or 64bit template
+# on Xenserver 5.6.x, 6.0.x and 6.1.x
+# The template does a net install only
+#
+# Based on a script by: David Markey <david.markey@citrix.com>
+#
+
+# Exit on errors
+set -o errexit
+# Echo commands
+set -o xtrace
+
+# This directory
+BASE_DIR=$(cd $(dirname "$0") && pwd)
+
+# For default setings see xenrc
+source $BASE_DIR/../xenrc
+
+# Get the params
+preseed_url=$1
+
+# Delete template or skip template creation as required
+previous_template=$(xe template-list name-label="$UBUNTU_INST_TEMPLATE_NAME" \
+ params=uuid --minimal)
+if [ -n "$previous_template" ]; then
+ if $CLEAN_TEMPLATES; then
+ xe template-param-clear param-name=other-config uuid=$previous_template
+ xe template-uninstall template-uuid=$previous_template force=true
+ else
+ echo "Template $UBUNTU_INST_TEMPLATE_NAME already present"
+ exit 0
+ fi
+fi
+
+# Get built-in template
+builtin_name="Debian Squeeze 6.0 (32-bit)"
+builtin_uuid=$(xe template-list name-label="$builtin_name" --minimal)
+if [[ -z $builtin_uuid ]]; then
+ echo "Cant find the Debian Squeeze 32bit template on your XenServer."
+ exit 1
+fi
+
+# Clone built-in template to create new template
+new_uuid=$(xe vm-clone uuid=$builtin_uuid \
+ new-name-label="$UBUNTU_INST_TEMPLATE_NAME")
+
+# Some of these settings can be found in example preseed files
+# however these need to be answered before the netinstall
+# is ready to fetch the preseed file, and as such must be here
+# to get a fully automated install
+pvargs="-- quiet console=hvc0 partman/default_filesystem=ext3 \
+console-setup/ask_detect=false locale=${UBUNTU_INST_LOCALE} \
+keyboard-configuration/layoutcode=${UBUNTU_INST_KEYBOARD} \
+netcfg/choose_interface=${HOST_IP_IFACE} \
+netcfg/get_hostname=os netcfg/get_domain=os auto \
+url=${preseed_url}"
+
+if [ "$NETINSTALLIP" != "dhcp" ]; then
+ netcfgargs="netcfg/disable_autoconfig=true \
+netcfg/get_nameservers=${UBUNTU_INST_NAMESERVERS} \
+netcfg/get_ipaddress=${UBUNTU_INST_IP} \
+netcfg/get_netmask=${UBUNTU_INST_NETMASK} \
+netcfg/get_gateway=${UBUNTU_INST_GATEWAY} \
+netcfg/confirm_static=true"
+ pvargs="${pvargs} ${netcfgargs}"
+fi
+
+xe template-param-set uuid=$new_uuid \
+ other-config:install-methods=http \
+ other-config:install-repository="$UBUNTU_INST_REPOSITORY" \
+ PV-args="$pvargs" \
+ other-config:debian-release="$UBUNTU_INST_RELEASE" \
+ other-config:default_template=true \
+ other-config:install-arch="$UBUNTU_INST_ARCH"
+
+echo "Ubuntu template installed uuid:$new_uuid"
diff --git a/tools/xen/scripts/xenoneirictemplate.sh b/tools/xen/scripts/xenoneirictemplate.sh
deleted file mode 100755
index 7f10c33..0000000
--- a/tools/xen/scripts/xenoneirictemplate.sh
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/bash
-## makeubuntu.sh, this creates Ubuntu server 11.10 32 and 64 bit templates
-## on Xenserver 6.0.2 Net install only
-## Original Author: David Markey <david.markey@citrix.com>
-## Author: Renuka Apte <renuka.apte@citrix.com>
-## This is not an officially supported guest OS on XenServer 6.0.2
-
-BASE_DIR=$(cd $(dirname "$0") && pwd)
-source $BASE_DIR/../../../localrc
-
-LENNY=$(xe template-list name-label=Debian\ Squeeze\ 6.0\ \(32-bit\) --minimal)
-
-if [[ -z $LENNY ]] ; then
- echo "Cant find Squeeze 32bit template."
- exit 1
-fi
-
-distro="Ubuntu 11.10 for DevStack"
-arches=("32-bit" "64-bit")
-
-preseedurl=${1:-"http://images.ansolabs.com/devstackubuntupreseed.cfg"}
-
-NETINSTALL_LOCALE=${NETINSTALL_LOCALE:-en_US}
-NETINSTALL_KEYBOARD=${NETINSTALL_KEYBOARD:-us}
-NETINSTALL_IFACE=${NETINSTALL_IFACE:-eth3}
-
-for arch in ${arches[@]} ; do
- echo "Attempting $distro ($arch)"
- if [[ -n $(xe template-list name-label="$distro ($arch)" params=uuid --minimal) ]] ; then
- echo "$distro ($arch)" already exists, Skipping
- else
- if [ -z $NETINSTALLIP ]
- then
- echo "NETINSTALLIP not set in localrc"
- exit 1
- fi
- # Some of these settings can be found in example preseed files
- # however these need to be answered before the netinstall
- # is ready to fetch the preseed file, and as such must be here
- # to get a fully automated install
- pvargs="-- quiet console=hvc0 partman/default_filesystem=ext3 locale=${NETINSTALL_LOCALE} console-setup/ask_detect=false keyboard-configuration/layoutcode=${NETINSTALL_KEYBOARD} netcfg/choose_interface=${NETINSTALL_IFACE} netcfg/get_hostname=os netcfg/get_domain=os auto url=${preseedurl}"
- if [ "$NETINSTALLIP" != "dhcp" ]
- then
- netcfgargs="netcfg/disable_autoconfig=true netcfg/get_nameservers=${NAMESERVERS} netcfg/get_ipaddress=${NETINSTALLIP} netcfg/get_netmask=${NETMASK} netcfg/get_gateway=${GATEWAY} netcfg/confirm_static=true"
- pvargs="${pvargs} ${netcfgargs}"
- fi
- NEWUUID=$(xe vm-clone uuid=$LENNY new-name-label="$distro ($arch)")
- xe template-param-set uuid=$NEWUUID other-config:install-methods=http,ftp \
- other-config:install-repository=http://archive.ubuntu.net/ubuntu \
- PV-args="$pvargs" \
- other-config:debian-release=oneiric \
- other-config:default_template=true
-
- if [[ "$arch" == "32-bit" ]] ; then
- xe template-param-set uuid=$NEWUUID other-config:install-arch="i386"
- else
- xe template-param-set uuid=$NEWUUID other-config:install-arch="amd64"
- fi
- echo "Success"
- fi
-done
-
-echo "Done"
diff --git a/tools/xen/xenrc b/tools/xen/xenrc
index 102a492..0365a25 100644
--- a/tools/xen/xenrc
+++ b/tools/xen/xenrc
@@ -1,5 +1,10 @@
#!/bin/bash
+#
+# XenServer specific defaults for the /tools/xen/ scripts
+# Similar to stackrc, you can override these in your localrc
+#
+
# Name of this guest
GUEST_NAME=${GUEST_NAME:-DevStackOSDomU}
@@ -10,13 +15,18 @@
# VM Password
GUEST_PASSWORD=${GUEST_PASSWORD:-secrete}
-# Host Interface, i.e. the interface on the nova vm you want to expose the services on
-# Usually either eth2 (management network) or eth3 (public network)
+# Host Interface, i.e. the interface on the nova vm you want to expose the
+# services on. Usually eth2 (management network) or eth3 (public network) and
# not eth0 (private network with XenServer host) or eth1 (VM traffic network)
+# This is also used as the interface for the Ubuntu install
HOST_IP_IFACE=${HOST_IP_IFACE:-eth3}
+#
# Our nova host's network info
-VM_IP=${VM_IP:-10.255.255.255} # A host-only ip that let's the interface come up, otherwise unused
+#
+
+# A host-only ip that let's the interface come up, otherwise unused
+VM_IP=${VM_IP:-10.255.255.255}
MGT_IP=${MGT_IP:-172.16.100.55}
PUB_IP=${PUB_IP:-192.168.1.55}
@@ -38,8 +48,28 @@
MGT_VLAN=${MGT_VLAN:-101}
MGT_DEV=${MGT_DEV:-eth0}
-# Guest installer network
+# Decide if you should enable eth0,
+# the guest installer network
+# You need to disable this on xcp-xapi on Ubuntu 12.04
ENABLE_GI=true
-# Source params
+# Ubuntu install settings
+UBUNTU_INST_RELEASE="oneiric"
+UBUNTU_INST_TEMPLATE_NAME="Ubuntu 11.10 (64-bit) for DevStack"
+# For 12.04 use "precise" and update template name
+# However, for 12.04, you should be using
+# XenServer 6.1 and later or XCP 1.6 or later
+# 11.10 is only really supported with XenServer 6.0.2 and later
+UBUNTU_INST_ARCH="amd64"
+UBUNTU_INST_REPOSITORY="http://archive.ubuntu.net/ubuntu"
+UBUNTU_INST_LOCALE="en_US"
+UBUNTU_INST_KEYBOARD="us"
+# network configuration for HOST_IP_IFACE during install
+UBUNTU_INST_IP="dhcp"
+UBUNTU_INST_NAMESERVERS=""
+UBUNTU_INST_NETMASK=""
+UBUNTU_INST_GATEWAY=""
+
+# Load stackrc defaults
+# then override with settings from localrc
cd ../.. && source ./stackrc && cd $TOP_DIR