From d8f1a87a45080cd2514f620c94c7eec97de74877 Mon Sep 17 00:00:00 2001 From: John Garbutt Date: Tue, 26 Jun 2012 11:16:38 +0100 Subject: [PATCH] Make it easier to use Precise or Oneric with XenServer DevStack This is a partial fix for bug 1009937 Change-Id: I1fc7059cd812bce1539a5050f60717db4cbd81ef --- tools/xen/build_xva.sh | 20 ++--- tools/xen/install_os_domU.sh | 24 ++---- tools/xen/scripts/install_ubuntu_template.sh | 78 ++++++++++++++++++++ tools/xen/scripts/xenoneirictemplate.sh | 63 ---------------- tools/xen/xenrc | 40 ++++++++-- 5 files changed, 126 insertions(+), 99 deletions(-) create mode 100755 tools/xen/scripts/install_ubuntu_template.sh delete mode 100755 tools/xen/scripts/xenoneirictemplate.sh diff --git a/tools/xen/build_xva.sh b/tools/xen/build_xva.sh index fdc6a6068a..9eae19038a 100755 --- a/tools/xen/build_xva.sh +++ b/tools/xen/build_xva.sh @@ -44,19 +44,14 @@ if [ ! -d $STAGING_DIR/etc ]; then 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 @@ EOF # 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 19453c1233..0bb6ac8a18 100755 --- a/tools/xen/install_os_domU.sh +++ b/tools/xen/install_os_domU.sh @@ -169,7 +169,7 @@ fi 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 @@ fi # 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 @@ if [ -z "$templateuuid" ]; then # 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 @@ if [ -z "$templateuuid" ]; then 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 0000000000..f67547b060 --- /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 +# + +# 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 7f10c336d1..0000000000 --- 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 -## Author: Renuka Apte -## 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 102a492e04..0365a25ee9 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 @@ OSDOMU_MEM_MB=1024 # 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_BR=${MGT_BR:-""} 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