116 lines
3.1 KiB
Bash
116 lines
3.1 KiB
Bash
# This bash library contains the main function that creates the base disk.
|
|
|
|
function vm_install_base {
|
|
local base_disk_name=$(get_base_disk_name)
|
|
local vm_name=base
|
|
|
|
echo >&2 "$(date) osbash vm_install starts."
|
|
|
|
if virsh_uses_kvm; then
|
|
echo -e "${CInfo:-}KVM support is available.${CReset:-}"
|
|
else
|
|
echo -e "${CError:-}No KVM support available. Using qemu.${CReset:-}"
|
|
fi
|
|
|
|
vm_delete "$vm_name"
|
|
|
|
if [ -z "${INSTALL_ISO-}" ]; then
|
|
|
|
if [ -z "$ISO_URL" ]; then
|
|
echo -e >&2 "${CMissing:-}Either ISO URL or name needed (ISO_URL, INSTALL_ISO).${CReset:-}"
|
|
exit 1
|
|
fi
|
|
|
|
find_install-iso
|
|
|
|
INSTALL_ISO=$ISO_DIR/$(get_iso_name)
|
|
fi
|
|
|
|
echo >&2 -e "${CInfo:-}Install ISO:\n\t${CData:-}$INSTALL_ISO${CReset:-}"
|
|
|
|
check_md5 "$INSTALL_ISO" "$ISO_MD5"
|
|
|
|
# Configure autostart
|
|
autostart_reset
|
|
|
|
autostart osbash/base_fixups.sh
|
|
|
|
# By default, set by lib/osbash/lib.* to something like scripts.ubuntu_base
|
|
autostart_from_config "$BASE_INSTALL_SCRIPTS"
|
|
|
|
autostart zero_empty.sh shutdown.sh
|
|
|
|
disk_create "$base_disk_name" "${BASE_DISK_SIZE:=10000}"
|
|
|
|
local console_type
|
|
if [ "$VM_UI" = "headless" ]; then
|
|
console_type="--noautoconsole"
|
|
elif [ "$VM_UI" = "vnc" ]; then
|
|
console_type="--graphics vnc,listen=0.0.0.0"
|
|
else
|
|
# gui option: should open a console viewer
|
|
console_type=""
|
|
fi
|
|
|
|
# Boot VM into distribution installer
|
|
(
|
|
source "$CONFIG_DIR/config.$vm_name"
|
|
$VIRT_INSTALL \
|
|
--disk "vol=$KVM_VOL_POOL/$base_disk_name,cache=none" \
|
|
--cdrom "$INSTALL_ISO" \
|
|
--name $vm_name \
|
|
--os-type linux \
|
|
--ram "${VM_MEM}" \
|
|
--vcpus 1 \
|
|
--virt-type kvm \
|
|
$console_type \
|
|
--wait=-1 \
|
|
&
|
|
)
|
|
|
|
local delay=10
|
|
echo >&2 "Waiting $delay seconds for VM \"$vm_name\" to come up."
|
|
conditional_sleep "$delay"
|
|
|
|
distro_start_installer "$vm_name"
|
|
|
|
echo -e >&2 "${CStatus:-}Installing operating system; waiting for reboot.${CReset:-}"
|
|
|
|
# Prevent "time stamp from the future" due to race between two sudos in
|
|
# VIRT_INSTALL (background) above and VIRSH below
|
|
sleep 1
|
|
|
|
echo >&2 "Waiting for VM to be defined."
|
|
until vm_is_running "$vm_name"; do
|
|
sleep 1
|
|
echo -n .
|
|
done
|
|
|
|
SSH_IP=$(node_to_ip "$vm_name")
|
|
|
|
echo >&2 "Waiting for ping returning from $SSH_IP."
|
|
while ! ping -c1 "$SSH_IP" > /dev/null; do
|
|
echo -n .
|
|
sleep 1
|
|
done
|
|
|
|
# Wait for ssh connection and execute scripts in autostart directory
|
|
ssh_process_autostart "$vm_name" &
|
|
# After reboot
|
|
wait_for_autofiles
|
|
echo -e >&2 "${CStatus:-}Installation done for VM ${CData:-}$vm_name${CReset:-}"
|
|
|
|
vm_wait_for_shutdown "$vm_name"
|
|
|
|
disk_compress "$base_disk_name"
|
|
|
|
# Just undefine the VM without deleting the base disk
|
|
$VIRSH undefine "$vm_name"
|
|
|
|
echo -e >&2 "${CStatus:-}Base disk created${CReset:-}"
|
|
|
|
echo >&2 -e "${CData:-}$(date) ${CStatus:-}osbash vm_install ends\n${CReset:-}"
|
|
}
|
|
|
|
# vim: set ai ts=4 sw=4 et ft=sh:
|