os-xenapi: remove install dependence with devstack 1:
Part One: Create template Move tools/xen from devstack to os-xenapi which will be the center place to hold some XenServer/XenAPI specify source code. This part is used to install a clean ubuntu VM template Change-Id: I5e62741b5f647680a411fa83ab8609b6feb2a65e
This commit is contained in:
parent
ab4f0a6995
commit
08b23e5ff9
370
install/common/functions
Executable file
370
install/common/functions
Executable file
@ -0,0 +1,370 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
xe_min()
|
||||||
|
{
|
||||||
|
local cmd="$1"
|
||||||
|
shift
|
||||||
|
xe "$cmd" --minimal "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
function die_with_error {
|
||||||
|
local err_msg
|
||||||
|
|
||||||
|
err_msg="$1"
|
||||||
|
|
||||||
|
echo "$err_msg" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function xapi_plugin_location {
|
||||||
|
for PLUGIN_DIR in "/etc/xapi.d/plugins/" "/usr/lib/xcp/plugins/" "/usr/lib/xapi/plugins" "/usr/lib64/xapi/plugins"; do
|
||||||
|
if [ -d $PLUGIN_DIR ]; then
|
||||||
|
echo $PLUGIN_DIR
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_directory_for_kernels {
|
||||||
|
if [ -d "/boot/guest" ]; then
|
||||||
|
echo "INFO: /boot/guest directory already exists, using that" >&2
|
||||||
|
else
|
||||||
|
local local_path
|
||||||
|
local_path="$(get_local_sr_path)/os-guest-kernels"
|
||||||
|
mkdir -p $local_path
|
||||||
|
ln -s $local_path /boot/guest
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_directory_for_images {
|
||||||
|
if [ -d "/images" ]; then
|
||||||
|
echo "INFO: /images directory already exists, using that" >&2
|
||||||
|
else
|
||||||
|
local local_path
|
||||||
|
local_path="$(get_local_sr_path)/os-images"
|
||||||
|
mkdir -p $local_path
|
||||||
|
ln -s $local_path /images
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_local_sr {
|
||||||
|
xe pool-list params=default-SR minimal=true
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_local_sr_path {
|
||||||
|
pbd_path="/var/run/sr-mount/$(get_local_sr)"
|
||||||
|
pbd_device_config_path=`xe pbd-list sr-uuid=$(get_local_sr) params=device-config | grep " path: "`
|
||||||
|
if [ -n "$pbd_device_config_path" ]; then
|
||||||
|
pbd_uuid=`xe pbd-list sr-uuid=$(get_local_sr) minimal=true`
|
||||||
|
pbd_path=`xe pbd-param-get uuid=$pbd_uuid param-name=device-config param-key=path || echo ""`
|
||||||
|
fi
|
||||||
|
echo $pbd_path
|
||||||
|
}
|
||||||
|
|
||||||
|
function find_ip_by_name {
|
||||||
|
local guest_name="$1"
|
||||||
|
local interface="$2"
|
||||||
|
|
||||||
|
local period=10
|
||||||
|
local max_tries=10
|
||||||
|
local i=0
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
if [ $i -ge $max_tries ]; then
|
||||||
|
echo "Timeout: ip address for interface $interface of $guest_name"
|
||||||
|
exit 11
|
||||||
|
fi
|
||||||
|
|
||||||
|
ipaddress=$(xe vm-list --minimal \
|
||||||
|
name-label=$guest_name \
|
||||||
|
params=networks | sed -ne "s,^.*${interface}/ip: \([0-9.]*\).*\$,\1,p")
|
||||||
|
|
||||||
|
if [ -z "$ipaddress" ]; then
|
||||||
|
sleep $period
|
||||||
|
i=$((i+1))
|
||||||
|
else
|
||||||
|
echo $ipaddress
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function _vm_uuid {
|
||||||
|
local vm_name_label
|
||||||
|
|
||||||
|
vm_name_label="$1"
|
||||||
|
|
||||||
|
xe vm-list name-label="$vm_name_label" --minimal
|
||||||
|
}
|
||||||
|
|
||||||
|
function _create_new_network {
|
||||||
|
local name_label
|
||||||
|
name_label=$1
|
||||||
|
|
||||||
|
xe network-create name-label="$name_label"
|
||||||
|
}
|
||||||
|
|
||||||
|
function _multiple_networks_with_name {
|
||||||
|
local name_label
|
||||||
|
name_label=$1
|
||||||
|
|
||||||
|
# A comma indicates multiple matches
|
||||||
|
xe network-list name-label="$name_label" --minimal | grep -q ","
|
||||||
|
}
|
||||||
|
|
||||||
|
function _network_exists {
|
||||||
|
local name_label
|
||||||
|
name_label=$1
|
||||||
|
|
||||||
|
! [ -z "$(xe network-list name-label="$name_label" --minimal)" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
function _bridge_exists {
|
||||||
|
local bridge
|
||||||
|
bridge=$1
|
||||||
|
|
||||||
|
! [ -z "$(xe network-list bridge="$bridge" --minimal)" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
function _network_uuid {
|
||||||
|
local bridge_or_net_name
|
||||||
|
bridge_or_net_name=$1
|
||||||
|
|
||||||
|
if _bridge_exists "$bridge_or_net_name"; then
|
||||||
|
xe network-list bridge="$bridge_or_net_name" --minimal
|
||||||
|
else
|
||||||
|
xe network-list name-label="$bridge_or_net_name" --minimal
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function add_interface {
|
||||||
|
local vm_name_label
|
||||||
|
local bridge_or_network_name
|
||||||
|
|
||||||
|
vm_name_label="$1"
|
||||||
|
bridge_or_network_name="$2"
|
||||||
|
device_number="$3"
|
||||||
|
|
||||||
|
local vm
|
||||||
|
local net
|
||||||
|
|
||||||
|
vm=$(_vm_uuid "$vm_name_label")
|
||||||
|
net=$(_network_uuid "$bridge_or_network_name")
|
||||||
|
xe vif-create network-uuid=$net vm-uuid=$vm device=$device_number
|
||||||
|
}
|
||||||
|
|
||||||
|
function setup_network {
|
||||||
|
local bridge_or_net_name
|
||||||
|
bridge_or_net_name=$1
|
||||||
|
|
||||||
|
if ! _bridge_exists "$bridge_or_net_name"; then
|
||||||
|
if _network_exists "$bridge_or_net_name"; then
|
||||||
|
if _multiple_networks_with_name "$bridge_or_net_name"; then
|
||||||
|
cat >&2 << EOF
|
||||||
|
ERROR: Multiple networks found matching name-label to "$bridge_or_net_name"
|
||||||
|
please review your XenServer network configuration / localrc file.
|
||||||
|
EOF
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
_create_new_network "$bridge_or_net_name"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function bridge_for {
|
||||||
|
local bridge_or_net_name
|
||||||
|
bridge_or_net_name=$1
|
||||||
|
|
||||||
|
if _bridge_exists "$bridge_or_net_name"; then
|
||||||
|
echo "$bridge_or_net_name"
|
||||||
|
else
|
||||||
|
xe network-list name-label="$bridge_or_net_name" params=bridge --minimal
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function xenapi_ip_on {
|
||||||
|
local bridge_or_net_name
|
||||||
|
bridge_or_net_name=$1
|
||||||
|
|
||||||
|
ip -4 addr show $(bridge_for "$bridge_or_net_name") |\
|
||||||
|
awk '/inet/{split($2, ip, "/"); print ip[1];}'
|
||||||
|
}
|
||||||
|
|
||||||
|
function xenapi_is_listening_on {
|
||||||
|
local bridge_or_net_name
|
||||||
|
bridge_or_net_name=$1
|
||||||
|
|
||||||
|
! [ -z $(xenapi_ip_on "$bridge_or_net_name") ]
|
||||||
|
}
|
||||||
|
|
||||||
|
function parameter_is_specified {
|
||||||
|
local parameter_name
|
||||||
|
parameter_name=$1
|
||||||
|
|
||||||
|
compgen -v | grep "$parameter_name"
|
||||||
|
}
|
||||||
|
|
||||||
|
function append_kernel_cmdline {
|
||||||
|
local vm_name_label
|
||||||
|
local kernel_args
|
||||||
|
|
||||||
|
vm_name_label="$1"
|
||||||
|
kernel_args="$2"
|
||||||
|
|
||||||
|
local vm
|
||||||
|
local pv_args
|
||||||
|
|
||||||
|
vm=$(_vm_uuid "$vm_name_label")
|
||||||
|
pv_args=$(xe vm-param-get param-name=PV-args uuid=$vm)
|
||||||
|
xe vm-param-set PV-args="$pv_args $kernel_args" uuid=$vm
|
||||||
|
}
|
||||||
|
|
||||||
|
function destroy_all_vifs_of {
|
||||||
|
local vm_name_label
|
||||||
|
|
||||||
|
vm_name_label="$1"
|
||||||
|
|
||||||
|
local vm
|
||||||
|
|
||||||
|
vm=$(_vm_uuid "$vm_name_label")
|
||||||
|
IFS=,
|
||||||
|
for vif in $(xe vif-list vm-uuid=$vm --minimal); do
|
||||||
|
xe vif-destroy uuid="$vif"
|
||||||
|
done
|
||||||
|
unset IFS
|
||||||
|
}
|
||||||
|
|
||||||
|
function have_multiple_hosts {
|
||||||
|
xe host-list --minimal | grep -q ","
|
||||||
|
}
|
||||||
|
|
||||||
|
function attach_network {
|
||||||
|
local bridge_or_net_name
|
||||||
|
|
||||||
|
bridge_or_net_name="$1"
|
||||||
|
|
||||||
|
local net
|
||||||
|
local host
|
||||||
|
|
||||||
|
net=$(_network_uuid "$bridge_or_net_name")
|
||||||
|
host=$(xe host-list --minimal)
|
||||||
|
|
||||||
|
xe network-attach uuid=$net host-uuid=$host
|
||||||
|
}
|
||||||
|
|
||||||
|
function set_vm_memory {
|
||||||
|
local vm_name_label
|
||||||
|
local memory
|
||||||
|
|
||||||
|
vm_name_label="$1"
|
||||||
|
memory="$2"
|
||||||
|
|
||||||
|
local vm
|
||||||
|
|
||||||
|
vm=$(_vm_uuid "$vm_name_label")
|
||||||
|
|
||||||
|
xe vm-memory-limits-set \
|
||||||
|
static-min=${memory}MiB \
|
||||||
|
static-max=${memory}MiB \
|
||||||
|
dynamic-min=${memory}MiB \
|
||||||
|
dynamic-max=${memory}MiB \
|
||||||
|
uuid=$vm
|
||||||
|
}
|
||||||
|
|
||||||
|
function max_vcpus {
|
||||||
|
local vm_name_label
|
||||||
|
|
||||||
|
vm_name_label="$1"
|
||||||
|
|
||||||
|
local vm
|
||||||
|
local host
|
||||||
|
local cpu_count
|
||||||
|
|
||||||
|
host=$(xe host-list --minimal)
|
||||||
|
vm=$(_vm_uuid "$vm_name_label")
|
||||||
|
|
||||||
|
cpu_count=$(xe host-param-get \
|
||||||
|
param-name=cpu_info \
|
||||||
|
uuid=$host |
|
||||||
|
sed -e 's/^.*cpu_count: \([0-9]*\);.*$/\1/g')
|
||||||
|
|
||||||
|
if [ -z "$cpu_count" ]; then
|
||||||
|
# get dom0's vcpu count
|
||||||
|
cpu_count=$(cat /proc/cpuinfo | grep processor | wc -l)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Assert cpu_count is not empty
|
||||||
|
[ -n "$cpu_count" ]
|
||||||
|
|
||||||
|
# Assert ithas a numeric nonzero value
|
||||||
|
expr "$cpu_count" + 0
|
||||||
|
|
||||||
|
# 8 VCPUs should be enough for devstack VM; avoid using too
|
||||||
|
# many VCPUs:
|
||||||
|
# 1. too many VCPUs may trigger a kernel bug which result VM
|
||||||
|
# not able to boot:
|
||||||
|
# https://kernel.googlesource.com/pub/scm/linux/kernel/git/wsa/linux/+/e2e004acc7cbe3c531e752a270a74e95cde3ea48
|
||||||
|
# 2. The remaining CPUs can be used for other purpose:
|
||||||
|
# e.g. boot test VMs.
|
||||||
|
MAX_VCPUS=8
|
||||||
|
if [ $cpu_count -ge $MAX_VCPUS ]; then
|
||||||
|
cpu_count=$MAX_VCPUS
|
||||||
|
fi
|
||||||
|
|
||||||
|
xe vm-param-set uuid=$vm VCPUs-max=$cpu_count
|
||||||
|
xe vm-param-set uuid=$vm VCPUs-at-startup=$cpu_count
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_domid {
|
||||||
|
local vm_name_label
|
||||||
|
|
||||||
|
vm_name_label="$1"
|
||||||
|
|
||||||
|
xe vm-list name-label="$vm_name_label" params=dom-id minimal=true
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_conntrack_tools {
|
||||||
|
local xs_host
|
||||||
|
local xs_ver_major
|
||||||
|
local centos_ver
|
||||||
|
local conntrack_conf
|
||||||
|
xs_host=$(xe host-list --minimal)
|
||||||
|
xs_ver_major=$(xe host-param-get uuid=$xs_host param-name=software-version param-key=product_version_text_short | cut -d'.' -f 1)
|
||||||
|
if [ $xs_ver_major -gt 6 ]; then
|
||||||
|
# Only support conntrack-tools in Dom0 with XS7.0 and above
|
||||||
|
if [ ! -f /usr/sbin/conntrackd ]; then
|
||||||
|
sed -i s/#baseurl=/baseurl=/g /etc/yum.repos.d/CentOS-Base.repo
|
||||||
|
centos_ver=$(yum version nogroups |grep Installed | cut -d' ' -f 2 | cut -d'/' -f 1 | cut -d'-' -f 1)
|
||||||
|
yum install -y --enablerepo=base --releasever=$centos_ver conntrack-tools
|
||||||
|
# Backup conntrackd.conf after install conntrack-tools, use the one with statistic mode
|
||||||
|
mv /etc/conntrackd/conntrackd.conf /etc/conntrackd/conntrackd.conf.back
|
||||||
|
conntrack_conf=$(find /usr/share/doc -name conntrackd.conf |grep stats)
|
||||||
|
cp $conntrack_conf /etc/conntrackd/conntrackd.conf
|
||||||
|
fi
|
||||||
|
service conntrackd restart
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Wait for VM to halt
|
||||||
|
#
|
||||||
|
function wait_for_VM_to_halt {
|
||||||
|
#mgmt_ip="$1"
|
||||||
|
GUEST_VM_NAME="$1"
|
||||||
|
set +x
|
||||||
|
echo "Waiting for the VM to halt. Progress in-VM can be checked with XenCenter or xl console:"
|
||||||
|
domid=$(get_domid "$GUEST_VM_NAME")
|
||||||
|
echo "ssh root@host \"xl console $domid\""
|
||||||
|
while true; do
|
||||||
|
state=$(xe_min vm-list name-label="$GUEST_VM_NAME" power-state=halted)
|
||||||
|
if [ -n "$state" ]; then
|
||||||
|
break
|
||||||
|
else
|
||||||
|
echo -n "."
|
||||||
|
sleep 20
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
set -x
|
||||||
|
}
|
471
install/conf/ubuntupreseed.cfg
Normal file
471
install/conf/ubuntupreseed.cfg
Normal file
@ -0,0 +1,471 @@
|
|||||||
|
### Contents of the preconfiguration file (for squeeze)
|
||||||
|
### Localization
|
||||||
|
# Preseeding only locale sets language, country and locale.
|
||||||
|
d-i debian-installer/locale string en_US
|
||||||
|
|
||||||
|
# The values can also be preseeded individually for greater flexibility.
|
||||||
|
#d-i debian-installer/language string en
|
||||||
|
#d-i debian-installer/country string NL
|
||||||
|
#d-i debian-installer/locale string en_GB.UTF-8
|
||||||
|
# Optionally specify additional locales to be generated.
|
||||||
|
#d-i localechooser/supported-locales en_US.UTF-8, nl_NL.UTF-8
|
||||||
|
|
||||||
|
# Keyboard selection.
|
||||||
|
# Disable automatic (interactive) keymap detection.
|
||||||
|
d-i console-setup/ask_detect boolean false
|
||||||
|
#d-i keyboard-configuration/modelcode string pc105
|
||||||
|
d-i keyboard-configuration/layoutcode string us
|
||||||
|
# To select a variant of the selected layout (if you leave this out, the
|
||||||
|
# basic form of the layout will be used):
|
||||||
|
#d-i keyboard-configuration/variantcode string dvorak
|
||||||
|
|
||||||
|
### Network configuration
|
||||||
|
# Disable network configuration entirely. This is useful for cdrom
|
||||||
|
# installations on non-networked devices where the network questions,
|
||||||
|
# warning and long timeouts are a nuisance.
|
||||||
|
#d-i netcfg/enable boolean false
|
||||||
|
|
||||||
|
# netcfg will choose an interface that has link if possible. This makes it
|
||||||
|
# skip displaying a list if there is more than one interface.
|
||||||
|
d-i netcfg/choose_interface select auto
|
||||||
|
|
||||||
|
# To pick a particular interface instead:
|
||||||
|
#d-i netcfg/choose_interface select eth1
|
||||||
|
|
||||||
|
# If you have a slow dhcp server and the installer times out waiting for
|
||||||
|
# it, this might be useful.
|
||||||
|
d-i netcfg/dhcp_timeout string 120
|
||||||
|
|
||||||
|
# If you prefer to configure the network manually, uncomment this line and
|
||||||
|
# the static network configuration below.
|
||||||
|
#d-i netcfg/disable_autoconfig boolean true
|
||||||
|
|
||||||
|
# If you want the preconfiguration file to work on systems both with and
|
||||||
|
# without a dhcp server, uncomment these lines and the static network
|
||||||
|
# configuration below.
|
||||||
|
#d-i netcfg/dhcp_failed note
|
||||||
|
#d-i netcfg/dhcp_options select Configure network manually
|
||||||
|
|
||||||
|
# Static network configuration.
|
||||||
|
#d-i netcfg/get_nameservers string 192.168.1.1
|
||||||
|
#d-i netcfg/get_ipaddress string 192.168.1.42
|
||||||
|
#d-i netcfg/get_netmask string 255.255.255.0
|
||||||
|
#d-i netcfg/get_gateway string 192.168.1.1
|
||||||
|
#d-i netcfg/confirm_static boolean true
|
||||||
|
|
||||||
|
# Any hostname and domain names assigned from dhcp take precedence over
|
||||||
|
# values set here. However, setting the values still prevents the questions
|
||||||
|
# from being shown, even if values come from dhcp.
|
||||||
|
d-i netcfg/get_hostname string stack
|
||||||
|
d-i netcfg/get_domain string stackpass
|
||||||
|
|
||||||
|
# Disable that annoying WEP key dialog.
|
||||||
|
d-i netcfg/wireless_wep string
|
||||||
|
# The wacky dhcp hostname that some ISPs use as a password of sorts.
|
||||||
|
#d-i netcfg/dhcp_hostname string radish
|
||||||
|
|
||||||
|
# If non-free firmware is needed for the network or other hardware, you can
|
||||||
|
# configure the installer to always try to load it, without prompting. Or
|
||||||
|
# change to false to disable asking.
|
||||||
|
#d-i hw-detect/load_firmware boolean true
|
||||||
|
|
||||||
|
### Network console
|
||||||
|
# Use the following settings if you wish to make use of the network-console
|
||||||
|
# component for remote installation over SSH. This only makes sense if you
|
||||||
|
# intend to perform the remainder of the installation manually.
|
||||||
|
#d-i anna/choose_modules string network-console
|
||||||
|
#d-i network-console/password password r00tme
|
||||||
|
#d-i network-console/password-again password r00tme
|
||||||
|
|
||||||
|
### Mirror settings
|
||||||
|
# If you select ftp, the mirror/country string does not need to be set.
|
||||||
|
#d-i mirror/protocol string ftp
|
||||||
|
d-i mirror/country string manual
|
||||||
|
d-i mirror/http/hostname string archive.ubuntu.com
|
||||||
|
d-i mirror/http/directory string /ubuntu
|
||||||
|
d-i mirror/http/proxy string
|
||||||
|
|
||||||
|
# Alternatively: by default, the installer uses CC.archive.ubuntu.com where
|
||||||
|
# CC is the ISO-3166-2 code for the selected country. You can preseed this
|
||||||
|
# so that it does so without asking.
|
||||||
|
#d-i mirror/http/mirror select CC.archive.ubuntu.com
|
||||||
|
|
||||||
|
# Suite to install.
|
||||||
|
#d-i mirror/suite string squeeze
|
||||||
|
# Suite to use for loading installer components (optional).
|
||||||
|
#d-i mirror/udeb/suite string squeeze
|
||||||
|
# Components to use for loading installer components (optional).
|
||||||
|
#d-i mirror/udeb/components multiselect main, restricted
|
||||||
|
|
||||||
|
### Clock and time zone setup
|
||||||
|
# Controls whether or not the hardware clock is set to UTC.
|
||||||
|
d-i clock-setup/utc boolean true
|
||||||
|
|
||||||
|
# You may set this to any valid setting for $TZ; see the contents of
|
||||||
|
# /usr/share/zoneinfo/ for valid values.
|
||||||
|
d-i time/zone string US/Pacific
|
||||||
|
|
||||||
|
# Controls whether to use NTP to set the clock during the install
|
||||||
|
d-i clock-setup/ntp boolean true
|
||||||
|
# NTP server to use. The default is almost always fine here.
|
||||||
|
d-i clock-setup/ntp-server string 0.us.pool.ntp.org
|
||||||
|
|
||||||
|
### Partitioning
|
||||||
|
## Partitioning example
|
||||||
|
# If the system has free space you can choose to only partition that space.
|
||||||
|
# This is only honoured if partman-auto/method (below) is not set.
|
||||||
|
# Alternatives: custom, some_device, some_device_crypto, some_device_lvm.
|
||||||
|
#d-i partman-auto/init_automatically_partition select biggest_free
|
||||||
|
|
||||||
|
# Alternatively, you may specify a disk to partition. If the system has only
|
||||||
|
# one disk the installer will default to using that, but otherwise the device
|
||||||
|
# name must be given in traditional, non-devfs format (so e.g. /dev/hda or
|
||||||
|
# /dev/sda, and not e.g. /dev/discs/disc0/disc).
|
||||||
|
# For example, to use the first SCSI/SATA hard disk:
|
||||||
|
#d-i partman-auto/disk string /dev/sda
|
||||||
|
# In addition, you'll need to specify the method to use.
|
||||||
|
# The presently available methods are:
|
||||||
|
# - regular: use the usual partition types for your architecture
|
||||||
|
# - lvm: use LVM to partition the disk
|
||||||
|
# - crypto: use LVM within an encrypted partition
|
||||||
|
d-i partman-auto/method string regular
|
||||||
|
|
||||||
|
# If one of the disks that are going to be automatically partitioned
|
||||||
|
# contains an old LVM configuration, the user will normally receive a
|
||||||
|
# warning. This can be preseeded away...
|
||||||
|
d-i partman-lvm/device_remove_lvm boolean true
|
||||||
|
# The same applies to pre-existing software RAID array:
|
||||||
|
d-i partman-md/device_remove_md boolean true
|
||||||
|
# And the same goes for the confirmation to write the lvm partitions.
|
||||||
|
d-i partman-lvm/confirm boolean true
|
||||||
|
|
||||||
|
# For LVM partitioning, you can select how much of the volume group to use
|
||||||
|
# for logical volumes.
|
||||||
|
#d-i partman-auto-lvm/guided_size string max
|
||||||
|
#d-i partman-auto-lvm/guided_size string 10GB
|
||||||
|
#d-i partman-auto-lvm/guided_size string 50%
|
||||||
|
|
||||||
|
# You can choose one of the three predefined partitioning recipes:
|
||||||
|
# - atomic: all files in one partition
|
||||||
|
# - home: separate /home partition
|
||||||
|
# - multi: separate /home, /usr, /var, and /tmp partitions
|
||||||
|
d-i partman-auto/choose_recipe select atomic
|
||||||
|
|
||||||
|
# Or provide a recipe of your own...
|
||||||
|
# If you have a way to get a recipe file into the d-i environment, you can
|
||||||
|
# just point at it.
|
||||||
|
#d-i partman-auto/expert_recipe_file string /hd-media/recipe
|
||||||
|
|
||||||
|
# If not, you can put an entire recipe into the preconfiguration file in one
|
||||||
|
# (logical) line. This example creates a small /boot partition, suitable
|
||||||
|
# swap, and uses the rest of the space for the root partition:
|
||||||
|
#d-i partman-auto/expert_recipe string \
|
||||||
|
# boot-root :: \
|
||||||
|
# 40 50 100 ext3 \
|
||||||
|
# $primary{ } $bootable{ } \
|
||||||
|
# method{ format } format{ } \
|
||||||
|
# use_filesystem{ } filesystem{ ext3 } \
|
||||||
|
# mountpoint{ /boot } \
|
||||||
|
# . \
|
||||||
|
# 500 10000 1000000000 ext3 \
|
||||||
|
# method{ format } format{ } \
|
||||||
|
# use_filesystem{ } filesystem{ ext3 } \
|
||||||
|
# mountpoint{ / } \
|
||||||
|
# . \
|
||||||
|
# 64 512 300% linux-swap \
|
||||||
|
# method{ swap } format{ } \
|
||||||
|
# .
|
||||||
|
|
||||||
|
# If you just want to change the default filesystem from ext3 to something
|
||||||
|
# else, you can do that without providing a full recipe.
|
||||||
|
d-i partman/default_filesystem string ext3
|
||||||
|
|
||||||
|
# The full recipe format is documented in the file partman-auto-recipe.txt
|
||||||
|
# included in the 'debian-installer' package or available from D-I source
|
||||||
|
# repository. This also documents how to specify settings such as file
|
||||||
|
# system labels, volume group names and which physical devices to include
|
||||||
|
# in a volume group.
|
||||||
|
|
||||||
|
# This makes partman automatically partition without confirmation, provided
|
||||||
|
# that you told it what to do using one of the methods above.
|
||||||
|
d-i partman-partitioning/confirm_write_new_label boolean true
|
||||||
|
d-i partman/choose_partition select finish
|
||||||
|
d-i partman/confirm boolean true
|
||||||
|
d-i partman/confirm_nooverwrite boolean true
|
||||||
|
|
||||||
|
## Partitioning using RAID
|
||||||
|
# The method should be set to "raid".
|
||||||
|
#d-i partman-auto/method string raid
|
||||||
|
# Specify the disks to be partitioned. They will all get the same layout,
|
||||||
|
# so this will only work if the disks are the same size.
|
||||||
|
#d-i partman-auto/disk string /dev/sda /dev/sdb
|
||||||
|
|
||||||
|
# Next you need to specify the physical partitions that will be used.
|
||||||
|
#d-i partman-auto/expert_recipe string \
|
||||||
|
# multiraid :: \
|
||||||
|
# 1000 5000 4000 raid \
|
||||||
|
# $primary{ } method{ raid } \
|
||||||
|
# . \
|
||||||
|
# 64 512 300% raid \
|
||||||
|
# method{ raid } \
|
||||||
|
# . \
|
||||||
|
# 500 10000 1000000000 raid \
|
||||||
|
# method{ raid } \
|
||||||
|
# .
|
||||||
|
|
||||||
|
# Last you need to specify how the previously defined partitions will be
|
||||||
|
# used in the RAID setup. Remember to use the correct partition numbers
|
||||||
|
# for logical partitions. RAID levels 0, 1, 5, 6 and 10 are supported;
|
||||||
|
# devices are separated using "#".
|
||||||
|
# Parameters are:
|
||||||
|
# <raidtype> <devcount> <sparecount> <fstype> <mountpoint> \
|
||||||
|
# <devices> <sparedevices>
|
||||||
|
|
||||||
|
#d-i partman-auto-raid/recipe string \
|
||||||
|
# 1 2 0 ext3 / \
|
||||||
|
# /dev/sda1#/dev/sdb1 \
|
||||||
|
# . \
|
||||||
|
# 1 2 0 swap - \
|
||||||
|
# /dev/sda5#/dev/sdb5 \
|
||||||
|
# . \
|
||||||
|
# 0 2 0 ext3 /home \
|
||||||
|
# /dev/sda6#/dev/sdb6 \
|
||||||
|
# .
|
||||||
|
|
||||||
|
# For additional information see the file partman-auto-raid-recipe.txt
|
||||||
|
# included in the 'debian-installer' package or available from D-I source
|
||||||
|
# repository.
|
||||||
|
|
||||||
|
# This makes partman automatically partition without confirmation.
|
||||||
|
d-i partman-md/confirm boolean true
|
||||||
|
d-i partman-partitioning/confirm_write_new_label boolean true
|
||||||
|
d-i partman/choose_partition select finish
|
||||||
|
d-i partman/confirm boolean true
|
||||||
|
d-i partman/confirm_nooverwrite boolean true
|
||||||
|
|
||||||
|
## Controlling how partitions are mounted
|
||||||
|
# The default is to mount by UUID, but you can also choose "traditional" to
|
||||||
|
# use traditional device names, or "label" to try filesystem labels before
|
||||||
|
# falling back to UUIDs.
|
||||||
|
#d-i partman/mount_style select uuid
|
||||||
|
|
||||||
|
### Base system installation
|
||||||
|
# Configure APT to not install recommended packages by default. Use of this
|
||||||
|
# option can result in an incomplete system and should only be used by very
|
||||||
|
# experienced users.
|
||||||
|
#d-i base-installer/install-recommends boolean false
|
||||||
|
|
||||||
|
# The kernel image (meta) package to be installed; "none" can be used if no
|
||||||
|
# kernel is to be installed.
|
||||||
|
d-i base-installer/kernel/image string linux-virtual
|
||||||
|
|
||||||
|
### Account setup
|
||||||
|
# Skip creation of a root account (normal user account will be able to
|
||||||
|
# use sudo). The default is false; preseed this to true if you want to set
|
||||||
|
# a root password.
|
||||||
|
d-i passwd/root-login boolean true
|
||||||
|
# Alternatively, to skip creation of a normal user account.
|
||||||
|
d-i passwd/make-user boolean false
|
||||||
|
|
||||||
|
# Root password, either in clear text
|
||||||
|
d-i passwd/root-password password stackpass
|
||||||
|
d-i passwd/root-password-again password stackpass
|
||||||
|
# or encrypted using an MD5 hash.
|
||||||
|
#d-i passwd/root-password-crypted password [MD5 hash]
|
||||||
|
|
||||||
|
# To create a normal user account.
|
||||||
|
#d-i passwd/user-fullname string Ubuntu User
|
||||||
|
#d-i passwd/username string ubuntu
|
||||||
|
# Normal user's password, either in clear text
|
||||||
|
#d-i passwd/user-password password insecure
|
||||||
|
#d-i passwd/user-password-again password insecure
|
||||||
|
# or encrypted using an MD5 hash.
|
||||||
|
#d-i passwd/user-password-crypted password [MD5 hash]
|
||||||
|
# Create the first user with the specified UID instead of the default.
|
||||||
|
#d-i passwd/user-uid string 1010
|
||||||
|
# The installer will warn about weak passwords. If you are sure you know
|
||||||
|
# what you're doing and want to override it, uncomment this.
|
||||||
|
d-i user-setup/allow-password-weak boolean true
|
||||||
|
|
||||||
|
# The user account will be added to some standard initial groups. To
|
||||||
|
# override that, use this.
|
||||||
|
#d-i passwd/user-default-groups string audio cdrom video
|
||||||
|
|
||||||
|
# Set to true if you want to encrypt the first user's home directory.
|
||||||
|
d-i user-setup/encrypt-home boolean false
|
||||||
|
|
||||||
|
### Apt setup
|
||||||
|
# You can choose to install restricted and universe software, or to install
|
||||||
|
# software from the backports repository.
|
||||||
|
d-i apt-setup/restricted boolean true
|
||||||
|
d-i apt-setup/universe boolean true
|
||||||
|
d-i apt-setup/backports boolean true
|
||||||
|
# Uncomment this if you don't want to use a network mirror.
|
||||||
|
#d-i apt-setup/use_mirror boolean false
|
||||||
|
# Select which update services to use; define the mirrors to be used.
|
||||||
|
# Values shown below are the normal defaults.
|
||||||
|
#d-i apt-setup/services-select multiselect security
|
||||||
|
#d-i apt-setup/security_host string security.ubuntu.com
|
||||||
|
#d-i apt-setup/security_path string /ubuntu
|
||||||
|
|
||||||
|
# Additional repositories, local[0-9] available
|
||||||
|
#d-i apt-setup/local0/repository string \
|
||||||
|
# http://local.server/ubuntu squeeze main
|
||||||
|
#d-i apt-setup/local0/comment string local server
|
||||||
|
# Enable deb-src lines
|
||||||
|
#d-i apt-setup/local0/source boolean true
|
||||||
|
# URL to the public key of the local repository; you must provide a key or
|
||||||
|
# apt will complain about the unauthenticated repository and so the
|
||||||
|
# sources.list line will be left commented out
|
||||||
|
#d-i apt-setup/local0/key string http://local.server/key
|
||||||
|
|
||||||
|
# By default the installer requires that repositories be authenticated
|
||||||
|
# using a known gpg key. This setting can be used to disable that
|
||||||
|
# authentication. Warning: Insecure, not recommended.
|
||||||
|
#d-i debian-installer/allow_unauthenticated boolean true
|
||||||
|
|
||||||
|
### Package selection
|
||||||
|
#tasksel tasksel/first multiselect ubuntu-desktop
|
||||||
|
#tasksel tasksel/first multiselect lamp-server, print-server
|
||||||
|
#tasksel tasksel/first multiselect kubuntu-desktop
|
||||||
|
tasksel tasksel/first multiselect openssh-server
|
||||||
|
|
||||||
|
# Individual additional packages to install
|
||||||
|
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 safe-upgrade
|
||||||
|
|
||||||
|
# Language pack selection
|
||||||
|
#d-i pkgsel/language-packs multiselect de, en, zh
|
||||||
|
|
||||||
|
# Policy for applying updates. May be "none" (no automatic updates),
|
||||||
|
# "unattended-upgrades" (install security updates automatically), or
|
||||||
|
# "landscape" (manage system with Landscape).
|
||||||
|
d-i pkgsel/update-policy select unattended-upgrades
|
||||||
|
|
||||||
|
# Some versions of the installer can report back on what software you have
|
||||||
|
# installed, and what software you use. The default is not to report back,
|
||||||
|
# but sending reports helps the project determine what software is most
|
||||||
|
# popular and include it on CDs.
|
||||||
|
#popularity-contest popularity-contest/participate boolean false
|
||||||
|
|
||||||
|
# By default, the system's locate database will be updated after the
|
||||||
|
# installer has finished installing most packages. This may take a while, so
|
||||||
|
# if you don't want it, you can set this to "false" to turn it off.
|
||||||
|
d-i pkgsel/updatedb boolean false
|
||||||
|
|
||||||
|
### Boot loader installation
|
||||||
|
# Grub is the default boot loader (for x86). If you want lilo installed
|
||||||
|
# instead, uncomment this:
|
||||||
|
#d-i grub-installer/skip boolean true
|
||||||
|
# To also skip installing lilo, and install no bootloader, uncomment this
|
||||||
|
# too:
|
||||||
|
#d-i lilo-installer/skip boolean true
|
||||||
|
|
||||||
|
# With a few exceptions for unusual partitioning setups, GRUB 2 is now the
|
||||||
|
# default. If you need GRUB Legacy for some particular reason, then
|
||||||
|
# uncomment this:
|
||||||
|
d-i grub-installer/grub2_instead_of_grub_legacy boolean false
|
||||||
|
|
||||||
|
# This is fairly safe to set, it makes grub install automatically to the MBR
|
||||||
|
# if no other operating system is detected on the machine.
|
||||||
|
d-i grub-installer/only_debian boolean true
|
||||||
|
|
||||||
|
# This one makes grub-installer install to the MBR if it also finds some other
|
||||||
|
# OS, which is less safe as it might not be able to boot that other OS.
|
||||||
|
d-i grub-installer/with_other_os boolean true
|
||||||
|
|
||||||
|
# Alternatively, if you want to install to a location other than the mbr,
|
||||||
|
# uncomment and edit these lines:
|
||||||
|
#d-i grub-installer/only_debian boolean false
|
||||||
|
#d-i grub-installer/with_other_os boolean false
|
||||||
|
#d-i grub-installer/bootdev string (hd0,0)
|
||||||
|
# To install grub to multiple disks:
|
||||||
|
#d-i grub-installer/bootdev string (hd0,0) (hd1,0) (hd2,0)
|
||||||
|
|
||||||
|
# Optional password for grub, either in clear text
|
||||||
|
#d-i grub-installer/password password r00tme
|
||||||
|
#d-i grub-installer/password-again password r00tme
|
||||||
|
# or encrypted using an MD5 hash, see grub-md5-crypt(8).
|
||||||
|
#d-i grub-installer/password-crypted password [MD5 hash]
|
||||||
|
|
||||||
|
# Use the following option to add additional boot parameters for the
|
||||||
|
# installed system (if supported by the bootloader installer).
|
||||||
|
# Note: options passed to the installer will be added automatically.
|
||||||
|
#d-i debian-installer/add-kernel-opts string nousb
|
||||||
|
|
||||||
|
### Finishing up the installation
|
||||||
|
# During installations from serial console, the regular virtual consoles
|
||||||
|
# (VT1-VT6) are normally disabled in /etc/inittab. Uncomment the next
|
||||||
|
# line to prevent this.
|
||||||
|
d-i finish-install/keep-consoles boolean true
|
||||||
|
|
||||||
|
# Avoid that last message about the install being complete.
|
||||||
|
d-i finish-install/reboot_in_progress note
|
||||||
|
|
||||||
|
# This will prevent the installer from ejecting the CD during the reboot,
|
||||||
|
# which is useful in some situations.
|
||||||
|
#d-i cdrom-detect/eject boolean false
|
||||||
|
|
||||||
|
# This is how to make the installer shutdown when finished, but not
|
||||||
|
# reboot into the installed system.
|
||||||
|
#d-i debian-installer/exit/halt boolean true
|
||||||
|
# This will power off the machine instead of just halting it.
|
||||||
|
#d-i debian-installer/exit/poweroff boolean true
|
||||||
|
|
||||||
|
### X configuration
|
||||||
|
# X can detect the right driver for some cards, but if you're preseeding,
|
||||||
|
# you override whatever it chooses. Still, vesa will work most places.
|
||||||
|
#xserver-xorg xserver-xorg/config/device/driver select vesa
|
||||||
|
|
||||||
|
# A caveat with mouse autodetection is that if it fails, X will retry it
|
||||||
|
# over and over. So if it's preseeded to be done, there is a possibility of
|
||||||
|
# an infinite loop if the mouse is not autodetected.
|
||||||
|
#xserver-xorg xserver-xorg/autodetect_mouse boolean true
|
||||||
|
|
||||||
|
# Monitor autodetection is recommended.
|
||||||
|
xserver-xorg xserver-xorg/autodetect_monitor boolean true
|
||||||
|
# Uncomment if you have an LCD display.
|
||||||
|
#xserver-xorg xserver-xorg/config/monitor/lcd boolean true
|
||||||
|
# X has three configuration paths for the monitor. Here's how to preseed
|
||||||
|
# the "medium" path, which is always available. The "simple" path may not
|
||||||
|
# be available, and the "advanced" path asks too many questions.
|
||||||
|
xserver-xorg xserver-xorg/config/monitor/selection-method \
|
||||||
|
select medium
|
||||||
|
xserver-xorg xserver-xorg/config/monitor/mode-list \
|
||||||
|
select 1024x768 @ 60 Hz
|
||||||
|
|
||||||
|
### Preseeding other packages
|
||||||
|
# Depending on what software you choose to install, or if things go wrong
|
||||||
|
# during the installation process, it's possible that other questions may
|
||||||
|
# be asked. You can preseed those too, of course. To get a list of every
|
||||||
|
# possible question that could be asked during an install, do an
|
||||||
|
# installation, and then run these commands:
|
||||||
|
# debconf-get-selections --installer > file
|
||||||
|
# debconf-get-selections >> file
|
||||||
|
|
||||||
|
|
||||||
|
#### Advanced options
|
||||||
|
### Running custom commands during the installation
|
||||||
|
# d-i preseeding is inherently not secure. Nothing in the installer checks
|
||||||
|
# for attempts at buffer overflows or other exploits of the values of a
|
||||||
|
# preconfiguration file like this one. Only use preconfiguration files from
|
||||||
|
# trusted locations! To drive that home, and because it's generally useful,
|
||||||
|
# here's a way to run any shell command you'd like inside the installer,
|
||||||
|
# automatically.
|
||||||
|
|
||||||
|
# This first command is run as early as possible, just after
|
||||||
|
# preseeding is read.
|
||||||
|
#d-i preseed/early_command string anna-install some-udeb
|
||||||
|
# This command is run immediately before the partitioner starts. It may be
|
||||||
|
# useful to apply dynamic partitioner preseeding that depends on the state
|
||||||
|
# of the disks (which may not be visible when preseed/early_command runs).
|
||||||
|
#d-i partman/early_command \
|
||||||
|
# string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
|
||||||
|
# This command is run just before the install finishes, but when there is
|
||||||
|
# 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
|
114
install/conf/xenrc
Normal file
114
install/conf/xenrc
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#
|
||||||
|
# XenServer specific defaults for the /tools/xen/ scripts
|
||||||
|
# Similar to stackrc, you can override these in your localrc
|
||||||
|
#
|
||||||
|
|
||||||
|
# Name of this guest
|
||||||
|
GUEST_NAME=${GUEST_NAME:-CleanUbuntuVM}
|
||||||
|
|
||||||
|
# Template cleanup
|
||||||
|
CLEAN_TEMPLATES=${CLEAN_TEMPLATES:-false}
|
||||||
|
TNAME="jeos_template_for_ubuntu"
|
||||||
|
SNAME_TEMPLATE="jeos_snapshot_for_ubuntu"
|
||||||
|
|
||||||
|
# Devstack now contains many components. 4GB ram is not enough to prevent
|
||||||
|
# swapping and memory fragmentation - the latter of which can cause failures
|
||||||
|
# such as blkfront failing to plug a VBD and lead to random test fails.
|
||||||
|
#
|
||||||
|
# Set to 6GB so an 8GB XenServer VM can have a 1GB Dom0 and leave 1GB for VMs
|
||||||
|
OSDOMU_MEM_MB=6144
|
||||||
|
OSDOMU_VDI_GB=8
|
||||||
|
|
||||||
|
# Size of image
|
||||||
|
VDI_MB=${VDI_MB:-5000}
|
||||||
|
|
||||||
|
# Devstack now contains many components. 4GB ram is not enough to prevent
|
||||||
|
# swapping and memory fragmentation - the latter of which can cause failures
|
||||||
|
# such as blkfront failing to plug a VBD and lead to random test fails.
|
||||||
|
#
|
||||||
|
# Set to 6GB so an 8GB XenServer VM can have a 1GB Dom0 and leave 1GB for VMs
|
||||||
|
CLEAN_VM_MEM_MB=6144
|
||||||
|
CLEAN_VM_VDI_GB=8
|
||||||
|
|
||||||
|
# VM Password
|
||||||
|
GUEST_PASSWORD=${GUEST_PASSWORD:-secret}
|
||||||
|
|
||||||
|
# Extracted variables for OpenStack VM network device numbers.
|
||||||
|
# Make sure they form a continuous sequence starting from 0
|
||||||
|
MGT_DEV_NR=0
|
||||||
|
|
||||||
|
# Host Interface, i.e. the interface on the nova vm you want to expose the
|
||||||
|
# services on. Usually the device connected to the management network or the
|
||||||
|
# one connected to the public network is used.
|
||||||
|
HOST_IP_IFACE=${HOST_IP_IFACE:-"eth${MGT_DEV_NR}"}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Our nova host's network info
|
||||||
|
#
|
||||||
|
|
||||||
|
# Management network
|
||||||
|
MGT_IP=${MGT_IP:-dhcp}
|
||||||
|
MGT_NETMASK=${MGT_NETMASK:-ignored}
|
||||||
|
|
||||||
|
# Ubuntu install settings
|
||||||
|
UBUNTU_INST_RELEASE="xenial"
|
||||||
|
UBUNTU_INST_TEMPLATE_NAME="Ubuntu 16.04 (64-bit) for DevStack"
|
||||||
|
# For 12.04 use "precise" and update template name
|
||||||
|
# However, for 12.04, you should be using
|
||||||
|
# XenServer 6.1 and later or XCP 1.6 or later
|
||||||
|
# 11.10 is only really supported with XenServer 6.0.2 and later
|
||||||
|
UBUNTU_INST_ARCH="amd64"
|
||||||
|
UBUNTU_INST_HTTP_HOSTNAME="archive.ubuntu.com"
|
||||||
|
UBUNTU_INST_HTTP_DIRECTORY="/ubuntu"
|
||||||
|
UBUNTU_INST_HTTP_PROXY=""
|
||||||
|
UBUNTU_INST_LOCALE="en_US"
|
||||||
|
UBUNTU_INST_KEYBOARD="us"
|
||||||
|
# network configuration for ubuntu netinstall
|
||||||
|
UBUNTU_INST_IP="dhcp"
|
||||||
|
UBUNTU_INST_NAMESERVERS=""
|
||||||
|
UBUNTU_INST_NETMASK=""
|
||||||
|
UBUNTU_INST_GATEWAY=""
|
||||||
|
|
||||||
|
# Create a separate xvdb. Tis could be used as a backing device for cinder
|
||||||
|
# volumes. Specify
|
||||||
|
# XEN_XVDB_SIZE_GB=10
|
||||||
|
# VOLUME_BACKING_DEVICE=/dev/xvdb
|
||||||
|
# in your localrc to avoid kernel lockups:
|
||||||
|
# https://bugs.launchpad.net/cinder/+bug/1023755
|
||||||
|
#
|
||||||
|
# Set the size to 0 to avoid creation of additional disk.
|
||||||
|
XEN_XVDB_SIZE_GB=0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
#configuration for openstack
|
||||||
|
##
|
||||||
|
STACK_LABEL=DEVSTACK
|
||||||
|
|
||||||
|
##
|
||||||
|
# configuration for devstack DomU
|
||||||
|
##
|
||||||
|
|
||||||
|
# Name of DomU
|
||||||
|
DEV_STACK_DOMU_NAME=${DEV_STACK_DOMU_NAME:-DevStackOSDomU}
|
||||||
|
|
||||||
|
STACK_USER=stack
|
||||||
|
DOMZERO_USER=domzero
|
||||||
|
|
||||||
|
# Network mapping. Specify bridge names or network names. Network names may
|
||||||
|
# differ across localised versions of XenServer. If a given bridge/network
|
||||||
|
# was not found, a new network will be created with the specified name.
|
||||||
|
|
||||||
|
# Get the management network from the XS installation
|
||||||
|
VM_BRIDGE_OR_NET_NAME="OpenStack VM Network"
|
||||||
|
PUB_BRIDGE_OR_NET_NAME="OpenStack Public Network"
|
||||||
|
XEN_INT_BRIDGE_OR_NET_NAME="OpenStack VM Integration Network"
|
||||||
|
|
||||||
|
# Extracted variables for OpenStack VM network device numbers.
|
||||||
|
# Make sure they form a continuous sequence starting from 0
|
||||||
|
MGT_DEV_NR=0
|
||||||
|
VM_DEV_NR=1
|
||||||
|
PUB_DEV_NR=2
|
201
install/create_ubuntu_template.sh
Executable file
201
install/create_ubuntu_template.sh
Executable file
@ -0,0 +1,201 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This script must be run on a XenServer or XCP machine
|
||||||
|
#
|
||||||
|
# It creates a clean ubuntu VM template
|
||||||
|
#
|
||||||
|
# For more details see: README.md
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
export LC_ALL=C
|
||||||
|
|
||||||
|
# directory settings
|
||||||
|
THIS_DIR=$(cd $(dirname "$0") && pwd)
|
||||||
|
SCRIPT_DIR="$THIS_DIR/scripts"
|
||||||
|
COMM_DIR="$THIS_DIR/common"
|
||||||
|
CONF_DIR="$THIS_DIR/conf"
|
||||||
|
|
||||||
|
# Include onexit commands
|
||||||
|
. $SCRIPT_DIR/on_exit.sh
|
||||||
|
|
||||||
|
# xapi functions
|
||||||
|
|
||||||
|
. $COMM_DIR/functions
|
||||||
|
|
||||||
|
# Source params - override xenrc params in your local.conf to suit your taste
|
||||||
|
source $CONF_DIR/xenrc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Prepare Dom0
|
||||||
|
# including installing XenAPI plugins
|
||||||
|
#
|
||||||
|
|
||||||
|
cd $THIS_DIR
|
||||||
|
|
||||||
|
# Die if multiple hosts listed
|
||||||
|
if have_multiple_hosts; then
|
||||||
|
cat >&2 << EOF
|
||||||
|
ERROR: multiple hosts found. This might mean that the XenServer is a member
|
||||||
|
of a pool - Exiting.
|
||||||
|
EOF
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# Configure Networking
|
||||||
|
#
|
||||||
|
|
||||||
|
MGT_NETWORK=`xe pif-list management=true params=network-uuid minimal=true`
|
||||||
|
HOST_MGT_BRIDGE_OR_NET_NAME=`xe network-list uuid=$MGT_NETWORK params=bridge minimal=true`
|
||||||
|
|
||||||
|
setup_network "$HOST_MGT_BRIDGE_OR_NET_NAME"
|
||||||
|
|
||||||
|
if ! xenapi_is_listening_on "$HOST_MGT_BRIDGE_OR_NET_NAME"; then
|
||||||
|
cat >&2 << EOF
|
||||||
|
ERROR: XenAPI does not have an assigned IP address on the management network.
|
||||||
|
please review your XenServer network configuration file.
|
||||||
|
EOF
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
HOST_IP=$(xenapi_ip_on "$HOST_MGT_BRIDGE_OR_NET_NAME")
|
||||||
|
|
||||||
|
# Set up ip forwarding, but skip on xcp-xapi
|
||||||
|
if [ -a /etc/sysconfig/network ]; then
|
||||||
|
if ! grep -q "FORWARD_IPV4=YES" /etc/sysconfig/network; then
|
||||||
|
# FIXME: This doesn't work on reboot!
|
||||||
|
echo "FORWARD_IPV4=YES" >> /etc/sysconfig/network
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# Also, enable ip forwarding in rc.local, since the above trick isn't working
|
||||||
|
if ! grep -q "echo 1 >/proc/sys/net/ipv4/ip_forward" /etc/rc.local; then
|
||||||
|
echo "echo 1 >/proc/sys/net/ipv4/ip_forward" >> /etc/rc.local
|
||||||
|
fi
|
||||||
|
# Enable ip forwarding at runtime as well
|
||||||
|
echo 1 > /proc/sys/net/ipv4/ip_forward
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Shutdown previous runs
|
||||||
|
#
|
||||||
|
|
||||||
|
DO_SHUTDOWN=${DO_SHUTDOWN:-1}
|
||||||
|
CLEAN_TEMPLATES=${CLEAN_TEMPLATES:-false}
|
||||||
|
if [ "$DO_SHUTDOWN" = "1" ]; then
|
||||||
|
# Shutdown all VM's that created previously
|
||||||
|
clean_templates_arg=""
|
||||||
|
if $CLEAN_TEMPLATES; then
|
||||||
|
clean_templates_arg="--remove-templates"
|
||||||
|
fi
|
||||||
|
$SCRIPT_DIR/uninstall-os-vpx.sh $clean_templates_arg
|
||||||
|
|
||||||
|
# Destroy any instances that were launched
|
||||||
|
for uuid in `xe vm-list | grep -1 instance | grep uuid | sed "s/.*\: //g"`; do
|
||||||
|
echo "Shutting down nova instance $uuid"
|
||||||
|
xe vm-uninstall uuid=$uuid force=true
|
||||||
|
done
|
||||||
|
|
||||||
|
# Destroy orphaned vdis
|
||||||
|
for uuid in `xe vdi-list | grep -1 Glance | grep uuid | sed "s/.*\: //g"`; do
|
||||||
|
xe vdi-destroy uuid=$uuid
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Create Ubuntu VM template
|
||||||
|
# and/or create VM from template
|
||||||
|
#
|
||||||
|
|
||||||
|
templateuuid=$(xe template-list name-label="$TNAME")
|
||||||
|
if [ -z "$templateuuid" ]; then
|
||||||
|
#
|
||||||
|
# Install Ubuntu over network
|
||||||
|
#
|
||||||
|
UBUNTU_INST_BRIDGE_OR_NET_NAME=${UBUNTU_INST_BRIDGE_OR_NET_NAME:-"$HOST_MGT_BRIDGE_OR_NET_NAME"}
|
||||||
|
|
||||||
|
# always update the preseed file, incase we have a newer one
|
||||||
|
PRESEED_URL=${PRESEED_URL:-""}
|
||||||
|
if [ -z "$PRESEED_URL" ]; then
|
||||||
|
PRESEED_URL="${HOST_IP}/ubuntupreseed.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"
|
||||||
|
if [ -e "$ISO_DIR" ]; then
|
||||||
|
TOOLS_ISO=$(ls -1 $ISO_DIR/*-tools-*.iso | head -1)
|
||||||
|
TMP_DIR=/tmp/temp.$RANDOM
|
||||||
|
mkdir -p $TMP_DIR
|
||||||
|
mount -o loop $TOOLS_ISO $TMP_DIR
|
||||||
|
# the target deb package maybe *amd64.deb or *all.deb,
|
||||||
|
# so use *amd64.deb by default. If it doesn't exist,
|
||||||
|
# then use *all.deb.
|
||||||
|
DEB_FILE=$(ls $TMP_DIR/Linux/*amd64.deb || ls $TMP_DIR/Linux/*all.deb)
|
||||||
|
cp $DEB_FILE $HTTP_SERVER_LOCATION
|
||||||
|
umount $TMP_DIR
|
||||||
|
rmdir $TMP_DIR
|
||||||
|
XS_TOOLS_URL=${HOST_IP}/$(basename $DEB_FILE)
|
||||||
|
fi
|
||||||
|
|
||||||
|
cp -f $CONF_DIR/ubuntupreseed.cfg $HTTP_SERVER_LOCATION
|
||||||
|
cp -f $SCRIPT_DIR/ubuntu_latecommand.sh $HTTP_SERVER_LOCATION/latecommand.sh
|
||||||
|
|
||||||
|
sed \
|
||||||
|
-e "s,\(d-i mirror/http/hostname string\).*,\1 $UBUNTU_INST_HTTP_HOSTNAME,g" \
|
||||||
|
-e "s,\(d-i mirror/http/directory string\).*,\1 $UBUNTU_INST_HTTP_DIRECTORY,g" \
|
||||||
|
-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}/ubuntupreseed.cfg"
|
||||||
|
|
||||||
|
sed \
|
||||||
|
-e "s,@XS_TOOLS_URL@,$XS_TOOLS_URL,g" \
|
||||||
|
-i "${HTTP_SERVER_LOCATION}/latecommand.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Update the template
|
||||||
|
$SCRIPT_DIR/install_ubuntu_template.sh $PRESEED_URL
|
||||||
|
|
||||||
|
# create a new VM from the given template with eth0 attached to the given
|
||||||
|
# network
|
||||||
|
$SCRIPT_DIR/install-os-vpx.sh \
|
||||||
|
-t "$UBUNTU_INST_TEMPLATE_NAME" \
|
||||||
|
-n "$UBUNTU_INST_BRIDGE_OR_NET_NAME" \
|
||||||
|
-l "$GUEST_NAME"
|
||||||
|
|
||||||
|
set_vm_memory "$GUEST_NAME" "1024"
|
||||||
|
|
||||||
|
xe vm-start vm="$GUEST_NAME"
|
||||||
|
|
||||||
|
# wait for install to finish
|
||||||
|
wait_for_VM_to_halt "$GUEST_NAME"
|
||||||
|
|
||||||
|
# set VM to restart after a reboot
|
||||||
|
vm_uuid=$(xe_min vm-list name-label="$GUEST_NAME")
|
||||||
|
xe vm-param-set actions-after-reboot=Restart uuid="$vm_uuid"
|
||||||
|
|
||||||
|
# Make template from VM
|
||||||
|
snuuid=$(xe vm-snapshot vm="$GUEST_NAME" new-name-label="$SNAME_TEMPLATE")
|
||||||
|
xe snapshot-clone uuid=$snuuid new-name-label="$TNAME"
|
||||||
|
xe vm-uninstall vm="$GUEST_NAME" force=true
|
||||||
|
else
|
||||||
|
echo "the template has already exist"
|
||||||
|
fi
|
||||||
|
template_uuid=$(xe_min template-list name-label="$TNAME")
|
||||||
|
echo "$template_uuid"
|
||||||
|
exist_val=$(xe template-param-get uuid=$template_uuid param-name=PV-args)
|
||||||
|
echo "$exist_val"
|
||||||
|
if [ -n "$exist_val" ];
|
||||||
|
then
|
||||||
|
xe template-param-set uuid=$template_uuid PV-args=""
|
||||||
|
fi
|
135
install/scripts/install-os-vpx.sh
Executable file
135
install/scripts/install-os-vpx.sh
Executable file
@ -0,0 +1,135 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2011 Citrix Systems, Inc.
|
||||||
|
# Copyright 2011 OpenStack Foundation
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
BRIDGE=
|
||||||
|
NAME_LABEL=
|
||||||
|
TEMPLATE_NAME=
|
||||||
|
|
||||||
|
usage()
|
||||||
|
{
|
||||||
|
cat << EOF
|
||||||
|
|
||||||
|
Usage: $0 -t TEMPLATE_NW_INSTALL -l NAME_LABEL [-n BRIDGE]
|
||||||
|
|
||||||
|
Install a VM from a template
|
||||||
|
|
||||||
|
OPTIONS:
|
||||||
|
|
||||||
|
-h Shows this message.
|
||||||
|
-t template VM template to use
|
||||||
|
-l name Specifies the name label for the VM.
|
||||||
|
-n bridge The bridge/network to use for eth0. Defaults to xenbr0
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
get_params()
|
||||||
|
{
|
||||||
|
while getopts "hbn:r:l:t:" OPTION; do
|
||||||
|
case $OPTION in
|
||||||
|
h) usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
n)
|
||||||
|
BRIDGE=$OPTARG
|
||||||
|
;;
|
||||||
|
l)
|
||||||
|
NAME_LABEL=$OPTARG
|
||||||
|
;;
|
||||||
|
t)
|
||||||
|
TEMPLATE_NAME=$OPTARG
|
||||||
|
;;
|
||||||
|
?)
|
||||||
|
usage
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
if [[ -z $BRIDGE ]]; then
|
||||||
|
BRIDGE=xenbr0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z $TEMPLATE_NAME ]]; then
|
||||||
|
echo "Please specify a template name" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z $NAME_LABEL ]]; then
|
||||||
|
echo "Please specify a name-label for the new VM" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
xe_min()
|
||||||
|
{
|
||||||
|
local cmd="$1"
|
||||||
|
shift
|
||||||
|
xe "$cmd" --minimal "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
find_network()
|
||||||
|
{
|
||||||
|
result=$(xe_min network-list bridge="$1")
|
||||||
|
if [ "$result" = "" ]; then
|
||||||
|
result=$(xe_min network-list name-label="$1")
|
||||||
|
fi
|
||||||
|
echo "$result"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
create_vif()
|
||||||
|
{
|
||||||
|
local v="$1"
|
||||||
|
echo "Installing VM interface on [$BRIDGE]"
|
||||||
|
local out_network_uuid
|
||||||
|
out_network_uuid=$(find_network "$BRIDGE")
|
||||||
|
xe vif-create vm-uuid="$v" network-uuid="$out_network_uuid" device="0"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Make the VM auto-start on server boot.
|
||||||
|
set_auto_start()
|
||||||
|
{
|
||||||
|
local v="$1"
|
||||||
|
xe vm-param-set uuid="$v" other-config:auto_poweron=true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
destroy_vifs()
|
||||||
|
{
|
||||||
|
local v="$1"
|
||||||
|
IFS=,
|
||||||
|
for vif in $(xe_min vif-list vm-uuid="$v"); do
|
||||||
|
xe vif-destroy uuid="$vif"
|
||||||
|
done
|
||||||
|
unset IFS
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
get_params "$@"
|
||||||
|
|
||||||
|
vm_uuid=$(xe_min vm-install template="$TEMPLATE_NAME" new-name-label="$NAME_LABEL")
|
||||||
|
destroy_vifs "$vm_uuid"
|
||||||
|
set_auto_start "$vm_uuid"
|
||||||
|
create_vif "$vm_uuid"
|
||||||
|
xe vm-param-set actions-after-reboot=Destroy uuid="$vm_uuid"
|
86
install/scripts/install_ubuntu_template.sh
Executable file
86
install/scripts/install_ubuntu_template.sh
Executable file
@ -0,0 +1,86 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# This creates an Ubuntu Server 32bit or 64bit template
|
||||||
|
# on Xenserver 5.6.x, 6.0.x and 6.1.x
|
||||||
|
# The template does a net install only
|
||||||
|
#
|
||||||
|
# Based on a script by: David Markey <david.markey@citrix.com>
|
||||||
|
#
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
# This directory
|
||||||
|
THIS_DIR=$(cd $(dirname "$0") && pwd)
|
||||||
|
SCRIPT_DIR="$THIS_DIR/../scripts"
|
||||||
|
COMM_DIR="$THIS_DIR/../common"
|
||||||
|
CONF_DIR="$THIS_DIR/../conf"
|
||||||
|
# For default setings see xenrc
|
||||||
|
source $CONF_DIR/xenrc
|
||||||
|
|
||||||
|
# Get the params
|
||||||
|
preseed_url=$1
|
||||||
|
|
||||||
|
# Delete template or skip template creation as required
|
||||||
|
previous_template=$(xe template-list name-label="$UBUNTU_INST_TEMPLATE_NAME" \
|
||||||
|
params=uuid --minimal)
|
||||||
|
if [ -n "$previous_template" ]; then
|
||||||
|
if $CLEAN_TEMPLATES; then
|
||||||
|
xe template-param-clear param-name=other-config uuid=$previous_template
|
||||||
|
xe template-uninstall template-uuid=$previous_template force=true
|
||||||
|
else
|
||||||
|
echo "Template $UBUNTU_INST_TEMPLATE_NAME already present"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get built-in template
|
||||||
|
builtin_name="Debian Squeeze 6.0 (32-bit)"
|
||||||
|
builtin_uuid=$(xe template-list name-label="$builtin_name" --minimal)
|
||||||
|
if [[ -z $builtin_uuid ]]; then
|
||||||
|
echo "Can't find the Debian Squeeze 32bit template on your XenServer."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clone built-in template to create new template
|
||||||
|
new_uuid=$(xe vm-clone uuid=$builtin_uuid \
|
||||||
|
new-name-label="$UBUNTU_INST_TEMPLATE_NAME")
|
||||||
|
disk_size=$(($CLEAN_VM_VDI_GB * 1024 * 1024 * 1024))
|
||||||
|
|
||||||
|
# Some of these settings can be found in example preseed files
|
||||||
|
# however these need to be answered before the netinstall
|
||||||
|
# is ready to fetch the preseed file, and as such must be here
|
||||||
|
# to get a fully automated install
|
||||||
|
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=eth0 \
|
||||||
|
netcfg/get_hostname=os netcfg/get_domain=os auto \
|
||||||
|
url=${preseed_url}"
|
||||||
|
|
||||||
|
if [ "$UBUNTU_INST_IP" != "dhcp" ]; then
|
||||||
|
netcfgargs="netcfg/disable_autoconfig=true \
|
||||||
|
netcfg/get_nameservers=${UBUNTU_INST_NAMESERVERS} \
|
||||||
|
netcfg/get_ipaddress=${UBUNTU_INST_IP} \
|
||||||
|
netcfg/get_netmask=${UBUNTU_INST_NETMASK} \
|
||||||
|
netcfg/get_gateway=${UBUNTU_INST_GATEWAY} \
|
||||||
|
netcfg/confirm_static=true"
|
||||||
|
pvargs="${pvargs} ${netcfgargs}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
xe template-param-set uuid=$new_uuid \
|
||||||
|
other-config:install-methods=http \
|
||||||
|
other-config:install-repository="http://${UBUNTU_INST_HTTP_HOSTNAME}${UBUNTU_INST_HTTP_DIRECTORY}" \
|
||||||
|
PV-args="$pvargs" \
|
||||||
|
other-config:debian-release="$UBUNTU_INST_RELEASE" \
|
||||||
|
other-config:default_template=true \
|
||||||
|
other-config:disks='<provision><disk device="0" size="'$disk_size'" sr="" bootable="true" type="system"/></provision>' \
|
||||||
|
other-config:install-arch="$UBUNTU_INST_ARCH"
|
||||||
|
|
||||||
|
if ! [ -z "$UBUNTU_INST_HTTP_PROXY" ]; then
|
||||||
|
xe template-param-set uuid=$new_uuid \
|
||||||
|
other-config:install-proxy="$UBUNTU_INST_HTTP_PROXY"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Ubuntu template installed uuid:$new_uuid"
|
24
install/scripts/on_exit.sh
Executable file
24
install/scripts/on_exit.sh
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
if [ -z "${on_exit_hooks:-}" ]; then
|
||||||
|
on_exit_hooks=()
|
||||||
|
fi
|
||||||
|
|
||||||
|
on_exit()
|
||||||
|
{
|
||||||
|
for i in $(seq $((${#on_exit_hooks[*]} - 1)) -1 0); do
|
||||||
|
eval "${on_exit_hooks[$i]}"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
add_on_exit()
|
||||||
|
{
|
||||||
|
local n=${#on_exit_hooks[*]}
|
||||||
|
on_exit_hooks[$n]="$*"
|
||||||
|
if [[ $n -eq 0 ]]; then
|
||||||
|
trap on_exit EXIT
|
||||||
|
fi
|
||||||
|
}
|
14
install/scripts/ubuntu_latecommand.sh
Executable file
14
install/scripts/ubuntu_latecommand.sh
Executable 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
|
88
install/scripts/uninstall-os-vpx.sh
Executable file
88
install/scripts/uninstall-os-vpx.sh
Executable file
@ -0,0 +1,88 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2011 Citrix Systems, Inc.
|
||||||
|
# Copyright 2011 OpenStack Foundation
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
# By default, don't remove the templates
|
||||||
|
REMOVE_TEMPLATES=${REMOVE_TEMPLATES:-"false"}
|
||||||
|
if [ "$1" = "--remove-templates" ]; then
|
||||||
|
REMOVE_TEMPLATES=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
xe_min()
|
||||||
|
{
|
||||||
|
local cmd="$1"
|
||||||
|
shift
|
||||||
|
xe "$cmd" --minimal "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
destroy_vdi()
|
||||||
|
{
|
||||||
|
local vbd_uuid="$1"
|
||||||
|
local type
|
||||||
|
type=$(xe_min vbd-list uuid=$vbd_uuid params=type)
|
||||||
|
local dev
|
||||||
|
dev=$(xe_min vbd-list uuid=$vbd_uuid params=userdevice)
|
||||||
|
local vdi_uuid
|
||||||
|
vdi_uuid=$(xe_min vbd-list uuid=$vbd_uuid params=vdi-uuid)
|
||||||
|
|
||||||
|
if [ "$type" == 'Disk' ] && [ "$dev" != 'xvda' ] && [ "$dev" != '0' ]; then
|
||||||
|
xe vdi-destroy uuid=$vdi_uuid
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
uninstall()
|
||||||
|
{
|
||||||
|
local vm_uuid="$1"
|
||||||
|
local power_state
|
||||||
|
power_state=$(xe_min vm-list uuid=$vm_uuid params=power-state)
|
||||||
|
|
||||||
|
if [ "$power_state" != "halted" ]; then
|
||||||
|
xe vm-shutdown vm=$vm_uuid force=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
for v in $(xe_min vbd-list vm-uuid=$vm_uuid | sed -e 's/,/ /g'); do
|
||||||
|
destroy_vdi "$v"
|
||||||
|
done
|
||||||
|
|
||||||
|
xe vm-uninstall vm=$vm_uuid force=true >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
uninstall_template()
|
||||||
|
{
|
||||||
|
local vm_uuid="$1"
|
||||||
|
|
||||||
|
for v in $(xe_min vbd-list vm-uuid=$vm_uuid | sed -e 's/,/ /g'); do
|
||||||
|
destroy_vdi "$v"
|
||||||
|
done
|
||||||
|
|
||||||
|
xe template-uninstall template-uuid=$vm_uuid force=true >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
# remove the VMs and their disks
|
||||||
|
for u in $(xe_min vm-list other-config:os-vpx=true | sed -e 's/,/ /g'); do
|
||||||
|
uninstall "$u"
|
||||||
|
done
|
||||||
|
|
||||||
|
# remove the templates
|
||||||
|
if [ "$REMOVE_TEMPLATES" == "true" ]; then
|
||||||
|
for u in $(xe_min template-list other-config:os-vpx=true | sed -e 's/,/ /g'); do
|
||||||
|
uninstall_template "$u"
|
||||||
|
done
|
||||||
|
fi
|
Loading…
x
Reference in New Issue
Block a user