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
a XenServer 5.6 (or greater) + Openstack development environment. This file gives
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
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
up for an account on citrix.com, and then visiting:
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 DNS: 192.168.1.1
Step 2: Download devstack
--------------------------
## Step 2: Download devstack
On your XenServer host, run the following commands as root:
wget --no-check-certificate https://github.com/openstack-dev/devstack/zipball/master
unzip -o master -d ./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
the XENAPI_PASSWORD must be your dom0 root password.
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
SERVICE_TOKEN=my_super_secret
ADMIN_PASSWORD=my_super_secret
SERVICE_PASSWORD=$ADMIN_PASSWORD
SERVICE_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
# XenAPI parameters
# 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!
IMAGE_URLS=""
# 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
# 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
# The default is eth3.
# HOST_IP_IFACE=eth3
# Settings for netinstalling Ubuntu
# UBUNTU_INST_RELEASE=precise
# First time Ubuntu network install params
NETINSTALLIP="dhcp"
NAMESERVERS=""
NETMASK=""
GATEWAY=""
# UBUNTU_INST_IFACE="eth3"
# UBUNTU_INST_IP="dhcp"
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)
that it installed and tail the run.sh.log file. You will need to wait
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 the CLI
* 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,
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
# This script is a level script
# It must be run on a XenServer or XCP machine
# This script must be run on a XenServer or XCP machine
#
# It creates a DomU VM that runs OpenStack services
#
# For more details see: README.md
# Exit on errors
set -o errexit
# Echo commands
set -o nounset
set -o xtrace
# Abort if localrc is not set
@ -31,13 +29,12 @@ THIS_DIR=$(cd $(dirname "$0") && pwd)
# xapi functions
. $THIS_DIR/functions
#
# Get Settings
#
# Source params - override xenrc params in your localrc to suit your taste
source xenrc
source $THIS_DIR/xenrc
xe_min()
{

View File

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

View File

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

View File

@ -7,9 +7,8 @@
# Based on a script by: David Markey <david.markey@citrix.com>
#
# Exit on errors
set -o errexit
# Echo commands
set -o nounset
set -o xtrace
# This directory
@ -54,11 +53,11 @@ disk_size=$(($OSDOMU_VDI_GB * 1024 * 1024 * 1024))
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/choose_interface=${UBUNTU_INST_IFACE} \
netcfg/get_hostname=os netcfg/get_domain=os auto \
url=${preseed_url}"
if [ "$NETINSTALLIP" != "dhcp" ]; then
if [ "$UBUNTU_INST_IP" != "dhcp" ]; then
netcfgargs="netcfg/disable_autoconfig=true \
netcfg/get_nameservers=${UBUNTU_INST_NAMESERVERS} \
netcfg/get_ipaddress=${UBUNTU_INST_IP} \

View File

@ -8,6 +8,9 @@
# Name of this guest
GUEST_NAME=${GUEST_NAME:-DevStackOSDomU}
# Template cleanup
CLEAN_TEMPLATES=${CLEAN_TEMPLATES:-false}
# Size of image
VDI_MB=${VDI_MB:-5000}
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
# 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}
#
@ -65,12 +67,11 @@ 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
# network configuration for ubuntu netinstall
UBUNTU_INST_IFACE="eth3"
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
source ../../stackrc