
The current code looks for the installation ISO (and downloads it if the ISO is missing) even if the user requested that only Windows batch scripts be written. With this patch, osbash calls find_install-iso only if it was asked to build a basedisk on the local machine. Partial-Bug: 1312764 Implements: blueprint openstack-training-labs Change-Id: I7af15dcd4fa99671a85a924b23f434303049fcd2
119 lines
3.7 KiB
Bash
119 lines
3.7 KiB
Bash
# This bash library contains the main function that creates the base disk.
|
|
|
|
function vm_install_base {
|
|
local BASE_DISK=$1
|
|
local BASE_BUILD_DISK=$DISK_DIR/tmp-disk.vdi
|
|
|
|
# Port used for ssh forwarding when building base disk
|
|
: ${VM_BASE_SSH_PORT:=2229}
|
|
|
|
echo >&2 "$(date) osbash vm_install starts."
|
|
|
|
${WBATCH:-:} wbatch_begin_base
|
|
|
|
# Don't remove BASE_BUILD_DISK if we are just faking it for wbatch
|
|
${OSBASH:-:} rm -f "$BASE_BUILD_DISK"
|
|
${WBATCH:-:} wbatch_delete_disk "$BASE_BUILD_DISK"
|
|
|
|
vm_create "$VM_BASE_NAME"
|
|
vm_mem "$VM_BASE_NAME" "${VM_BASE_MEM:=512}"
|
|
|
|
if [ -z "${INSTALL_ISO-}" ]; then
|
|
local ISO_NAME="$(get_iso_name)"
|
|
|
|
if [ -z "$ISO_NAME" ]; then
|
|
echo >&2 "Either ISO URL or name needed (ISO_URL, INSTALL_ISO)."
|
|
exit 1
|
|
fi
|
|
INSTALL_ISO=$ISO_DIR/$ISO_NAME
|
|
# Don't look for ISO image if we are only doing wbatch
|
|
${OSBASH:-:} find_install-iso "$ISO_NAME"
|
|
fi
|
|
|
|
echo >&2 -e "Install ISO:\n\t$INSTALL_ISO"
|
|
$VBM storageattach "$VM_BASE_NAME" \
|
|
--storagectl IDE \
|
|
--port 0 \
|
|
--device 0 \
|
|
--type dvddrive \
|
|
--medium "$INSTALL_ISO"
|
|
|
|
vm_attach_guestadd-iso "$VM_BASE_NAME"
|
|
|
|
${OSBASH:-:} mkdir -pv "$DISK_DIR"
|
|
create_vdi "$BASE_BUILD_DISK" 8000
|
|
vm_attach_disk "$VM_BASE_NAME" "$BASE_BUILD_DISK"
|
|
|
|
#---------------------------------------------------------------------------
|
|
# Set up communication with base VM: ssh port forwarding by default,
|
|
# VirtualBox shared folders for wbatch
|
|
|
|
# wbatch runs cannot use ssh, so skip port forwarding in that case
|
|
${WBATCH:+:} vm_port "$VM_BASE_NAME" ssh "$VM_BASE_SSH_PORT" 22
|
|
|
|
# Automounted on /media/sf_bootstrap for first boot
|
|
${WBATCH:-:} vm_add_share_automount "$VM_BASE_NAME" "$SHARE_DIR" bootstrap
|
|
# Mounted on /$SHARE_NAME after first boot
|
|
${WBATCH:-:} vm_add_share "$VM_BASE_NAME" "$SHARE_DIR" "$SHARE_NAME"
|
|
#---------------------------------------------------------------------------
|
|
|
|
$VBM modifyvm "$VM_BASE_NAME" --boot1 dvd
|
|
|
|
# Configure autostart
|
|
autostart_reset
|
|
|
|
# For wbatch, install osbashauto as a boot service
|
|
${WBATCH:-:} autostart osbash activate_autostart.sh
|
|
|
|
autostart osbash base_fixups.sh
|
|
|
|
# By default, set by lib/osbash/lib.* to something like scripts.ubuntu
|
|
autostart_from_config "$BASE_INSTALL_SCRIPTS"
|
|
|
|
autostart scripts zero_empty.sh shutdown.sh
|
|
|
|
# Boot VM into distribution installer
|
|
vbox_boot "$VM_BASE_NAME"
|
|
|
|
local DELAY=5
|
|
echo >&2 "Waiting $DELAY seconds for VM \"$VM_BASE_NAME\" to come up"
|
|
vbox_sleep "$DELAY"
|
|
|
|
vbox_distro_start_installer "$VM_BASE_NAME"
|
|
|
|
echo >&2 "Installing operating system; waiting for reboot"
|
|
|
|
# Wait for ssh connection and execute scripts in autostart directory
|
|
# (for wbatch, osbashauto does the processing instead)
|
|
${WBATCH:+:} ssh_process_autostart "$VM_BASE_SSH_PORT" &
|
|
# After reboot
|
|
wait_for_autofiles
|
|
echo >&2 "Installation done for VM $VM_BASE_NAME"
|
|
|
|
vm_wait_for_shutdown "$VM_BASE_NAME"
|
|
|
|
# Detach disk from VM now or it will be deleted by vm_unregister_del
|
|
vm_detach_disk "$VM_BASE_NAME"
|
|
|
|
vm_unregister_del "$VM_BASE_NAME"
|
|
|
|
echo >&2 "Compacting $BASE_BUILD_DISK"
|
|
$VBM modifyhd "$BASE_BUILD_DISK" --compact
|
|
|
|
# This disk will be moved to a new name, and this name will be used for
|
|
# a new disk next time the script runs.
|
|
disk_unregister "$BASE_BUILD_DISK"
|
|
|
|
echo >&2 "Base disk created"
|
|
|
|
echo >&2 "Moving base disk to $BASE_DISK"
|
|
${OSBASH:-:} mv -vf "$BASE_BUILD_DISK" "$BASE_DISK"
|
|
${WBATCH:-:} wbatch_rename_disk "$BASE_BUILD_DISK" "$BASE_DISK"
|
|
|
|
${WBATCH:-:} wbatch_end_file
|
|
|
|
echo >&2 -e "$(date) osbash vm_install ends\n"
|
|
}
|
|
|
|
# vim: set ai ts=4 sw=4 et ft=sh:
|