diff --git a/tools/xen/README.md b/tools/xen/README.md index 3fadc7839c..258d7a32a7 100644 --- a/tools/xen/README.md +++ b/tools/xen/README.md @@ -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 -------------------------------------------------------------- -cd tools/xen -./install_os_domU.sh +## Step 4: Run `./install_os_domU.sh` from the `tools/xen` directory -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. + 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. -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` diff --git a/tools/xen/install_os_domU.sh b/tools/xen/install_os_domU.sh index 7c3b839209..bcea939932 100755 --- a/tools/xen/install_os_domU.sh +++ b/tools/xen/install_os_domU.sh @@ -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() { diff --git a/tools/xen/prepare_guest.sh b/tools/xen/prepare_guest.sh index fe52445424..0e112263e2 100755 --- a/tools/xen/prepare_guest.sh +++ b/tools/xen/prepare_guest.sh @@ -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 diff --git a/tools/xen/prepare_guest_template.sh b/tools/xen/prepare_guest_template.sh index 19bd2f841a..6ea6f6321d 100755 --- a/tools/xen/prepare_guest_template.sh +++ b/tools/xen/prepare_guest_template.sh @@ -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 <$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 diff --git a/tools/xen/scripts/install_ubuntu_template.sh b/tools/xen/scripts/install_ubuntu_template.sh index 43b6decd90..00cabb038d 100755 --- a/tools/xen/scripts/install_ubuntu_template.sh +++ b/tools/xen/scripts/install_ubuntu_template.sh @@ -7,9 +7,8 @@ # Based on a script by: David Markey # -# 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} \ diff --git a/tools/xen/xenrc b/tools/xen/xenrc index e4d8ac9161..1956623a81 100644 --- a/tools/xen/xenrc +++ b/tools/xen/xenrc @@ -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