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
This commit is contained in:
parent
fdb00b4b56
commit
5b9adb60de
14
tools/xen/devstackubuntu_latecommand.sh
Normal file
14
tools/xen/devstackubuntu_latecommand.sh
Normal file
@ -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
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 <<EOF >$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
|
||||
|
Loading…
Reference in New Issue
Block a user