|
|
@ -1028,7 +1028,7 @@ function vm_boot() { |
|
|
|
echo " - Monitor: On host: telnet ${MONITOR_TELNET_HOST} ${MONITOR_TELNET_PORT}" |
|
|
|
echo " - Monitor: On host: telnet ${MONITOR_TELNET_HOST} ${MONITOR_TELNET_PORT}" |
|
|
|
echo "monitor-telnet,${MONITOR_TELNET_PORT},${MONITOR_TELNET_HOST}" >> "${VMDIR}/${VMNAME}.ports" |
|
|
|
echo "monitor-telnet,${MONITOR_TELNET_PORT},${MONITOR_TELNET_HOST}" >> "${VMDIR}/${VMNAME}.ports" |
|
|
|
elif [ "${MONITOR}" == "socket" ]; then |
|
|
|
elif [ "${MONITOR}" == "socket" ]; then |
|
|
|
args+=(-monitor unix:${VMDIR}/${VMNAME}-monitor.socket,server,nowait) |
|
|
|
args+=(-monitor unix:${VM_MONITOR_SOCKETPATH},server,nowait) |
|
|
|
echo " - Monitor: On host: nc -U \"${VMDIR}/${VMNAME}-monitor.socket\"" |
|
|
|
echo " - Monitor: On host: nc -U \"${VMDIR}/${VMNAME}-monitor.socket\"" |
|
|
|
else |
|
|
|
else |
|
|
|
:: |
|
|
|
:: |
|
|
@ -1141,6 +1141,7 @@ function usage() { |
|
|
|
echo " --monitor <type> : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none'" |
|
|
|
echo " --monitor <type> : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none'" |
|
|
|
echo " --monitor-telnet-host <ip/host> : Set telnet host for monitor. (default: 'localhost')" |
|
|
|
echo " --monitor-telnet-host <ip/host> : Set telnet host for monitor. (default: 'localhost')" |
|
|
|
echo " --monitor-telnet-port <port> : Set telnet port for monitor. (default: '4444')" |
|
|
|
echo " --monitor-telnet-port <port> : Set telnet port for monitor. (default: '4444')" |
|
|
|
|
|
|
|
echo " --monitor-cmd <CMD> : Send command to monitor if available. (Example: system_powerdown)" |
|
|
|
echo " --version : Print version" |
|
|
|
echo " --version : Print version" |
|
|
|
exit 1 |
|
|
|
exit 1 |
|
|
|
} |
|
|
|
} |
|
|
@ -1173,14 +1174,20 @@ function parse_ports_from_file { |
|
|
|
local FILE="${VMDIR}/${VMNAME}.ports" |
|
|
|
local FILE="${VMDIR}/${VMNAME}.ports" |
|
|
|
|
|
|
|
|
|
|
|
# parse ports |
|
|
|
# parse ports |
|
|
|
port_name=( $(cat "$FILE" | cut -d, -f1) ) |
|
|
|
local port_name=( $(cat "$FILE" | cut -d, -f1) ) |
|
|
|
port_number=( $(cat "$FILE" | cut -d, -f2) ) |
|
|
|
local port_number=( $(cat "$FILE" | cut -d, -f2) ) |
|
|
|
|
|
|
|
local host_name=( $(cat "$FILE" | gawk 'FS="," {print $3,"."}') ) |
|
|
|
|
|
|
|
|
|
|
|
for ((i=0; i<${#port_name[@]}; i++)); do |
|
|
|
for ((i=0; i<${#port_name[@]}; i++)); do |
|
|
|
if [ ${port_name[$i]} == 'ssh' ]; then |
|
|
|
if [ "${port_name[$i]}" == "ssh" ]; then |
|
|
|
SSH_PORT=${port_number[$i]} |
|
|
|
SSH_PORT="${port_number[$i]}" |
|
|
|
|
|
|
|
fi |
|
|
|
|
|
|
|
if [ "${port_name[$i]}" == "spice" ]; then |
|
|
|
|
|
|
|
SPICE_PORT="${port_number[$i]}" |
|
|
|
fi |
|
|
|
fi |
|
|
|
if [ ${port_name[$i]} == 'spice' ]; then |
|
|
|
if [ "${port_name[$i]}" == "monitor-telnet" ]; then |
|
|
|
SPICE_PORT=${port_number[$i]} |
|
|
|
MONITOR_TELNET_PORT="${port_number[$i]}" |
|
|
|
|
|
|
|
MONITOR_TELNET_HOST="${host_name[$i]}" |
|
|
|
fi |
|
|
|
fi |
|
|
|
done |
|
|
|
done |
|
|
|
} |
|
|
|
} |
|
|
@ -1189,6 +1196,45 @@ function is_numeric { |
|
|
|
[[ "$1" =~ ^[0-9]+$ ]] |
|
|
|
[[ "$1" =~ ^[0-9]+$ ]] |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function monitor_send_cmd { |
|
|
|
|
|
|
|
local MSG="${1}" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [ -z "${MSG}" ]; then |
|
|
|
|
|
|
|
echo "WARNING! Send to QEMU-Monitor: Message empty!" |
|
|
|
|
|
|
|
return 1 |
|
|
|
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Determine monitor channel |
|
|
|
|
|
|
|
local monitor_channel="" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [ -S "${VMDIR}/${VMNAME}-monitor.socket" ]; then |
|
|
|
|
|
|
|
monitor_channel="socket" |
|
|
|
|
|
|
|
elif [ -n "${MONITOR_TELNET_PORT}" ] && [ -n "${MONITOR_TELNET_HOST}" ]; then |
|
|
|
|
|
|
|
monitor_channel="telnet" |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
echo "WARNING! No qemu-monitor channel available - Couldn't send message to monitor!" |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case "${monitor_channel}" in |
|
|
|
|
|
|
|
socket) |
|
|
|
|
|
|
|
echo -e " - MON-SEND: ${MSG}" |
|
|
|
|
|
|
|
echo -e "${MSG}" | nc -N -U "${VM_MONITOR_SOCKETPATH}" 2>&1 > /dev/null |
|
|
|
|
|
|
|
;; |
|
|
|
|
|
|
|
telnet) |
|
|
|
|
|
|
|
echo -e " - MON-SEND: ${MSG}" |
|
|
|
|
|
|
|
echo -e "${MSG}" | nc -N "${MONITOR_TELNET_HOST}" "${MONITOR_TELNET_PORT}" 2>&1 > /dev/null |
|
|
|
|
|
|
|
;; |
|
|
|
|
|
|
|
*) |
|
|
|
|
|
|
|
echo "ERROR! This should never happen!" |
|
|
|
|
|
|
|
exit 1 |
|
|
|
|
|
|
|
;; |
|
|
|
|
|
|
|
esac |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return 0 |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
### MAIN |
|
|
|
### MAIN |
|
|
|
|
|
|
|
|
|
|
|
# Lowercase variables are used in the VM config file only |
|
|
|
# Lowercase variables are used in the VM config file only |
|
|
@ -1217,6 +1263,7 @@ public_dir="" |
|
|
|
monitor="socket" |
|
|
|
monitor="socket" |
|
|
|
monitor_telnet_port="4444" |
|
|
|
monitor_telnet_port="4444" |
|
|
|
monitor_telnet_host="localhost" |
|
|
|
monitor_telnet_host="localhost" |
|
|
|
|
|
|
|
monitor_cmd="" |
|
|
|
|
|
|
|
|
|
|
|
BRAILLE="" |
|
|
|
BRAILLE="" |
|
|
|
DELETE_DISK=0 |
|
|
|
DELETE_DISK=0 |
|
|
@ -1241,6 +1288,8 @@ VIEWER="" |
|
|
|
SSH_PORT="" |
|
|
|
SSH_PORT="" |
|
|
|
SPICE_PORT="" |
|
|
|
SPICE_PORT="" |
|
|
|
MONITOR="" |
|
|
|
MONITOR="" |
|
|
|
|
|
|
|
MONITOR_CMD="" |
|
|
|
|
|
|
|
VM_MONITOR_SOCKETPATH="" |
|
|
|
|
|
|
|
|
|
|
|
# shellcheck disable=SC2155 |
|
|
|
# shellcheck disable=SC2155 |
|
|
|
readonly LAUNCHER=$(basename "${0}") |
|
|
|
readonly LAUNCHER=$(basename "${0}") |
|
|
@ -1338,6 +1387,10 @@ else |
|
|
|
MONITOR="${2}" |
|
|
|
MONITOR="${2}" |
|
|
|
shift; |
|
|
|
shift; |
|
|
|
shift;; |
|
|
|
shift;; |
|
|
|
|
|
|
|
-monitor-cmd|--monitor-cmd) |
|
|
|
|
|
|
|
MONITOR_CMD="${2}" |
|
|
|
|
|
|
|
shift; |
|
|
|
|
|
|
|
shift;; |
|
|
|
-monitor-telnet-host|--monitor-telnet-host) |
|
|
|
-monitor-telnet-host|--monitor-telnet-host) |
|
|
|
MONITOR_TELNET_HOST="${2}" |
|
|
|
MONITOR_TELNET_HOST="${2}" |
|
|
|
shift; |
|
|
|
shift; |
|
|
@ -1369,6 +1422,7 @@ if [ -n "${VM}" ] && [ -e "${VM}" ]; then |
|
|
|
VMDIR=$(dirname "${disk_img}") |
|
|
|
VMDIR=$(dirname "${disk_img}") |
|
|
|
VMNAME=$(basename "${VM}" .conf) |
|
|
|
VMNAME=$(basename "${VM}" .conf) |
|
|
|
VMPATH=$(realpath "$(dirname "${VM}")") |
|
|
|
VMPATH=$(realpath "$(dirname "${VM}")") |
|
|
|
|
|
|
|
VM_MONITOR_SOCKETPATH="${VMDIR}/${VMNAME}-monitor.socket" |
|
|
|
|
|
|
|
|
|
|
|
# Backwards compatibility for ${driver_iso} |
|
|
|
# Backwards compatibility for ${driver_iso} |
|
|
|
if [ -n "${driver_iso}" ] && [ -z "${fixed_iso}" ]; then |
|
|
|
if [ -n "${driver_iso}" ] && [ -z "${fixed_iso}" ]; then |
|
|
@ -1503,9 +1557,11 @@ fi |
|
|
|
if [ $VM_UP -eq 0 ]; then |
|
|
|
if [ $VM_UP -eq 0 ]; then |
|
|
|
vm_boot |
|
|
|
vm_boot |
|
|
|
start_viewer |
|
|
|
start_viewer |
|
|
|
|
|
|
|
monitor_send_cmd "${MONITOR_CMD}" |
|
|
|
else |
|
|
|
else |
|
|
|
parse_ports_from_file |
|
|
|
parse_ports_from_file |
|
|
|
start_viewer |
|
|
|
start_viewer |
|
|
|
|
|
|
|
monitor_send_cmd "${MONITOR_CMD}" |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
# vim:tabstop=2:shiftwidth=2:expandtab |
|
|
|
# vim:tabstop=2:shiftwidth=2:expandtab |
|
|
|