From 5b9adb60de38584b94596a07fdb7e5ffbe4c9480 Mon Sep 17 00:00:00 2001 From: Bob Ball Date: Tue, 10 Feb 2015 08:09:08 +0000 Subject: [PATCH] XenAPI: Move some boot-time functions to install-time The boot-time script (prepare_guest.sh) is one of the less reliable parts of the install process. This change enables SSH into the host as well as reporting of the IP address. This significantly helps debugging issues now and enables moving of all other setup code to being executed over SSH. Change-Id: I1555f1d91353ba8b75e2de4607df33ee20307a6e --- tools/xen/devstackubuntu_latecommand.sh | 14 +++++++++++++ tools/xen/devstackubuntupreseed.cfg | 7 ++++--- tools/xen/install_os_domU.sh | 25 ++++++++++++++++++++++ tools/xen/prepare_guest.sh | 15 ++----------- tools/xen/prepare_guest_template.sh | 28 +------------------------ 5 files changed, 46 insertions(+), 43 deletions(-) create mode 100644 tools/xen/devstackubuntu_latecommand.sh diff --git a/tools/xen/devstackubuntu_latecommand.sh b/tools/xen/devstackubuntu_latecommand.sh new file mode 100644 index 0000000000..2afbe2cdf3 --- /dev/null +++ b/tools/xen/devstackubuntu_latecommand.sh @@ -0,0 +1,14 @@ +#!/bin/bash +set -eux + +# Need to set barrier=0 to avoid a Xen bug +# https://bugs.launchpad.net/ubuntu/+source/linux/+bug/824089 +sed -i -e 's/errors=/barrier=0,errors=/' /etc/fstab + +# Allow root to login with a password +sed -i -e 's/.*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config + +# Install the XenServer tools so IP addresses are reported +wget --no-proxy @XS_TOOLS_URL@ -O /root/tools.deb +dpkg -i /root/tools.deb +rm /root/tools.deb diff --git a/tools/xen/devstackubuntupreseed.cfg b/tools/xen/devstackubuntupreseed.cfg index 94e6e96625..80f334ba8e 100644 --- a/tools/xen/devstackubuntupreseed.cfg +++ b/tools/xen/devstackubuntupreseed.cfg @@ -331,10 +331,11 @@ d-i apt-setup/backports boolean true tasksel tasksel/first multiselect openssh-server # Individual additional packages to install -#d-i pkgsel/include string openssh-server build-essential +d-i pkgsel/include string cracklib-runtime curl wget ssh openssh-server tcpdump ethtool git sudo python-netaddr coreutils + # Whether to upgrade packages after debootstrap. # Allowed values: none, safe-upgrade, full-upgrade -#d-i pkgsel/upgrade select none +d-i pkgsel/upgrade select safe-upgrade # Language pack selection #d-i pkgsel/language-packs multiselect de, en, zh @@ -467,4 +468,4 @@ xserver-xorg xserver-xorg/config/monitor/mode-list \ # still a usable /target directory. You can chroot to /target and use it # directly, or use the apt-install and in-target commands to easily install # packages and run commands in the target system. -#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh +d-i preseed/late_command string diff --git a/tools/xen/install_os_domU.sh b/tools/xen/install_os_domU.sh index 546ead6127..8a0725152f 100755 --- a/tools/xen/install_os_domU.sh +++ b/tools/xen/install_os_domU.sh @@ -178,12 +178,32 @@ if [ -z "$templateuuid" ]; then PRESEED_URL=${PRESEED_URL:-""} if [ -z "$PRESEED_URL" ]; then PRESEED_URL="${HOST_IP}/devstackubuntupreseed.cfg" + HTTP_SERVER_LOCATION="/opt/xensource/www" if [ ! -e $HTTP_SERVER_LOCATION ]; then HTTP_SERVER_LOCATION="/var/www/html" mkdir -p $HTTP_SERVER_LOCATION fi + + # Copy the tools DEB to the XS web server + XS_TOOLS_URL="https://github.com/downloads/citrix-openstack/warehouse/xe-guest-utilities_5.6.100-651_amd64.deb" + ISO_DIR="/opt/xensource/packages/iso" + XS_TOOLS_FILE_NAME="xs-tools.deb" + XS_TOOLS_PATH="/root/$XS_TOOLS_FILE_NAME" + if [ -e "$ISO_DIR" ]; then + TOOLS_ISO=$(ls -1 $ISO_DIR/xs-tools-*.iso | head -1) + TMP_DIR=/tmp/temp.$RANDOM + mkdir -p $TMP_DIR + mount -o loop $TOOLS_ISO $TMP_DIR + DEB_FILE=$(ls $TMP_DIR/Linux/*amd64.deb) + cp $DEB_FILE $HTTP_SERVER_LOCATION + umount $TMP_DIR + rmdir $TMP_DIR + XS_TOOLS_URL=${HOST_IP}/$(basename $DEB_FILE) + fi + cp -f $THIS_DIR/devstackubuntupreseed.cfg $HTTP_SERVER_LOCATION + cp -f $THIS_DIR/devstackubuntu_latecommand.sh $HTTP_SERVER_LOCATION/latecommand.sh sed \ -e "s,\(d-i mirror/http/hostname string\).*,\1 $UBUNTU_INST_HTTP_HOSTNAME,g" \ @@ -191,7 +211,12 @@ if [ -z "$templateuuid" ]; then -e "s,\(d-i mirror/http/proxy string\).*,\1 $UBUNTU_INST_HTTP_PROXY,g" \ -e "s,\(d-i passwd/root-password password\).*,\1 $GUEST_PASSWORD,g" \ -e "s,\(d-i passwd/root-password-again password\).*,\1 $GUEST_PASSWORD,g" \ + -e "s,\(d-i preseed/late_command string\).*,\1 in-target mkdir -p /tmp; in-target wget --no-proxy ${HOST_IP}/latecommand.sh -O /root/latecommand.sh; in-target bash /root/latecommand.sh,g" \ -i "${HTTP_SERVER_LOCATION}/devstackubuntupreseed.cfg" + + sed \ + -e "s,@XS_TOOLS_URL@,$XS_TOOLS_URL,g" \ + -i "${HTTP_SERVER_LOCATION}/latecommand.sh" fi # Update the template diff --git a/tools/xen/prepare_guest.sh b/tools/xen/prepare_guest.sh index 7fe032a064..6de1afc199 100755 --- a/tools/xen/prepare_guest.sh +++ b/tools/xen/prepare_guest.sh @@ -16,9 +16,8 @@ set -o xtrace # Configurable nuggets GUEST_PASSWORD="$1" -XS_TOOLS_PATH="$2" -STACK_USER="$3" -DOMZERO_USER="$4" +STACK_USER="$2" +DOMZERO_USER="$3" function setup_domzero_user { @@ -70,16 +69,6 @@ EOF } -# Install basics -apt-get update -apt-get install -y cracklib-runtime curl wget ssh openssh-server tcpdump ethtool -apt-get install -y git sudo python-netaddr coreutils - -# Install XenServer guest utilities -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 /usr/share/cracklib diff --git a/tools/xen/prepare_guest_template.sh b/tools/xen/prepare_guest_template.sh index 6cb2ca7099..6cddddaa84 100755 --- a/tools/xen/prepare_guest_template.sh +++ b/tools/xen/prepare_guest_template.sh @@ -46,28 +46,6 @@ if [ ! -d $STAGING_DIR/etc ]; then exit 1 fi -# Copy XenServer tools deb into the VM -ISO_DIR="/opt/xensource/packages/iso" -XS_TOOLS_FILE_NAME="xs-tools.deb" -XS_TOOLS_PATH="/root/$XS_TOOLS_FILE_NAME" -if [ -e "$ISO_DIR" ]; then - TOOLS_ISO=$(ls -1 $ISO_DIR/xs-tools-*.iso | head -1) - TMP_DIR=/tmp/temp.$RANDOM - mkdir -p $TMP_DIR - mount -o loop $TOOLS_ISO $TMP_DIR - DEB_FILE=$(ls $TMP_DIR/Linux/*amd64.deb) - echo "Copying XenServer tools into VM from: $DEB_FILE" - cp $DEB_FILE "${STAGING_DIR}${XS_TOOLS_PATH}" - umount $TMP_DIR - rm -rf $TMP_DIR -else - echo "WARNING: no XenServer tools found, falling back to 5.6 tools" - TOOLS_URL="https://github.com/downloads/citrix-openstack/warehouse/xe-guest-utilities_5.6.100-651_amd64.deb" - curl --no-sessionid -L -o "$XS_TOOLS_FILE_NAME" $TOOLS_URL - cp $XS_TOOLS_FILE_NAME "${STAGING_DIR}${XS_TOOLS_PATH}" - rm -rf $XS_TOOLS_FILE_NAME -fi - # Copy prepare_guest.sh to VM mkdir -p $STAGING_DIR/opt/stack/ cp $TOP_DIR/prepare_guest.sh $STAGING_DIR/opt/stack/prepare_guest.sh @@ -79,14 +57,10 @@ cp $STAGING_DIR/etc/rc.local $STAGING_DIR/etc/rc.local.preparebackup cat <$STAGING_DIR/etc/rc.local #!/bin/sh -e bash /opt/stack/prepare_guest.sh \\ - "$GUEST_PASSWORD" "$XS_TOOLS_PATH" "$STACK_USER" "$DOMZERO_USER" \\ + "$GUEST_PASSWORD" "$STACK_USER" "$DOMZERO_USER" \\ > /opt/stack/prepare_guest.log 2>&1 EOF -# Need to set barrier=0 to avoid a Xen bug -# https://bugs.launchpad.net/ubuntu/+source/linux/+bug/824089 -sed -i -e 's/errors=/barrier=0,errors=/' $STAGING_DIR/etc/fstab - # Update ubuntu repositories cat > $STAGING_DIR/etc/apt/sources.list << EOF deb http://${UBUNTU_INST_HTTP_HOSTNAME}${UBUNTU_INST_HTTP_DIRECTORY} ${UBUNTU_INST_RELEASE} main restricted