blob: ab9cd6439418786fee832b87c5ec354ce63373d3 (
plain) (
tree)
|
|
################################################################################
# Include: write final machine configuration file #
################################################################################
finalize_machine_config() {
# Expected path to the final vbox file
VBOX_MACHINE_CONFIG="${VBOX_MACHINES_DIR}/${VM_CLEANNAME}/${VM_CLEANNAME}.xml"
# remove ':' from MAC addr for vbox and generate a VDE (virtual device ethernet)
# MAC addr from the first one (put in prefix 00DE)
VM_MAC_ADDR=$(echo ${VM_MAC_ADDR} | sed 's/://g')
VM_VDE_MAC_ADDR=$(echo ${VM_MAC_ADDR} | sed 's/^..../00DE/g')
# translate network kinds (nat, bridged, host-only)
# TODO: Server should prepare this in returned xml
case "${network_kind}" in
bridge*)
network_kind='HostOnlyInterface name="vboxnet0"'
;;
host*)
network_kind='HostOnlyInterface name="vboxnet2"'
;;
*)
network_kind='HostOnlyInterface name="vboxnet1"'
esac
sed -i "s,%VM_DISK_REDOLOGDIR%,$VBOX_SNAPSHOT_DIR,g" $TMPCONFIG
sed -i "s,%VM_DISK_PATH%,${VBOX_HDD_LINK},g" $TMPCONFIG
sed -i "s/%OpenSLX_MUUID%/{${MACHINE_UUID}}/g" $TMPCONFIG
sed -i "0,/%OpenSLX_HDDUUID_0/ s/%OpenSLX_HDDUUID_0%/{${HDD_UUID}}/" $TMPCONFIG
sed -i "0,/%OpenSLX_HDDUUID_0/ s/%OpenSLX_HDDUUID_0%/{${SNAPSHOT_UUID}}/" $TMPCONFIG
sed -i 's,%OpenSLX_CPU%,'"${CPU_CORES}"',g' $TMPCONFIG
sed -i 's,%OpenSLX_MEMORY%,'"${VM_MEM}"',g' $TMPCONFIG
# Add a HardDisk node for the snapshot
add_node \
"/VirtualBox/Machine/MediaRegistry/HardDisks/HardDisk" "HardDisk" \
"uuid={${SNAPSHOT_UUID}}" \
"location=$VBOX_SNAPSHOT_DIR/{${SNAPSHOT_UUID}}.vdi" \
"format=VDI" \
"type=Normal"
# add storage controller and 2 floppies to it
add_node \
"/VirtualBox/Machine/StorageControllers" "StorageController" \
"name=Floppy" \
"type=I82078" \
"PortCount=1" \
"useHostIOCache=true"
add_node \
'/VirtualBox/Machine/StorageControllers/StorageController[@name="Floppy"]' "AttachedDevice" \
"type=Floppy" \
"hotpluggable=false" \
"port=0" \
"device=0"
add_node \
'/VirtualBox/Machine/StorageControllers/StorageController[@name="Floppy"]' "AttachedDevice" \
"type=Floppy" \
"hotpluggable=false" \
"port=0" \
"device=1"
# add the slx floppy to the second drive
add_node \
'/VirtualBox/Machine/StorageControllers/StorageController/AttachedDevice[@device="1"]' "Image" \
"uuid={${SLX_FLOPPY_UUID}}"
# Add a node for the SharedFolder
add_node "/VirtualBox/Machine/Hardware" "SharedFolders"
if [ -n "${HOME_SHARE_NAME}" -a -n "${HOME_SHARE_PATH}" -a -d "${HOME_SHARE_PATH}" ]; then
add_node \
"/VirtualBox/Machine/Hardware/SharedFolders" "SharedFolder" \
"name=${HOME_SHARE_NAME}" \
"hostPath=${HOME_SHARE_PATH}" \
"writable=true" \
"autoMount=true"
fi
# set the MAC address
set_attr "/VirtualBox/Machine/Hardware/Network/Adapter" "MACAddress" "${VM_VDE_MAC_ADDR}"
# check if KVM is available and activate it if so
if source /run/hwinfo && [ "${HW_KVM}" = "ENABLED" ]; then
set_attr "/VirtualBox/Machine/Hardware/Paravirt" "provider" "KVM"
fi
# activate IOAPIC needed for multi core (?)
if [ $CPU_CORES -gt 1 ]; then
set_attr "/VirtualBox/Machine/Hardware/BIOS/IOAPIC" "enabled" "true"
fi
# PAE support?
local PAE_SUPPORT="$(grep -oE '\s+pae\s+' /proc/cpuinfo)"
local PAE_ENABLE="true"
[ -z "$PAE_SUPPORT" ] && PAE_ENABLE="false"
set_attr "/VirtualBox/Machine/Hardware/CPU/PAE" "enabled" "${PAE_ENABLE}"
# LongMode?
local LM_SUPPORT="$(grep -oE '\s+lm\s+' /proc/cpuinfo)"
local LM_ENABLE="true"
[ -z "$LM_SUPPORT" ] && LM_ENABLE="false"
set_attr "/VirtualBox/Machine/Hardware/CPU/LongMode" "enabled" "${LM_ENABLE}"
# Page size extensions?
local PSE_SUPPORT="$(grep -oE '\s+pse\s+' /proc/cpuinfo)"
local PSE_ENABLE="true"
[ -z "$PSE_SUPPORT" ] && PSE_ENABLE="false"
set_attr "/VirtualBox/Machine/Hardware/CPU/HardwareVirtExLargePages" "enabled" "${PSE_ENABLE}"
# EXPERIMENTAL: check for USB 3 support
local XHCI_OK="$(lsusb -t | grep xhci)"
if [ -n "$XHCI_OK" ]; then
del_node "/VirtualBox/Machine/Hardware/USB"
add_node "/VirtualBox/Machine/Hardware/USB/Controllers" "Controller" "name=xHCI" "type=XHCI"
fi
cp $TMPCONFIG /tmp/vbox-last-config
cp $TMPCONFIG $VBOX_MACHINE_CONFIG
}
call_post_source finalize_machine_config
|