xenapi - cleanup

Add error on unitialised variable to the scripts. This way some issues
were identified. Also modify README with fresh variables. The patch
includes:
 - Add SWIFT_HASH to the README
 - Add XENAPI_CONNECTION_URL to the README
 - Add VNCSERVER_PROXYCLIENT_ADDRESS to the README
 - Introduce UBUNTU_INST_IFACE which is the OpenStack VM interface used
   for the netinstall. It defaults to eth3. Previously this parameter
   was set by the combination of HOST_IP_IFACE and the undocumented
   NETINSTALL_IP
 - get rid of NETINSTALL_IP
 - xenrc includes CLEAN_TEMPLATES
 - xenrc no longer tries to change directory
 - remove chrooting from prepare_guest.sh (STAGING_DIR was always / )
 - remove DO_TGZ variable from prepare_guest.sh
 - use arguments to call prepare_guest.sh, instead of env vars
 - Fix backslash escaping in prepare_guest_template.sh

NOTE: networking is about to be addressed in a separate change.

Related to blueprint xenapi-devstack-cleanup

Change-Id: Ie9a75321c7f41cc9a0cc051398d1e6ec2c88adfa
This commit is contained in:
Mate Lakat 2013-05-07 16:58:17 +01:00
parent 5f349179f4
commit 0b3804bff7
6 changed files with 75 additions and 86 deletions

View File

@ -1,5 +1,4 @@
Getting Started With XenServer 5.6 and Devstack # Getting Started With XenServer 5.6 and Devstack
===============================================
The purpose of the code in this directory it to help developers bootstrap The purpose of the code in this directory it to help developers bootstrap
a XenServer 5.6 (or greater) + Openstack development environment. This file gives a XenServer 5.6 (or greater) + Openstack development environment. This file gives
some pointers on how to get started. some pointers on how to get started.
@ -9,8 +8,7 @@ The Openstack services are configured to run within a "privileged" virtual
machine on the Xenserver host (called OS domU). The VM uses the XAPI toolstack machine on the Xenserver host (called OS domU). The VM uses the XAPI toolstack
to communicate with the host. to communicate with the host.
Step 1: Install Xenserver ## Step 1: Install Xenserver
------------------------
Install XenServer 5.6+ on a clean box. You can get XenServer by signing Install XenServer 5.6+ on a clean box. You can get XenServer by signing
up for an account on citrix.com, and then visiting: up for an account on citrix.com, and then visiting:
https://www.citrix.com/English/ss/downloads/details.asp?downloadId=2311504&productId=683148 https://www.citrix.com/English/ss/downloads/details.asp?downloadId=2311504&productId=683148
@ -25,16 +23,14 @@ getting started (Settings like this have been used with a laptop + cheap wifi ro
* XenServer Gateway: 192.168.1.1 * XenServer Gateway: 192.168.1.1
* XenServer DNS: 192.168.1.1 * XenServer DNS: 192.168.1.1
Step 2: Download devstack ## Step 2: Download devstack
--------------------------
On your XenServer host, run the following commands as root: On your XenServer host, run the following commands as root:
wget --no-check-certificate https://github.com/openstack-dev/devstack/zipball/master wget --no-check-certificate https://github.com/openstack-dev/devstack/zipball/master
unzip -o master -d ./devstack unzip -o master -d ./devstack
cd devstack/*/ cd devstack/*/
Step 3: Configure your localrc inside the devstack directory ## Step 3: Configure your localrc inside the devstack directory
------------------------------------------------------------
Devstack uses a localrc for user-specific configuration. Note that Devstack uses a localrc for user-specific configuration. Note that
the XENAPI_PASSWORD must be your dom0 root password. the XENAPI_PASSWORD must be your dom0 root password.
Of course, use real passwords if this machine is exposed. Of course, use real passwords if this machine is exposed.
@ -43,12 +39,18 @@ Of course, use real passwords if this machine is exposed.
MYSQL_PASSWORD=my_super_secret MYSQL_PASSWORD=my_super_secret
SERVICE_TOKEN=my_super_secret SERVICE_TOKEN=my_super_secret
ADMIN_PASSWORD=my_super_secret ADMIN_PASSWORD=my_super_secret
SERVICE_PASSWORD=$ADMIN_PASSWORD SERVICE_PASSWORD=my_super_secret
RABBIT_PASSWORD=my_super_secret RABBIT_PASSWORD=my_super_secret
# This is the password for your guest (for both stack and root users) SWIFT_HASH="66a3d6b56c1f479c8b4e70ab5c2000f5"
# This is the password for the OpenStack VM (for both stack and root users)
GUEST_PASSWORD=my_super_secret GUEST_PASSWORD=my_super_secret
# XenAPI parameters
# IMPORTANT: The following must be set to your dom0 root password! # IMPORTANT: The following must be set to your dom0 root password!
XENAPI_PASSWORD=my_super_secret XENAPI_PASSWORD=my_xenserver_root_password
XENAPI_CONNECTION_URL="http://address_of_your_xenserver"
VNCSERVER_PROXYCLIENT_ADDRESS=address_of_your_xenserver
# Do not download the usual images yet! # Do not download the usual images yet!
IMAGE_URLS="" IMAGE_URLS=""
# Explicitly set virt driver here # Explicitly set virt driver here
@ -60,34 +62,32 @@ Of course, use real passwords if this machine is exposed.
# Host Interface, i.e. the interface on the nova vm you want to expose the # 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 # services on. Usually eth2 (management network) or eth3 (public network) and
# not eth0 (private network with XenServer host) or eth1 (VM traffic network) # not eth0 (private network with XenServer host) or eth1 (VM traffic network)
# This is also used as the interface for the Ubuntu install
# The default is eth3. # The default is eth3.
# HOST_IP_IFACE=eth3 # HOST_IP_IFACE=eth3
# Settings for netinstalling Ubuntu
# UBUNTU_INST_RELEASE=precise
# First time Ubuntu network install params # First time Ubuntu network install params
NETINSTALLIP="dhcp" # UBUNTU_INST_IFACE="eth3"
NAMESERVERS="" # UBUNTU_INST_IP="dhcp"
NETMASK=""
GATEWAY=""
EOF EOF
Step 4: Run ./install_os_domU.sh from the tools/xen directory ## Step 4: Run `./install_os_domU.sh` from the `tools/xen` directory
-------------------------------------------------------------
cd tools/xen
./install_os_domU.sh
Once this script finishes executing, log into the VM (openstack domU) cd tools/xen
that it installed and tail the run.sh.log file. You will need to wait ./install_os_domU.sh
until it run.sh has finished executing.
Once this script finishes executing, log into the VM (openstack domU) that it
installed and tail the run.sh.log file. You will need to wait until it run.sh
has finished executing.
Step 5: Do cloudy stuff! ## Step 5: Do cloudy stuff!
--------------------------
* Play with horizon * Play with horizon
* Play with the CLI * Play with the CLI
* Log bugs to devstack and core projects, and submit fixes! * Log bugs to devstack and core projects, and submit fixes!
Step 6: Run from snapshot ## Step 6: Run from snapshot
-------------------------
If you want to quicky re-run devstack from a clean state, If you want to quicky re-run devstack from a clean state,
using the same settings you used in your previous run, using the same settings you used in your previous run,
you can revert the DomU to the snapshot called "before_first_boot" you can revert the DomU to the snapshot called `before_first_boot`

View File

@ -1,15 +1,13 @@
#!/bin/bash #!/bin/bash
# This script is a level script # This script must be run on a XenServer or XCP machine
# It must be run on a XenServer or XCP machine
# #
# It creates a DomU VM that runs OpenStack services # It creates a DomU VM that runs OpenStack services
# #
# For more details see: README.md # For more details see: README.md
# Exit on errors
set -o errexit set -o errexit
# Echo commands set -o nounset
set -o xtrace set -o xtrace
# Abort if localrc is not set # Abort if localrc is not set
@ -31,13 +29,12 @@ THIS_DIR=$(cd $(dirname "$0") && pwd)
# xapi functions # xapi functions
. $THIS_DIR/functions . $THIS_DIR/functions
# #
# Get Settings # Get Settings
# #
# Source params - override xenrc params in your localrc to suit your taste # Source params - override xenrc params in your localrc to suit your taste
source xenrc source $THIS_DIR/xenrc
xe_min() xe_min()
{ {

View File

@ -10,54 +10,51 @@
# creating the user called "stack", # creating the user called "stack",
# and shuts down the VM to signal the script has completed # and shuts down the VM to signal the script has completed
set -x set -o errexit
# Echo commands set -o nounset
set -o xtrace set -o xtrace
# Configurable nuggets # Configurable nuggets
GUEST_PASSWORD=${GUEST_PASSWORD:-secrete} GUEST_PASSWORD="$1"
STAGING_DIR=${STAGING_DIR:-stage} XS_TOOLS_PATH="$2"
DO_TGZ=${DO_TGZ:-1} STACK_USER="$3"
XS_TOOLS_PATH=${XS_TOOLS_PATH:-"/root/xs-tools.deb"}
STACK_USER=${STACK_USER:-stack}
# Install basics # Install basics
chroot $STAGING_DIR apt-get update apt-get update
chroot $STAGING_DIR apt-get install -y cracklib-runtime curl wget ssh openssh-server tcpdump ethtool apt-get install -y cracklib-runtime curl wget ssh openssh-server tcpdump ethtool
chroot $STAGING_DIR apt-get install -y curl wget ssh openssh-server python-pip git vim-nox sudo apt-get install -y curl wget ssh openssh-server python-pip git vim-nox sudo
chroot $STAGING_DIR pip install xenapi pip install xenapi
# Install XenServer guest utilities # Install XenServer guest utilities
cp $XS_TOOLS_PATH ${STAGING_DIR}${XS_TOOLS_PATH} dpkg -i $XS_TOOLS_PATH
chroot $STAGING_DIR dpkg -i $XS_TOOLS_PATH update-rc.d -f xe-linux-distribution remove
chroot $STAGING_DIR update-rc.d -f xe-linux-distribution remove update-rc.d xe-linux-distribution defaults
chroot $STAGING_DIR update-rc.d xe-linux-distribution defaults
# Make a small cracklib dictionary, so that passwd still works, but we don't # Make a small cracklib dictionary, so that passwd still works, but we don't
# have the big dictionary. # have the big dictionary.
mkdir -p $STAGING_DIR/usr/share/cracklib mkdir -p /usr/share/cracklib
echo a | chroot $STAGING_DIR cracklib-packer echo a | cracklib-packer
# Make /etc/shadow, and set the root password # Make /etc/shadow, and set the root password
chroot $STAGING_DIR "pwconv" pwconv
echo "root:$GUEST_PASSWORD" | chroot $STAGING_DIR chpasswd echo "root:$GUEST_PASSWORD" | chpasswd
# Put the VPX into UTC. # Put the VPX into UTC.
rm -f $STAGING_DIR/etc/localtime rm -f /etc/localtime
# Add stack user # Add stack user
chroot $STAGING_DIR groupadd libvirtd groupadd libvirtd
chroot $STAGING_DIR useradd $STACK_USER -s /bin/bash -d /opt/stack -G libvirtd useradd $STACK_USER -s /bin/bash -d /opt/stack -G libvirtd
echo $STACK_USER:$GUEST_PASSWORD | chroot $STAGING_DIR chpasswd echo $STACK_USER:$GUEST_PASSWORD | chpasswd
echo "$STACK_USER ALL=(ALL) NOPASSWD: ALL" >> $STAGING_DIR/etc/sudoers echo "$STACK_USER ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
# Give ownership of /opt/stack to stack user # Give ownership of /opt/stack to stack user
chroot $STAGING_DIR chown -R $STACK_USER /opt/stack chown -R $STACK_USER /opt/stack
# Make our ip address hostnames look nice at the command prompt # Make our ip address hostnames look nice at the command prompt
echo "export PS1='${debian_chroot:+($debian_chroot)}\\u@\\H:\\w\\$ '" >> $STAGING_DIR/opt/stack/.bashrc echo "export PS1='${debian_chroot:+($debian_chroot)}\\u@\\H:\\w\\$ '" >> /opt/stack/.bashrc
echo "export PS1='${debian_chroot:+($debian_chroot)}\\u@\\H:\\w\\$ '" >> $STAGING_DIR/root/.bashrc echo "export PS1='${debian_chroot:+($debian_chroot)}\\u@\\H:\\w\\$ '" >> /root/.bashrc
echo "export PS1='${debian_chroot:+($debian_chroot)}\\u@\\H:\\w\\$ '" >> $STAGING_DIR/etc/profile echo "export PS1='${debian_chroot:+($debian_chroot)}\\u@\\H:\\w\\$ '" >> /etc/profile
function setup_vimrc { function setup_vimrc {
if [ ! -e $1 ]; then if [ ! -e $1 ]; then
@ -72,20 +69,15 @@ EOF
} }
# Setup simple .vimrcs # Setup simple .vimrcs
setup_vimrc $STAGING_DIR/root/.vimrc setup_vimrc /root/.vimrc
setup_vimrc $STAGING_DIR/opt/stack/.vimrc setup_vimrc /opt/stack/.vimrc
if [ "$DO_TGZ" = "1" ]; then
# Compress
rm -f stage.tgz
tar cfz stage.tgz stage
fi
# remove self from local.rc # remove self from local.rc
# so this script is not run again # so this script is not run again
rm -rf /etc/rc.local rm -rf /etc/rc.local
mv /etc/rc.local.preparebackup /etc/rc.local
cp $STAGING_DIR/etc/rc.local $STAGING_DIR/etc/rc.local.backup # Restore rc.local file
cp /etc/rc.local.preparebackup /etc/rc.local
# shutdown to notify we are done # shutdown to notify we are done
shutdown -h now shutdown -h now

View File

@ -15,9 +15,8 @@
# The resultant image is started by install_os_domU.sh, # The resultant image is started by install_os_domU.sh,
# and once the VM has shutdown, build_xva.sh is run # and once the VM has shutdown, build_xva.sh is run
# Exit on errors
set -o errexit set -o errexit
# Echo commands set -o nounset
set -o xtrace set -o xtrace
# This directory # This directory
@ -75,7 +74,8 @@ cp $STAGING_DIR/etc/rc.local $STAGING_DIR/etc/rc.local.preparebackup
# run prepare_guest.sh on boot # run prepare_guest.sh on boot
cat <<EOF >$STAGING_DIR/etc/rc.local cat <<EOF >$STAGING_DIR/etc/rc.local
GUEST_PASSWORD=$GUEST_PASSWORD STAGING_DIR=/ \ #!/bin/sh -e
DO_TGZ=0 XS_TOOLS_PATH=$XS_TOOLS_PATH \ bash /opt/stack/prepare_guest.sh \\
bash /opt/stack/prepare_guest.sh > /opt/stack/prepare_guest.log 2>&1 "$GUEST_PASSWORD" "$XS_TOOLS_PATH" "$STACK_USER" \\
> /opt/stack/prepare_guest.log 2>&1
EOF EOF

View File

@ -7,9 +7,8 @@
# Based on a script by: David Markey <david.markey@citrix.com> # Based on a script by: David Markey <david.markey@citrix.com>
# #
# Exit on errors
set -o errexit set -o errexit
# Echo commands set -o nounset
set -o xtrace set -o xtrace
# This directory # This directory
@ -54,11 +53,11 @@ disk_size=$(($OSDOMU_VDI_GB * 1024 * 1024 * 1024))
pvargs="-- quiet console=hvc0 partman/default_filesystem=ext3 \ pvargs="-- quiet console=hvc0 partman/default_filesystem=ext3 \
console-setup/ask_detect=false locale=${UBUNTU_INST_LOCALE} \ console-setup/ask_detect=false locale=${UBUNTU_INST_LOCALE} \
keyboard-configuration/layoutcode=${UBUNTU_INST_KEYBOARD} \ keyboard-configuration/layoutcode=${UBUNTU_INST_KEYBOARD} \
netcfg/choose_interface=${HOST_IP_IFACE} \ netcfg/choose_interface=${UBUNTU_INST_IFACE} \
netcfg/get_hostname=os netcfg/get_domain=os auto \ netcfg/get_hostname=os netcfg/get_domain=os auto \
url=${preseed_url}" url=${preseed_url}"
if [ "$NETINSTALLIP" != "dhcp" ]; then if [ "$UBUNTU_INST_IP" != "dhcp" ]; then
netcfgargs="netcfg/disable_autoconfig=true \ netcfgargs="netcfg/disable_autoconfig=true \
netcfg/get_nameservers=${UBUNTU_INST_NAMESERVERS} \ netcfg/get_nameservers=${UBUNTU_INST_NAMESERVERS} \
netcfg/get_ipaddress=${UBUNTU_INST_IP} \ netcfg/get_ipaddress=${UBUNTU_INST_IP} \

View File

@ -8,6 +8,9 @@
# Name of this guest # Name of this guest
GUEST_NAME=${GUEST_NAME:-DevStackOSDomU} GUEST_NAME=${GUEST_NAME:-DevStackOSDomU}
# Template cleanup
CLEAN_TEMPLATES=${CLEAN_TEMPLATES:-false}
# Size of image # Size of image
VDI_MB=${VDI_MB:-5000} VDI_MB=${VDI_MB:-5000}
OSDOMU_MEM_MB=1024 OSDOMU_MEM_MB=1024
@ -19,7 +22,6 @@ GUEST_PASSWORD=${GUEST_PASSWORD:-secrete}
# Host Interface, i.e. the interface on the nova vm you want to expose the # 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 # services on. Usually eth2 (management network) or eth3 (public network) and
# not eth0 (private network with XenServer host) or eth1 (VM traffic network) # 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} HOST_IP_IFACE=${HOST_IP_IFACE:-eth3}
# #
@ -65,12 +67,11 @@ UBUNTU_INST_ARCH="amd64"
UBUNTU_INST_REPOSITORY="http://archive.ubuntu.net/ubuntu" UBUNTU_INST_REPOSITORY="http://archive.ubuntu.net/ubuntu"
UBUNTU_INST_LOCALE="en_US" UBUNTU_INST_LOCALE="en_US"
UBUNTU_INST_KEYBOARD="us" UBUNTU_INST_KEYBOARD="us"
# network configuration for HOST_IP_IFACE during install # network configuration for ubuntu netinstall
UBUNTU_INST_IFACE="eth3"
UBUNTU_INST_IP="dhcp" UBUNTU_INST_IP="dhcp"
UBUNTU_INST_NAMESERVERS="" UBUNTU_INST_NAMESERVERS=""
UBUNTU_INST_NETMASK="" UBUNTU_INST_NETMASK=""
UBUNTU_INST_GATEWAY="" UBUNTU_INST_GATEWAY=""
# Load stackrc defaults source ../../stackrc
# then override with settings from localrc
cd ../.. && source ./stackrc && cd $TOP_DIR