From 4e196d57b077df4778da412b612de156987144a1 Mon Sep 17 00:00:00 2001 From: franksmcb <44311495+franksmcb@users.noreply.github.com> Date: Fri, 22 Apr 2022 02:44:23 -0600 Subject: [PATCH 01/92] Add 22.04 support for Ubuntu and flavours (#441) --- quickget | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickget b/quickget index c1208d7..9c4a8cd 100755 --- a/quickget +++ b/quickget @@ -441,7 +441,7 @@ function releases_tails() { } function releases_ubuntu() { - local LTS_SUPPORT="14.04 16.04 18.04 20.04" + local LTS_SUPPORT="14.04 16.04 18.04 20.04 22.04" case "${OS}" in kubuntu|lubuntu|ubuntukylin|\ ubuntu-mate|ubuntustudio|xubuntu) From 71a1efaceb4d2a195c831128ea5d6191c3e6ef96 Mon Sep 17 00:00:00 2001 From: Heysion Date: Fri, 22 Apr 2022 16:45:14 +0800 Subject: [PATCH 02/92] fix: update debian upstream version 11.3.0 (#436) update debian upstream version 11.3.0 Log: Co-authored-by: Heysion --- quickget | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quickget b/quickget index 9c4a8cd..a530d8b 100755 --- a/quickget +++ b/quickget @@ -241,7 +241,7 @@ function releases_cachyos() { } function releases_debian() { - echo 10.11.0 11.2.0 + echo 10.11.0 11.2.0 11.3.0 } function editions_debian() { @@ -826,7 +826,7 @@ function get_debian() { local URL="" case ${RELEASE} in - 11.2.0) URL="https://cdimage.debian.org/debian-cd/${RELEASE}-live/amd64/iso-hybrid";; + 11.3.0) URL="https://cdimage.debian.org/debian-cd/${RELEASE}-live/amd64/iso-hybrid";; *) URL="https://cdimage.debian.org/cdimage/archive/${RELEASE}-live/amd64/iso-hybrid/";; esac From 187da46c3b38a8ad261c90901ea2370832ae897c Mon Sep 17 00:00:00 2001 From: Martin Wimpress Date: Fri, 22 Apr 2022 09:53:12 +0100 Subject: [PATCH 03/92] Bump version to 3.15 --- quickemu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickemu b/quickemu index 24e1007..a034e06 100755 --- a/quickemu +++ b/quickemu @@ -1124,7 +1124,7 @@ VMPATH="" # shellcheck disable=SC2155 readonly LAUNCHER=$(basename "${0}") readonly DISK_MIN_SIZE=$((197632 * 8)) -readonly VERSION="3.14" +readonly VERSION="3.15" # PUBLICSHARE is the only directory exposed to guest VMs for file # sharing via 9P, spice-webdavd and Samba. This path is not configurable. From 8a2057715c9294888b6a65a3c67df34aa9295d58 Mon Sep 17 00:00:00 2001 From: Radomir Ochtyra <32648297+radomuc@users.noreply.github.com> Date: Sat, 5 Mar 2022 00:11:08 +0100 Subject: [PATCH 04/92] Add support to reuse remote-client when call command again and support for other clients - add suport for custom ssh-port and spice-port - add suport for alternate viewer: 'remote-viewer' and 'none' - support implemented on commandline as well as for configuration file --- quickemu | 168 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 151 insertions(+), 17 deletions(-) diff --git a/quickemu b/quickemu index a034e06..8b9b41c 100755 --- a/quickemu +++ b/quickemu @@ -761,9 +761,11 @@ function vm_boot() { echo -n "" > "${VMDIR}/${VMNAME}.ports" - # Find a free port to expose ssh to the guest - local SSH_PORT="" - SSH_PORT=$(get_port 22220 9) + if [ -z "$SSH_PORT" ]; then + # Find a free port to expose ssh to the guest + SSH_PORT=$(get_port 22220 9) + fi + if [ -n "${SSH_PORT}" ]; then echo "ssh,${SSH_PORT}" >> "${VMDIR}/${VMNAME}.ports" NET="${NET},hostfwd=tcp::${SSH_PORT}-:22" @@ -783,10 +785,12 @@ function vm_boot() { done fi - # Find a free port for spice local SPICE="disable-ticketing=on" - local SPICE_PORT="" - SPICE_PORT=$(get_port 5930 9) + if [ -z "${SPICE_PORT}" ]; then + # Find a free port for spice + SPICE_PORT=$(get_port 5930 9) + fi + if [ -z "${SPICE_PORT}" ]; then echo " - SPICE: All SPICE ports have been exhausted." if [ "${OUTPUT}" == "none" ] || [ "${OUTPUT}" == "spice" ] || [ "${OUTPUT}" == "spice-app" ]; then @@ -1013,19 +1017,53 @@ function vm_boot() { SHELL_ARGS="${SHELL_ARGS//)/\\)}" SHELL_ARGS="${SHELL_ARGS//Quickemu Project/\"Quickemu Project\"}" - echo "${QEMU}" "${SHELL_ARGS}" >> "${VMDIR}/${VMNAME}.sh" - ${QEMU} "${args[@]}" > "${VMDIR}/${VMNAME}.log" & + if [ ${VM_UP} -eq 0 ]; then + echo "${QEMU}" "${SHELL_ARGS}" >> "${VMDIR}/${VMNAME}.sh" + ${QEMU} "${args[@]}" > "${VMDIR}/${VMNAME}.log" & + sleep 0.25 + fi - # If output is 'none' then SPICE was requested. - if [ "${OUTPUT}" == "spice" ]; then - if [ -n "${PUBLIC}" ]; then - spicy --title "${VMNAME}" --port "${SPICE_PORT}" --spice-shared-dir "${PUBLIC}" "${FULLSPICY}" >/dev/null 2>&1 & - else - spicy --title "${VMNAME}" --port "${SPICE_PORT}" "${FULLSPICY}" >/dev/null 2>&1 & + echo " - Process: Starting ${VM} as ${VMNAME} ($(cat "${VMDIR}/${VMNAME}.pid"))" +} + +function start_viewer { + errno=0 + if [ "${VIEWER}" != "none" ]; then + echo "---" + + # If output is 'none' then SPICE was requested. + if [ "${OUTPUT}" == "spice" ]; then + if [ "${VIEWER}" == "remote-viewer" ]; then + # show via viewer: remote-viewer + + if [ -n "${PUBLIC}" ]; then + echo " - Start viewer: ${VIEWER} --title \"${VMNAME}\" --spice-shared-dir \"${PUBLIC}\" ${FULLSPICY} \"spice://localhost:${SPICE_PORT}\" >/dev/null 2>&1 &" + ${VIEWER} --title "${VMNAME}" --spice-shared-dir "${PUBLIC}" ${FULLSPICY} "spice://localhost:${SPICE_PORT}" >/dev/null 2>&1 & + errno=$? + else + echo " - Start viewer: ${VIEWER} --title \"${VMNAME}\" ${FULLSPICY} \"spice://localhost:${SPICE_PORT}\" >/dev/null 2>&1 &" + ${VIEWER} --title "${VMNAME}" ${FULLSPICY} "spice://localhost:${SPICE_PORT}" >/dev/null 2>&1 & + errno=$? + fi + + elif [ "${VIEWER}" == "spicy" ]; then + # show via viewer: spicy + + if [ -n "${PUBLIC}" ]; then + echo " - Start viewer: ${VIEWER} --title \"${VMNAME}\" --port \"${SPICE_PORT}\" --spice-shared-dir \"${PUBLIC}\" \"${FULLSPICY}\" >/dev/null 2>&1 &" + ${VIEWER} --title "${VMNAME}" --port "${SPICE_PORT}" --spice-shared-dir "${PUBLIC}" "${FULLSPICY}" >/dev/null 2>&1 & + errno=$? + else + echo " - Start viewer: ${VIEWER} --title \"${VMNAME}\" --port \"${SPICE_PORT}\" \"${FULLSPICY}\" >/dev/null 2>&1 &" + ${VIEWER} --title "${VMNAME}" --port "${SPICE_PORT}" "${FULLSPICY}" >/dev/null 2>&1 & + errno=$? + fi + fi + if [ $errno -ne 0 ]; then + echo "WARNING! Could not start viewer(${VIEWER}) Err: $errno" + fi fi fi - sleep 0.25 - echo " - Process: Starting ${VM} as ${VMNAME} ($(cat "${VMDIR}/${VMNAME}.pid"))" } function shortcut_create { @@ -1067,6 +1105,9 @@ function usage() { echo " --snapshot delete : Delete a snapshot." echo " --snapshot info : Show disk/snapshot info." echo " --status-quo : Do not commit any changes to disk/snapshot." + echo " --viewer : Choose an alternative viewer. @Options: 'spicy' (default), 'remote-viewer', 'none'" + echo " --ssh-port : Set ssh-port manually" + echo " --spice-port : Set spice-port manually" echo " --version : Print version" exit 1 } @@ -1081,6 +1122,42 @@ function display_param_check() { fi } +function viewer_param_check() { + if [ "${VIEWER}" != "none" ] && [ "${VIEWER}" != "spicy" ] && [ "${VIEWER}" != "remote-viewer" ]; then + echo "ERROR! Requested viewer '${VIEWER}' is not recognised." + exit 1 + fi + if [ "${VIEWER}" == "spicy" ] && ! command -v spicy &>/dev/null; then + echo "ERROR! Requested 'spicy' as viewer, but 'spicy' is not installed." + exit 1 + elif [ "${VIEWER}" == "remote-viewer" ] && ! command -v remote-viewer &>/dev/null; then + echo "ERROR! Requested 'remote-viewer' as viewer, but 'remote-viewer' is not installed." + exit 1 + fi +} + +function parse_ports_from_file { + local FILE="${VMDIR}/${VMNAME}.ports" + + # parse ports + port_name=( $(cat "$FILE" | cut -d, -f1) ) + port_number=( $(cat "$FILE" | cut -d, -f2) ) + for ((i=0; i<${#port_name[@]}; i++)); do + if [ ${port_name[$i]} == 'ssh' ]; then + SSH_PORT=${port_number[$i]} + fi + if [ ${port_name[$i]} == 'spice' ]; then + SPICE_PORT=${port_number[$i]} + fi + done +} + +function is_numeric { + [[ "$1" =~ ^[0-9]+$ ]] +} + +### MAIN + # Lowercase variables are used in the VM config file only boot="efi" bridge="" @@ -1100,6 +1177,9 @@ ram="" secureboot="off" tpm="off" usb_devices=() +viewer="spicy" +ssh_port="" +spice_port="" BRAILLE="" DELETE_DISK=0 @@ -1120,6 +1200,9 @@ VM="" VMDIR="" VMNAME="" VMPATH="" +VIEWER="" +SSH_PORT="" +SPICE_PORT="" # shellcheck disable=SC2155 readonly LAUNCHER=$(basename "${0}") @@ -1213,6 +1296,18 @@ else VM="${2}" shift shift;; + -viewer|--viewer) + VIEWER="${2}" + shift + shift;; + -ssh-port|--ssh-port) + SSH_PORT="${2}" + shift; + shift;; + -spice-port|--spice-port) + SPICE_PORT="${2}" + shift; + shift;; -version|--version) echo "${VERSION}" exit;; @@ -1259,6 +1354,39 @@ if [ -n "${VM}" ] && [ -e "${VM}" ]; then fi fi + if [ -z "${VIEWER}" ]; then + VIEWER="${viewer}" + fi + viewer_param_check + + if [ -z "${SSH_PORT}" ]; then + SSH_PORT=${ssh_port} + fi + if [ -n "${SSH_PORT}" ] && ! is_numeric "${SSH_PORT}"; then + echo "ERROR: ssh-port must be a number!" + exit 1 + fi + + if [ -z "${SPICE_PORT}" ]; then + SPICE_PORT=${spice_port} + fi + if [ -n "${SPICE_PORT}" ] && ! is_numeric "${SPICE_PORT}"; then + echo "ERROR: spice-port must be a number!" + exit 1 + fi + + # Check if vm is already run + VM_PID=0 + VM_UP=0 + if [ -r "${VMDIR}/${VMNAME}.pid" ]; then + VM_PID=$(head -c50 "${VMDIR}/${VMNAME}.pid") + kill -0 ${VM_PID} 2>&1 >/dev/null + if [ $? -eq 0 ]; then + echo "VM already started!" + VM_UP=1 + fi + fi + if [ "${tpm}" == "on" ]; then SWTPM=$(command -v swtpm) if [ ! -e "${SWTPM}" ]; then @@ -1309,6 +1437,12 @@ if [ ${SHORTCUT} -eq 1 ]; then exit fi -vm_boot +if [ $VM_UP -eq 0 ]; then + vm_boot + start_viewer +else + parse_ports_from_file + start_viewer +fi # vim:tabstop=2:shiftwidth=2:expandtab From 21788f525db9bbe691c093e0717b284d06e63537 Mon Sep 17 00:00:00 2001 From: Radomir Ochtyra <32648297+radomuc@users.noreply.github.com> Date: Sat, 5 Mar 2022 20:43:00 +0100 Subject: [PATCH 05/92] Add support for qemu-monitor and custom public-directory - Add commandline parameter --public-dir for custom directory - Add commandline parameter --monitor for qemu-monitor support - Add commandline parameter --monitor-telnet-host and --monitor-telnet-port to configure qemu-monitor via telnet - .ports enhanced to provide data for monitor-telnet - Support implemented on commandline as well as for configuration file - Fixed bug regarding extra_args --- quickemu | 135 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 99 insertions(+), 36 deletions(-) diff --git a/quickemu b/quickemu index 8b9b41c..af9496a 100755 --- a/quickemu +++ b/quickemu @@ -900,8 +900,8 @@ function vm_boot() { -device usb-ccid -chardev spicevmc,id=ccid,name=smartcard -device ccid-card-passthru,chardev=ccid - -monitor none - -serial mon:stdio) + ) +# -serial mon:stdio) # FIXME: Check for device availability. qemu will fail to start otherwise if [ -n "${BRAILLE}" ]; then @@ -1005,8 +1005,37 @@ function vm_boot() { -device tpm-tis,tpmdev=tpm0) fi + if [ -z "${monitor}" ]; then + monitor="${monitor}" + fi + + if [ -z "${MONITOR_TELNET_HOST}" ]; then + MONITOR_TELNET_HOST="${monitor_telnet_host:-localhost}" + fi + if [ -z "${MONITOR_TELNET_PORT}" ]; then + MONITOR_TELNET_PORT="${monitor_telnet_port}" + fi + if [ -n "${MONITOR_TELNET_PORT}" ] && ! is_numeric "${MONITOR_TELNET_PORT}"; then + echo "ERROR: telnet-port must be a number!" + exit 1 + fi + + if [ "${MONITOR}" == "none" ]; then + args+=(-monitor none) + echo " - Monitor: (off)" + elif [ "${MONITOR}" == "telnet" ]; then + args+=(-monitor telnet:${MONITOR_TELNET_HOST}:${MONITOR_TELNET_PORT},server,nowait) + echo " - Monitor: On host: telnet ${MONITOR_TELNET_HOST} ${MONITOR_TELNET_PORT}" + echo "monitor-telnet,${MONITOR_TELNET_PORT},${MONITOR_TELNET_HOST}" >> "${VMDIR}/${VMNAME}.ports" + elif [ "${MONITOR}" == "socket" ]; then + args+=(-monitor unix:${VMDIR}/${VMNAME}-monitor.socket,server,nowait) + echo " - Monitor: On host: nc -U \"${VMDIR}/${VMNAME}-monitor.socket\"" + else + :: + fi + if [ -n "${extra_args}" ]; then - args+=("${extra_args}") + args+=(${extra_args}) fi # The OSK parameter contains parenthesis, they need to be escaped in the shell @@ -1092,23 +1121,27 @@ function usage() { echo " ${LAUNCHER} --vm ubuntu.conf" echo echo "You can also pass optional parameters" - echo " --braille : Enable braille support. Requires SDL." - echo " --delete-disk : Delete the disk image and EFI variables" - echo " --delete-vm : Delete the entire VM and it's configuration" - echo " --display : Select display backend. 'sdl' (default), 'gtk', 'none', or 'spice'" - echo " --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit)" - echo " --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers" - echo " --screen : Use specified screen to determine the window size." - echo " --shortcut : Create a desktop shortcut" - echo " --snapshot apply : Apply/restore a snapshot." - echo " --snapshot create : Create a snapshot." - echo " --snapshot delete : Delete a snapshot." - echo " --snapshot info : Show disk/snapshot info." - echo " --status-quo : Do not commit any changes to disk/snapshot." - echo " --viewer : Choose an alternative viewer. @Options: 'spicy' (default), 'remote-viewer', 'none'" - echo " --ssh-port : Set ssh-port manually" - echo " --spice-port : Set spice-port manually" - echo " --version : Print version" + echo " --braille : Enable braille support. Requires SDL." + echo " --delete-disk : Delete the disk image and EFI variables" + echo " --delete-vm : Delete the entire VM and it's configuration" + echo " --display : Select display backend. 'sdl' (default), 'gtk', 'none', or 'spice'" + echo " --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit)" + echo " --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers" + echo " --screen : Use specified screen to determine the window size." + echo " --shortcut : Create a desktop shortcut" + echo " --snapshot apply : Apply/restore a snapshot." + echo " --snapshot create : Create a snapshot." + echo " --snapshot delete : Delete a snapshot." + echo " --snapshot info : Show disk/snapshot info." + echo " --status-quo : Do not commit any changes to disk/snapshot." + echo " --viewer : Choose an alternative viewer. @Options: 'spicy' (default), 'remote-viewer', 'none'" + echo " --ssh-port : Set ssh-port manually" + echo " --spice-port : Set spice-port manually" + echo " --public-dir : expose share directory. @Options: '' (default: xdg-user-dir PUBLICSHARE), '', 'none'" + echo " --monitor : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none'" + echo " --monitor-telnet-host : Set telnet host for monitor. (default: 'localhost')" + echo " --monitor-telnet-port : Set telnet port for monitor. (default: '4444')" + echo " --version : Print version" exit 1 } @@ -1180,6 +1213,10 @@ usb_devices=() viewer="spicy" ssh_port="" spice_port="" +public_dir="" +monitor="socket" +monitor_telnet_port="4444" +monitor_telnet_host="localhost" BRAILLE="" DELETE_DISK=0 @@ -1203,28 +1240,13 @@ VMPATH="" VIEWER="" SSH_PORT="" SPICE_PORT="" +MONITOR="" # shellcheck disable=SC2155 readonly LAUNCHER=$(basename "${0}") readonly DISK_MIN_SIZE=$((197632 * 8)) readonly VERSION="3.15" -# PUBLICSHARE is the only directory exposed to guest VMs for file -# sharing via 9P, spice-webdavd and Samba. This path is not configurable. -if command -v xdg-user-dir &>/dev/null; then - PUBLIC=$(xdg-user-dir PUBLICSHARE) - if [ "${PUBLIC%/}" != "${HOME}" ]; then - if [ ! -d "${PUBLIC}" ]; then - mkdir -p "${PUBLIC}" - fi - PUBLIC_TAG="Public-${USER,,}" - # shellcheck disable=SC2012 - PUBLIC_PERMS=$(ls -ld "${PUBLIC}" | cut -d' ' -f1) - else - PUBLIC="" - fi -fi - # TODO: Make this run the native architecture binary QEMU=$(command -v qemu-system-x86_64) QEMU_IMG=$(command -v qemu-img) @@ -1308,6 +1330,22 @@ else SPICE_PORT="${2}" shift; shift;; + -public-dir|--public-dir) + PUBLIC="${2}" + shift; + shift;; + -monitor|--monitor) + MONITOR="${2}" + shift; + shift;; + -monitor-telnet-host|--monitor-telnet-host) + MONITOR_TELNET_HOST="${2}" + shift; + shift;; + -monitor-telnet-port|--monitor-telnet-port) + MONITOR_TELNET_PORT="${2}" + shift; + shift;; -version|--version) echo "${VERSION}" exit;; @@ -1359,6 +1397,31 @@ if [ -n "${VM}" ] && [ -e "${VM}" ]; then fi viewer_param_check + if [ -z "${PUBLIC}" ]; then + PUBLIC="${public_dir}" + fi + + if [ "${PUBLIC}" == "none" ]; then + PUBLIC="" + else + # PUBLICSHARE is the only directory exposed to guest VMs for file + # sharing via 9P, spice-webdavd and Samba. This path is not configurable. + if [ -z "${PUBLIC}" ]; then + if command -v xdg-user-dir &>/dev/null; then + PUBLIC=$(xdg-user-dir PUBLICSHARE) + fi + fi + + if [ ! -d "${PUBLIC}" ]; then + echo "ERROR! Public directory: '${PUBLIC}' doesn't exist!" + exit 1 + fi + + PUBLIC_TAG="Public-${USER,,}" + # shellcheck disable=SC2012 + PUBLIC_PERMS=$(ls -ld "${PUBLIC}" | cut -d' ' -f1) + fi + if [ -z "${SSH_PORT}" ]; then SSH_PORT=${ssh_port} fi From bd00b34067047e5cce6d10e526691f1aba5844ea Mon Sep 17 00:00:00 2001 From: Radomir Ochtyra <32648297+radomuc@users.noreply.github.com> Date: Sun, 6 Mar 2022 04:18:20 +0100 Subject: [PATCH 06/92] Add support to send command to QEMU-Monitor - Add commandline parameter --monitor-cmd - Support implemented on commandline as well as for configuration file --- quickemu | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 63 insertions(+), 7 deletions(-) diff --git a/quickemu b/quickemu index af9496a..22a6e0d 100755 --- a/quickemu +++ b/quickemu @@ -1028,7 +1028,7 @@ function vm_boot() { echo " - Monitor: On host: telnet ${MONITOR_TELNET_HOST} ${MONITOR_TELNET_PORT}" echo "monitor-telnet,${MONITOR_TELNET_PORT},${MONITOR_TELNET_HOST}" >> "${VMDIR}/${VMNAME}.ports" 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\"" else :: @@ -1141,6 +1141,7 @@ function usage() { echo " --monitor : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none'" echo " --monitor-telnet-host : Set telnet host for monitor. (default: 'localhost')" echo " --monitor-telnet-port : Set telnet port for monitor. (default: '4444')" + echo " --monitor-cmd : Send command to monitor if available. (Example: system_powerdown)" echo " --version : Print version" exit 1 } @@ -1173,14 +1174,20 @@ function parse_ports_from_file { local FILE="${VMDIR}/${VMNAME}.ports" # parse ports - port_name=( $(cat "$FILE" | cut -d, -f1) ) - port_number=( $(cat "$FILE" | cut -d, -f2) ) + local port_name=( $(cat "$FILE" | cut -d, -f1) ) + 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 - if [ ${port_name[$i]} == 'ssh' ]; then - SSH_PORT=${port_number[$i]} + if [ "${port_name[$i]}" == "ssh" ]; then + SSH_PORT="${port_number[$i]}" fi - if [ ${port_name[$i]} == 'spice' ]; then - SPICE_PORT=${port_number[$i]} + if [ "${port_name[$i]}" == "spice" ]; then + SPICE_PORT="${port_number[$i]}" + fi + if [ "${port_name[$i]}" == "monitor-telnet" ]; then + MONITOR_TELNET_PORT="${port_number[$i]}" + MONITOR_TELNET_HOST="${host_name[$i]}" fi done } @@ -1189,6 +1196,45 @@ function is_numeric { [[ "$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 # Lowercase variables are used in the VM config file only @@ -1217,6 +1263,7 @@ public_dir="" monitor="socket" monitor_telnet_port="4444" monitor_telnet_host="localhost" +monitor_cmd="" BRAILLE="" DELETE_DISK=0 @@ -1241,6 +1288,8 @@ VIEWER="" SSH_PORT="" SPICE_PORT="" MONITOR="" +MONITOR_CMD="" +VM_MONITOR_SOCKETPATH="" # shellcheck disable=SC2155 readonly LAUNCHER=$(basename "${0}") @@ -1338,6 +1387,10 @@ else MONITOR="${2}" shift; shift;; + -monitor-cmd|--monitor-cmd) + MONITOR_CMD="${2}" + shift; + shift;; -monitor-telnet-host|--monitor-telnet-host) MONITOR_TELNET_HOST="${2}" shift; @@ -1369,6 +1422,7 @@ if [ -n "${VM}" ] && [ -e "${VM}" ]; then VMDIR=$(dirname "${disk_img}") VMNAME=$(basename "${VM}" .conf) VMPATH=$(realpath "$(dirname "${VM}")") + VM_MONITOR_SOCKETPATH="${VMDIR}/${VMNAME}-monitor.socket" # Backwards compatibility for ${driver_iso} if [ -n "${driver_iso}" ] && [ -z "${fixed_iso}" ]; then @@ -1503,9 +1557,11 @@ fi if [ $VM_UP -eq 0 ]; then vm_boot start_viewer + monitor_send_cmd "${MONITOR_CMD}" else parse_ports_from_file start_viewer + monitor_send_cmd "${MONITOR_CMD}" fi # vim:tabstop=2:shiftwidth=2:expandtab From a13e6735e7c3b1d9aafd742d08fa28607a3152bf Mon Sep 17 00:00:00 2001 From: Radomir Ochtyra <32648297+radomuc@users.noreply.github.com> Date: Sun, 6 Mar 2022 22:55:33 +0100 Subject: [PATCH 07/92] Add support to connect guest-console via serial - support commandline parameter --serial, --serial-telnet-host and --serial-telnet-port - support serial options: 'socket', 'telnet' and 'none' - add support to find free ports for monitor-telnet and serial-telnet - replace nc with socat - change default port for monitor-telnet to 4440 - some bugfix --- quickemu | 106 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 86 insertions(+), 20 deletions(-) diff --git a/quickemu b/quickemu index 22a6e0d..46601a1 100755 --- a/quickemu +++ b/quickemu @@ -1005,8 +1005,8 @@ function vm_boot() { -device tpm-tis,tpmdev=tpm0) fi - if [ -z "${monitor}" ]; then - monitor="${monitor}" + if [ -z "${MONITOR}" ]; then + MONITOR="${monitor:-none}" fi if [ -z "${MONITOR_TELNET_HOST}" ]; then @@ -1024,14 +1024,60 @@ function vm_boot() { args+=(-monitor none) echo " - Monitor: (off)" elif [ "${MONITOR}" == "telnet" ]; then - args+=(-monitor telnet:${MONITOR_TELNET_HOST}:${MONITOR_TELNET_PORT},server,nowait) - echo " - Monitor: On host: telnet ${MONITOR_TELNET_HOST} ${MONITOR_TELNET_PORT}" - echo "monitor-telnet,${MONITOR_TELNET_PORT},${MONITOR_TELNET_HOST}" >> "${VMDIR}/${VMNAME}.ports" + # Find a free port to expose monitor-telnet to the guest + local temp_port="$(get_port ${MONITOR_TELNET_PORT} 9)" + if [ -z "${temp_port}" ]; then + echo " - Monitor: All Monitor-Telnet ports have been exhausted." + else + MONITOR_TELNET_PORT="${temp_port}" + args+=(-monitor telnet:${MONITOR_TELNET_HOST}:${MONITOR_TELNET_PORT},server,nowait) + echo " - Monitor: On host: telnet ${MONITOR_TELNET_HOST} ${MONITOR_TELNET_PORT}" + echo "monitor-telnet,${MONITOR_TELNET_PORT},${MONITOR_TELNET_HOST}" >> "${VMDIR}/${VMNAME}.ports" + fi elif [ "${MONITOR}" == "socket" ]; then args+=(-monitor unix:${VM_MONITOR_SOCKETPATH},server,nowait) - echo " - Monitor: On host: nc -U \"${VMDIR}/${VMNAME}-monitor.socket\"" + echo " - Monitor: On host: nc -U \"${VM_MONITOR_SOCKETPATH}\"" + echo " or : socat -,echo=0,icanon=0 unix-connect:${VM_MONITOR_SOCKETPATH}" else - :: + echo "ERROR! \"${MONITOR}\" is an unknown monitor option." + exit 1 + fi + + if [ -z "${SERIAL}" ]; then + SERIAL="${serial:-none}" + fi + + if [ -z "${SERIAL_TELNET_HOST}" ]; then + SERIAL_TELNET_HOST="${serial_telnet_host:-localhost}" + fi + if [ -z "${SERIAL_TELNET_PORT}" ]; then + SERIAL_TELNET_PORT="${serial_telnet_port}" + fi + if [ -n "${SERIAL_TELNET_PORT}" ] && ! is_numeric "${SERIAL_TELNET_PORT}"; then + echo "ERROR: serial-port must be a number!" + exit 1 + fi + + if [ "${SERIAL}" == "none" ]; then + args+=(-serial none) + elif [ "${SERIAL}" == "telnet" ]; then + # Find a free port to expose serial-telnet to the guest + local temp_port="$(get_port ${SERIAL_TELNET_PORT} 9)" + if [ -z "${temp_port}" ]; then + echo " - Serial: All Serial-Telnet ports have been exhausted." + else + SERIAL_TELNET_PORT="${temp_port}" + args+=(-serial telnet:${SERIAL_TELNET_HOST}:${SERIAL_TELNET_PORT},server,nowait) + echo " - Serial: On host: telnet ${SERIAL_TELNET_HOST} ${SERIAL_TELNET_PORT}" + echo "serial-telnet,${SERIAL_TELNET_PORT},${SERIAL_TELNET_HOST}" >> "${VMDIR}/${VMNAME}.ports" + fi + elif [ "${SERIAL}" == "socket" ]; then + args+=(-serial unix:${VM_SERIAL_SOCKETPATH},server,nowait) + echo " - Serial: On host: nc -U \"${VM_SERIAL_SOCKETPATH}\"" + echo " or : socat -,echo=0,icanon=0 unix-connect:${VM_SERIAL_SOCKETPATH}" + else + echo "ERROR! \"${SERIAL}\" is an unknown serial option." + exit 1 fi if [ -n "${extra_args}" ]; then @@ -1140,19 +1186,20 @@ function usage() { echo " --public-dir : expose share directory. @Options: '' (default: xdg-user-dir PUBLICSHARE), '', 'none'" echo " --monitor : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none'" echo " --monitor-telnet-host : Set telnet host for monitor. (default: 'localhost')" - echo " --monitor-telnet-port : Set telnet port for monitor. (default: '4444')" + echo " --monitor-telnet-port : Set telnet port for monitor. (default: '4440')" echo " --monitor-cmd : Send command to monitor if available. (Example: system_powerdown)" + echo " --serial : Set serial connection type. @Options: 'socket' (default), 'telnet', 'none'" + echo " --serial-telnet-host : Set telnet host for serial. (default: 'localhost')" + echo " --serial-telnet-port : Set telnet port for serial. (default: '6660')" echo " --version : Print version" exit 1 } function display_param_check() { + # @ASK: accept "spice-app" as output ? if [ "${OUTPUT}" != "gtk" ] && [ "${OUTPUT}" != "none" ] && [ "${OUTPUT}" != "sdl" ] && [ "${OUTPUT}" != "spice" ]; then echo "ERROR! Requested output '${OUTPUT}' is not recognised." exit 1 - elif [ "${OUTPUT}" == "spice" ] && ! command -v spicy &>/dev/null; then - echo "ERROR! Requested SPICE display, but 'spicy' is not installed." - exit 1 fi } @@ -1181,13 +1228,14 @@ function parse_ports_from_file { for ((i=0; i<${#port_name[@]}; i++)); do if [ "${port_name[$i]}" == "ssh" ]; then SSH_PORT="${port_number[$i]}" - fi - if [ "${port_name[$i]}" == "spice" ]; then + elif [ "${port_name[$i]}" == "spice" ]; then SPICE_PORT="${port_number[$i]}" - fi - if [ "${port_name[$i]}" == "monitor-telnet" ]; then + elif [ "${port_name[$i]}" == "monitor-telnet" ]; then MONITOR_TELNET_PORT="${port_number[$i]}" MONITOR_TELNET_HOST="${host_name[$i]}" + elif [ "${port_name[$i]}" == "serial-telnet" ]; then + SERIAL_TELNET_PORT="${port_number[$i]}" + SERIAL_TELNET_HOST="${host_name[$i]}" fi done } @@ -1220,11 +1268,11 @@ function monitor_send_cmd { case "${monitor_channel}" in socket) echo -e " - MON-SEND: ${MSG}" - echo -e "${MSG}" | nc -N -U "${VM_MONITOR_SOCKETPATH}" 2>&1 > /dev/null + echo -e "${MSG}" | socat -,shut-down unix-connect:"${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 -e "${MSG}" | socat - tcp:"${MONITOR_TELNET_HOST}":"${MONITOR_TELNET_PORT}" 2>&1 > /dev/null ;; *) echo "ERROR! This should never happen!" @@ -1261,9 +1309,12 @@ ssh_port="" spice_port="" public_dir="" monitor="socket" -monitor_telnet_port="4444" +monitor_telnet_port="4440" monitor_telnet_host="localhost" monitor_cmd="" +serial="socket" +serial_telnet_port="6660" +serial_telnet_host="localhost" BRAILLE="" DELETE_DISK=0 @@ -1290,6 +1341,8 @@ SPICE_PORT="" MONITOR="" MONITOR_CMD="" VM_MONITOR_SOCKETPATH="" +VM_SERIAL_SOCKETPATH="" +SERIAL="" # shellcheck disable=SC2155 readonly LAUNCHER=$(basename "${0}") @@ -1399,6 +1452,18 @@ else MONITOR_TELNET_PORT="${2}" shift; shift;; + -serial|--serial) + SERIAL="${2}" + shift; + shift;; + -serial-telnet-host|--serial-telnet-host) + SERIAL_TELNET_HOST="${2}" + shift; + shift;; + -serial-telnet-port|--serial-telnet-port) + SERIAL_TELNET_PORT="${2}" + shift; + shift;; -version|--version) echo "${VERSION}" exit;; @@ -1423,6 +1488,7 @@ if [ -n "${VM}" ] && [ -e "${VM}" ]; then VMNAME=$(basename "${VM}" .conf) VMPATH=$(realpath "$(dirname "${VM}")") VM_MONITOR_SOCKETPATH="${VMDIR}/${VMNAME}-monitor.socket" + VM_SERIAL_SOCKETPATH="${VMDIR}/${VMNAME}-serial.socket" # Backwards compatibility for ${driver_iso} if [ -n "${driver_iso}" ] && [ -z "${fixed_iso}" ]; then @@ -1557,11 +1623,11 @@ fi if [ $VM_UP -eq 0 ]; then vm_boot start_viewer - monitor_send_cmd "${MONITOR_CMD}" + [ -n "${MONITOR_CMD}" ] && monitor_send_cmd "${MONITOR_CMD}" else parse_ports_from_file start_viewer - monitor_send_cmd "${MONITOR_CMD}" + [ -n "${MONITOR_CMD}" ] &&monitor_send_cmd "${MONITOR_CMD}" fi # vim:tabstop=2:shiftwidth=2:expandtab From 29efdbbdc075bf355329e7dfbeb47ab462ddc144 Mon Sep 17 00:00:00 2001 From: Radomir Ochtyra <32648297+radomuc@users.noreply.github.com> Date: Mon, 14 Mar 2022 01:46:52 +0100 Subject: [PATCH 08/92] Improve support for keyboard, mouse and usb-controller - add support to choose preferred usb-controller either ehci (USB2.0) or xhci (USB 3.0) - add support to choose preferred keyboard either ps2, usb or virtio - add support to choose preferred keyboard-layout - add support to choose preferred mouse either ps2, usb, tablet, virtio - fix some bugs regarding missing variables - releated to MONTITOR_TELNET_* and SERIAL_TELNET_* - Support implemented on commandline as well as for configuration file --- quickemu | 101 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 90 insertions(+), 11 deletions(-) diff --git a/quickemu b/quickemu index 46601a1..be74870 100755 --- a/quickemu +++ b/quickemu @@ -231,7 +231,6 @@ function vm_boot() { local MAC_BOOTLOADER="" local MAC_MISSING="" local MAC_DISK_DEV="ide-hd,bus=ahci.2" - local MOUSE="usb-tablet" local NET_DEVICE="virtio-net" local OSK="" local SMM="off" @@ -470,7 +469,7 @@ function vm_boot() { fi if [ "${guest_os}" == "freebsd" ] || [ "${guest_os}" == "ghostbsd" ]; then - MOUSE="usb-mouse" + MOUSE="usb" elif [ "${guest_os}" == "haiku" ] || [ "${guest_os}" == "freedos" ]; then MACHINE_TYPE="pc" NET_DEVICE="rtl8139" @@ -873,9 +872,6 @@ function vm_boot() { -m ${RAM_VM} ${BALLOON} -smbios type=2,manufacturer="Quickemu Project",product="Quickemu",version="${VERSION}",serial="0xDEADBEEF",location="quickemu.com",asset="${VMNAME}" ${VIDEO} -display ${DISPLAY_RENDER} - -device usb-ehci,id=input - -device usb-kbd,bus=input.0 - -device ${MOUSE},bus=input.0 -audiodev ${AUDIO_DEV} -device intel-hda -device hda-duplex,audiodev=audio0 -rtc base=localtime,clock=host,driftfix=slew @@ -901,13 +897,63 @@ function vm_boot() { -chardev spicevmc,id=ccid,name=smartcard -device ccid-card-passthru,chardev=ccid ) -# -serial mon:stdio) + + + # setup usb-controller + [ -z "${USB_CONTROLLER}" ] && USB_CONTROLLER="$usb_controller" + if [ "${USB_CONTROLLER}" == "ehci" ]; then + args+=(-device usb-ehci,id=input) + elif [ "${USB_CONTROLLER}" == "xhci" ]; then + args+=(-device qemu-xhci,id=input) + elif [ -z "${USB_CONTROLLER}" ] || [ "${USB_CONTROLLER}" == "none" ]; then + # add nothing + : + else + echo "WARNING! Unknown usb-controller value: '${USB_CONTROLLER}'" + fi + + # setup keyboard + # @INFO: must be set after usb-controller + [ -z "${KEYBOARD}" ] && KEYBOARD="$keyboard" + if [ "${KEYBOARD}" == "usb" ]; then + args+=(-device usb-kbd,bus=input.0) + elif [ "${KEYBOARD}" == "virtio" ]; then + args+=(-device virtio-keyboard) + elif [ "${KEYBOARD}" == "ps2" ] || [ -z "${KEYBOARD}" ]; then + # add nothing, default is ps/2 keyboard + : + else + echo "WARNING! Unknown keyboard value: '${KEYBOARD}'; Fallback to ps2" + fi + + # setup keyboard_layout + # @INFO: When using the VNC display, you must use the -k parameter to set the keyboard layout if you are not using en-us. + [ -z "${KEYBOARD_LAYOUT}" ] && KEYBOARD_LAYOUT="$keyboard_layout" + if [ -n "${KEYBOARD_LAYOUT}" ]; then + args+=(-k ${KEYBOARD_LAYOUT}) + fi # FIXME: Check for device availability. qemu will fail to start otherwise if [ -n "${BRAILLE}" ]; then - # shellcheck disable=SC2054 - args+=(-chardev braille,id=brltty - -device usb-braille,id=usbbrl,chardev=brltty) + # shellcheck disable=SC2054 + args+=(-chardev braille,id=brltty + -device usb-braille,id=usbbrl,chardev=brltty) + fi + + # setup mouse + # @INFO: must be set after usb-controller + [ -z "${MOUSE}" ] && MOUSE="$mouse" + if [ "${MOUSE}" == "usb" ]; then + args+=(-device usb-mouse,bus=input.0) + elif [ "${MOUSE}" == "tablet" ]; then + args+=(-device usb-tablet,bus=input.0) + elif [ "${MOUSE}" == "virtio" ]; then + args+=(-device virtio-mouse) + elif [ "${MOUSE}" == "ps2" ] || [ -z "${MOUSE}" ]; then + # add nothing, default is ps/2 mouse + : + else + echo "WARNING! Unknown mouse value: '${MOUSE}; Fallback to ps2'" fi if [ -n "${bridge}" ]; then @@ -1187,10 +1233,14 @@ function usage() { echo " --monitor : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none'" echo " --monitor-telnet-host : Set telnet host for monitor. (default: 'localhost')" echo " --monitor-telnet-port : Set telnet port for monitor. (default: '4440')" - echo " --monitor-cmd : Send command to monitor if available. (Example: system_powerdown)" + echo " --monitor-cmd : Send command to monitor if available. (Example: system_powerdown)" echo " --serial : Set serial connection type. @Options: 'socket' (default), 'telnet', 'none'" echo " --serial-telnet-host : Set telnet host for serial. (default: 'localhost')" echo " --serial-telnet-port : Set telnet port for serial. (default: '6660')" + echo " --keyboard : Set keyboard. @Options: 'usb' (default), 'ps2', 'virtio'" + echo " --keyboard_layout : Set keyboard layout." + echo " --mouse : Set mouse. @Options: 'tablet' (default), 'ps2', 'usb', 'virtio'" + echo " --usb-controller : Set usb-controller. @Options: 'ehci' (default), 'xhci', 'none'" echo " --version : Print version" exit 1 } @@ -1315,6 +1365,15 @@ monitor_cmd="" serial="socket" serial_telnet_port="6660" serial_telnet_host="localhost" +# options: ehci(USB2.0), xhci(USB3.0) +usb_controller="ehci" +# options: ps2, usb, virtio +keyboard="usb" +keyboard_layout="en-us" +# options: ps2, usb, tablet, virtio +mouse="tablet" +# options: ehci, xhci +usb_controller="ehci" BRAILLE="" DELETE_DISK=0 @@ -1339,10 +1398,18 @@ VIEWER="" SSH_PORT="" SPICE_PORT="" MONITOR="" +MONITOR_TELNET_PORT="" +MONITOR_TELNET_HOST="" MONITOR_CMD="" VM_MONITOR_SOCKETPATH="" VM_SERIAL_SOCKETPATH="" SERIAL="" +SERIAL_TELNET_PORT="" +SERIAL_TELNET_HOST="" +KEYBOARD="" +KEYBOARD_LAYOUT="" +MOUSE="" +USB_CONTROLLER="" # shellcheck disable=SC2155 readonly LAUNCHER=$(basename "${0}") @@ -1464,6 +1531,18 @@ else SERIAL_TELNET_PORT="${2}" shift; shift;; + -keyboard|--keyboard) + KEYBOARD="${2}" + shift; + shift;; + -mouse|--mouse) + MOUSE="${2}" + shift; + shift;; + -usb-controller|--usb-controller) + USB_CONTROLLER="${2}" + shift; + shift;; -version|--version) echo "${VERSION}" exit;; @@ -1528,7 +1607,7 @@ if [ -n "${VM}" ] && [ -e "${VM}" ]; then # sharing via 9P, spice-webdavd and Samba. This path is not configurable. if [ -z "${PUBLIC}" ]; then if command -v xdg-user-dir &>/dev/null; then - PUBLIC=$(xdg-user-dir PUBLICSHARE) + PUBLIC=$(xdg-user-dir PUBLICSHARE) fi fi From 1174282660800f3c5ee7998839543708ae1b5b2a Mon Sep 17 00:00:00 2001 From: Radomir Ochtyra <32648297+radomuc@users.noreply.github.com> Date: Mon, 14 Mar 2022 23:00:22 +0100 Subject: [PATCH 09/92] fix code duplication --- quickemu | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quickemu b/quickemu index be74870..63f991d 100755 --- a/quickemu +++ b/quickemu @@ -1702,11 +1702,11 @@ fi if [ $VM_UP -eq 0 ]; then vm_boot start_viewer - [ -n "${MONITOR_CMD}" ] && monitor_send_cmd "${MONITOR_CMD}" else parse_ports_from_file start_viewer - [ -n "${MONITOR_CMD}" ] &&monitor_send_cmd "${MONITOR_CMD}" fi +[ -n "${MONITOR_CMD}" ] && monitor_send_cmd "${MONITOR_CMD}" + # vim:tabstop=2:shiftwidth=2:expandtab From 9e368b64bc7899ab3b7bf706cadd79576ff1c164 Mon Sep 17 00:00:00 2001 From: Radomir Ochtyra <32648297+radomuc@users.noreply.github.com> Date: Thu, 21 Apr 2022 13:49:18 +0200 Subject: [PATCH 10/92] Add support for "extra_args" in commandline --- quickemu | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/quickemu b/quickemu index 63f991d..261b784 100755 --- a/quickemu +++ b/quickemu @@ -1126,8 +1126,12 @@ function vm_boot() { exit 1 fi - if [ -n "${extra_args}" ]; then - args+=(${extra_args}) + + if [ -z "${EXTRA_ARGS}" ]; then + EXTRA_ARGS="${extra_args}" + fi + if [ -n "${EXTRA_ARGS}" ]; then + args+=(${EXTRA_ARGS}) fi # The OSK parameter contains parenthesis, they need to be escaped in the shell @@ -1241,6 +1245,7 @@ function usage() { echo " --keyboard_layout : Set keyboard layout." echo " --mouse : Set mouse. @Options: 'tablet' (default), 'ps2', 'usb', 'virtio'" echo " --usb-controller : Set usb-controller. @Options: 'ehci' (default), 'xhci', 'none'" + echo " --extra_args : Pass additional arguments to qemu" echo " --version : Print version" exit 1 } @@ -1410,6 +1415,7 @@ KEYBOARD="" KEYBOARD_LAYOUT="" MOUSE="" USB_CONTROLLER="" +EXTRA_ARGS="" # shellcheck disable=SC2155 readonly LAUNCHER=$(basename "${0}") @@ -1543,6 +1549,10 @@ else USB_CONTROLLER="${2}" shift; shift;; + -extra_args|--extra_args) + EXTRA_ARGS="${2}" + shift; + shift;; -version|--version) echo "${VERSION}" exit;; From 7d1e90908892d2e1a3e98d4f89a773b3e43c5a8a Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sun, 24 Jul 2022 00:59:15 +0100 Subject: [PATCH 11/92] Cleanly Add Batocera (#403) just batocera removed leakage from ludos --- quickemu | 15 +++++++++++++++ quickget | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/quickemu b/quickemu index 261b784..f162138 100755 --- a/quickemu +++ b/quickemu @@ -485,6 +485,15 @@ function vm_boot() { disk_size="16G" fi ;; + batocera) + CPU="-cpu host,kvm=on" + if [ "${HOST_CPU_VENDOR}" == "AuthenticAMD" ]; then + CPU="${CPU},topoext" + fi + MACHINE_TYPE="pc" + NET_DEVICE="rtl8139" + disk_size="8G" + ;; kolibrios) CPU="-cpu qemu32,kvm=on" if [ "${HOST_CPU_VENDOR}" == "AuthenticAMD" ]; then @@ -1024,6 +1033,12 @@ function vm_boot() { args+=(-device ahci,id=ahci -device ide-hd,bus=ahci.0,drive=SystemDisk -drive id=SystemDisk,if=none,format=qcow2,file="${disk_img}" ${STATUS_QUO}) + elif [ "${guest_os}" == "batocera" ] ; then + # shellcheck disable=SC2054,SC2206 + args+=(-device virtio-blk-pci,drive=BootDisk + -drive id=BootDisk,if=none,format=raw,file="${img}" + -device virtio-blk-pci,drive=SystemDisk + -drive id=SystemDisk,if=none,format=qcow2,file="${disk_img}" ${STATUS_QUO}) else # shellcheck disable=SC2054,SC2206 args+=(-device virtio-blk-pci,drive=SystemDisk diff --git a/quickget b/quickget index a530d8b..e62c863 100755 --- a/quickget +++ b/quickget @@ -160,6 +160,7 @@ function os_support() { android \ archlinux \ arcolinux \ + batocera \ cachyos \ debian \ devuan \ @@ -264,6 +265,10 @@ function releases_fedora() { echo 33 34 35 } +function releases_batocera() { + echo 33 +} + function editions_fedora() { echo Workstation \ Cinnamon \ @@ -662,6 +667,9 @@ function make_vm_config() { IMAGE_FILE="${1}" ISO_FILE="${2}" case "${OS}" in + batocera) + GUEST="batocera" + IMAGE_TYPE="img";; dragonflybsd) GUEST="dragonflybsd" IMAGE_TYPE="iso";; @@ -812,6 +820,13 @@ function get_arcolinux() { echo "${URL}/${ISO} ${HASH}" } +function get_batocera() { + local HASH="" + local ISO="batocera-x86_64-${RELEASE}-20220203.img.gz" + local URL="https://updates.batocera.org/x86_64/stable/last" + echo "${URL}/${ISO} ${HASH}" +} + function get_cachyos() { local HASH="" local ISO="cachyos-${RELEASE}-x86_64.iso" @@ -1717,6 +1732,10 @@ create_vm() { unzip ${VM_PATH}/${ISO} -d ${VM_PATH} ISO=$(ls ${VM_PATH} | grep -i '.iso') fi + if [[ ${OS} == "batocera" ]] && [[ ${ISO} =~ ".gz" ]]; then + gzip -d "${VM_PATH}/${ISO}" + ISO="${ISO/.gz/}" + fi make_vm_config "${ISO}" } From ecc37fa3294afb8e26ae65ca9e1450fde8ae8d2c Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sun, 24 Jul 2022 00:59:39 +0100 Subject: [PATCH 12/92] Additional OVMF paths for recently updated Solus hosts (#422) * Extra OVMF search paths needed for Solus who have moved things around also spotted a possible typo to investigate in the void additions * Revert "updated submodule position" This reverts commit 9648f79b81b5e72465785993bc62469130ac848f. * minor cleanup * try realign submodule backwards --- quickemu | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/quickemu b/quickemu index f162138..6a1dfa7 100755 --- a/quickemu +++ b/quickemu @@ -400,6 +400,10 @@ function vm_boot() { elif [ -e "/usr/share/qemu/edk2-x86_64-secure-code.fd" ]; then EFI_CODE="/usr/share/qemu/edk2-x86_64-secure-code.fd" efi_vars "/usr/share/qemu/edk2-x86_64-code.fd" "${EFI_VARS}" + # Solus new place to hide + elif [ -e "/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd" ]; then + EFI_CODE="/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd" + efi_vars "/usr/share/edk2-ovmf/x64/OVMF_VARS.fd" "${EFI_VARS}" else echo "ERROR! SecureBoot was requested but no SecureBoot capable firmware was found." echo " Please install OVMF firmware." @@ -428,6 +432,10 @@ function vm_boot() { elif [ -e "/usr/share/qemu/edk2-x86_64-code.fd" ]; then EFI_CODE="/usr/share/qemu/edk2-x86_64-code.fd" efi_vars "/usr/share/qemu/edk2-x86_64-code.fd" "${EFI_VARS}" + # Solus + elif [ -e "/usr/share/edk2-ovmf/x64/OVMF_CODE.fd" ]; then + EFI_CODE="/usr/share/edk2-ovmf/x64/OVMF_CODE.fd" + efi_vars "/usr/share/edk2-ovmf/x64/OVMF_VARS.fd" "${EFI_VARS}" else echo "ERROR! EFI boot requested but no EFI firmware found." echo " Please install OVMF firmware." From ab1d9672acdcb9aa092add1405eb7b56b1f194c0 Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sun, 24 Jul 2022 01:03:37 +0100 Subject: [PATCH 13/92] Add filter to choose iso files in daily-live (#430) fix: #429 --- quickget | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/quickget b/quickget index e62c863..351377f 100755 --- a/quickget +++ b/quickget @@ -1284,11 +1284,11 @@ function get_ubuntu() { fi if wget -q --spider "${URL}/SHA256SUMS"; then - ISO=$(wget -q -O- "${URL}/SHA256SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | cut -d'*' -f2) - HASH=$(wget -q -O- "${URL}/SHA256SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | cut -d' ' -f1) + ISO=$(wget -q -O- "${URL}/SHA256SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | grep iso | cut -d'*' -f2) + HASH=$(wget -q -O- "${URL}/SHA256SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | grep iso |cut -d' ' -f1) else - ISO=$(wget -q -O- "${URL}/MD5SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | cut -d' ' -f3) - HASH=$(wget -q -O- "${URL}/MD5SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | cut -d' ' -f1) + ISO=$(wget -q -O- "${URL}/MD5SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | grep iso | cut -d' ' -f3) + HASH=$(wget -q -O- "${URL}/MD5SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | grep iso | cut -d' ' -f1) fi #echo "${URL}/${ISO} ${HASH}" From ac0ad827523926a2fbf571b4af196a6df2627408 Mon Sep 17 00:00:00 2001 From: Eli Array Minkoff Date: Tue, 22 Mar 2022 11:44:14 -0400 Subject: [PATCH 14/92] Add shebang to conf and mark it as executable --- quickget | 3 +++ 1 file changed, 3 insertions(+) diff --git a/quickget b/quickget index 351377f..7590125 100755 --- a/quickget +++ b/quickget @@ -711,10 +711,13 @@ function make_vm_config() { if [ ! -e "${CONF_FILE}" ]; then echo "Making ${CONF_FILE}" cat << EOF > "${CONF_FILE}" +#!$(which quickemu) --vm guest_os="${GUEST}" disk_img="${VM_PATH}/disk.qcow2" ${IMAGE_TYPE}="${VM_PATH}/${IMAGE_FILE}" EOF + echo "Giving user execute permissions on ${CONF_FILE}," + chmod u+x "${CONF_FILE}" if [ -n "${ISO_FILE}" ]; then echo "fixed_iso=\"${VM_PATH}/${ISO_FILE}\"" >> "${CONF_FILE}" fi From ace75eee9dfb696dd21e1c59f4bfde0426ea5cac Mon Sep 17 00:00:00 2001 From: goosepirate <71612256+goosepirate@users.noreply.github.com> Date: Sat, 23 Jul 2022 20:07:08 -0400 Subject: [PATCH 15/92] Mention SPICE Windows guest tools in README (#440) --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 83488df..66e2321 100644 --- a/README.md +++ b/README.md @@ -424,6 +424,8 @@ requires that the `spicy` client is installed, available from the quickemu --vm ubuntu-20.04.conf --display spice ``` +To enable copy/paste with a Windows guest, install [SPICE Windows guest tools](https://www.spice-space.org/download.html) in the guest VM. + Headless -------- From 582dd448fa14277e073e8884ecdc1a098205c5ca Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sun, 24 Jul 2022 01:07:33 +0100 Subject: [PATCH 16/92] add support for EndeavourOS (#449) --- quickget | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/quickget b/quickget index 7590125..1cfb4d6 100755 --- a/quickget +++ b/quickget @@ -38,6 +38,7 @@ function pretty_name() { cachyos) PRETTY_NAME="CachyOS";; dragonflybsd) PRETTY_NAME="DragonFlyBSD";; elementary) PRETTY_NAME="elementary OS";; + endeavouros) PRETTY_NAME="EndeavourOS";; freebsd) PRETTY_NAME="FreeBSD";; freedos) PRETTY_NAME="FreeDOS";; garuda) PRETTY_NAME="Garuda Linux";; @@ -166,6 +167,7 @@ function os_support() { devuan \ dragonflybsd \ elementary \ + endeavouros \ fedora \ freebsd \ freedos \ @@ -261,6 +263,12 @@ function releases_elementary() { echo 6.1 } +function releases_endeavouros() { + echo apollo_22_1 \ + atlantis-21_4 \ + atlantis_neo-21_5 +} + function releases_fedora() { echo 33 34 35 } @@ -887,6 +895,16 @@ function get_elementary() { echo "${URL}/$(date +%s | base64)/${ISO} ${HASH}" } +function get_endeavouros() { + local HASH="" + # Endeavour release names are Capitalized and our $RELEASE is forced to lowercase so we have to revert it + local ISO="EndeavourOS_${RELEASE@u}.iso" + local URL="https://github.com/endeavouros-team/ISO/releases/download/1-EndeavourOS-ISO-releases-archive" + + HASH=$(wget -q -O- "${URL}/${ISO}.sha512sum" | cut -d' ' -f1) + echo "${URL}/${ISO} ${HASH}" +} + function get_fedora() { local EDITION="${1:-}" local HASH="" From 68729159cb8d5bdf35642f46164f3074ff7ba933 Mon Sep 17 00:00:00 2001 From: dabrown645 Date: Sat, 23 Jul 2022 17:08:54 -0700 Subject: [PATCH 17/92] Update Garuda to Release: latest & get Editions from web site (#453) --- quickget | 38 ++++++++++---------------------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/quickget b/quickget index 1cfb4d6..ecf81cf 100755 --- a/quickget +++ b/quickget @@ -303,23 +303,12 @@ function releases_freedos() { } function releases_garuda() { - echo 220131 + echo latest } function editions_garuda() { - echo dr460nized \ - dr460nized-blackarch \ - dr460nized-gaming \ - bspwm \ - cinnamon \ - gnome \ - i3 \ - kde-barebones \ - lxqt-kwin \ - mate \ - qtile \ - sway \ - xfce + URL="https://mirrors.fossho.st/garuda/iso/latest/garuda/" + echo $(wget -q -O - ${URL} | grep '^ Date: Sun, 24 Jul 2022 02:09:19 +0200 Subject: [PATCH 18/92] quickget: get_windows: validate that download url leads to microsoft cdn (#455) For windows downloads hashes aren't validated via hashes. Let's at least validate that downloads are coming from microsoft via https. Signed-off-by: Steffen Dirkwinkel --- quickget | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/quickget b/quickget index ecf81cf..938d299 100755 --- a/quickget +++ b/quickget @@ -1687,9 +1687,17 @@ function get_windows() { dbg_windows "${DOWNLOAD_SHA1}" DOWNLOAD_ID=$(echo "${DOWNLOAD_INFO}" | grep -oP '(?<=https:\/\/tb\.rg-adguard\.net/dl\.php\?go=)[0-9a-z]+') dbg_windows "${DOWNLOAD_ID}" - DOWNLOAD_URL="https://tb.rg-adguard.net/dl.php?go=${DOWNLOAD_ID}" + REDIRECT_URL="https://tb.rg-adguard.net/dl.php?go=${DOWNLOAD_ID}" + dbg_windows "${REDIRECT_URL}" + DOWNLOAD_URL=$(curl --head --silent --write-out "%{redirect_url}\n" --output /dev/null "${REDIRECT_URL}") dbg_windows "${DOWNLOAD_URL}" + MS_BASE_URL="https://software.download.prss.microsoft.com/" + if [[ ! ${DOWNLOAD_URL} =~ ^${MS_BASE_URL} ]]; then + echo "Download URL not leading to Microsoft CDN" + exit 1 + fi + echo "Downloading ${WINDOWS_NAME}..." web_get "${DOWNLOAD_URL}" "${VM_PATH}" "${FILE_NAME}" From 3f0dfaf9a0ea0bc6313f3e16d00ba766d86a20c6 Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sun, 24 Jul 2022 01:09:40 +0100 Subject: [PATCH 19/92] Update Alma releases (#457) * Update Alma for available releases 8.4 removed and current betas added * fixed for beta paths * Alma 9.0 released --- quickget | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quickget b/quickget index 938d299..954d549 100755 --- a/quickget +++ b/quickget @@ -208,7 +208,7 @@ function os_support() { } function releases_alma() { - echo 8.4 8.5 + echo 8.5 8.6 9.0 } function editions_alma() { @@ -759,7 +759,7 @@ function get_alma() { local EDITION="${1:-}" local HASH="" local ISO="AlmaLinux-${RELEASE}-x86_64-${EDITION}.iso" - local URL="http://lon.mirror.rackspace.com/almalinux/${RELEASE}/isos/x86_64/" + local URL="http://lon.mirror.rackspace.com/almalinux/${RELEASE/beta-1/beta}/isos/x86_64/" HASH="$(wget -q -O- "${URL}/CHECKSUM" | grep "(${ISO}" | cut -d' ' -f4)" echo "${URL}/${ISO} ${HASH}" } From 349b9df81c9eab3f8d133b772314c8e3b86c332c Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sun, 24 Jul 2022 01:10:21 +0100 Subject: [PATCH 20/92] removed obsolete 12.2 version (#458) --- quickget | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickget b/quickget index 954d549..3a3ebf7 100755 --- a/quickget +++ b/quickget @@ -291,7 +291,7 @@ function editions_fedora() { } function releases_freebsd(){ - echo 12.2 12.3 13.0 + echo 12.3 13.0 } function editions_freebsd(){ From a5b792de21e43fe716e1b5387fd9cc236432f143 Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sun, 24 Jul 2022 01:10:35 +0100 Subject: [PATCH 21/92] update openBSD releases (#459) --- quickget | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickget b/quickget index 3a3ebf7..025e87a 100755 --- a/quickget +++ b/quickget @@ -390,7 +390,7 @@ function editions_nixos(){ } function releases_openbsd(){ - echo 6.7 6.8 6.9 7.0 + echo 6.8 6.9 7.0 7.1 } function releases_opensuse(){ From 35b90f77e0953883ab77309468b259db9f9f0759 Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sun, 24 Jul 2022 01:11:03 +0100 Subject: [PATCH 22/92] changed haiku mirror as cdn no longer resolves (#460) NY set as it seemed good enough. Other working options left in comments in case --- quickget | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/quickget b/quickget index 025e87a..63ac319 100755 --- a/quickget +++ b/quickget @@ -981,8 +981,10 @@ function get_ghostbsd() { function get_haiku() { local EDITION="${1:-}" local ISO="haiku-${RELEASE}-${EDITION}-anyboot.iso" - local URL="https://cdn.haiku-os.org/haiku-release/${RELEASE}" - local HASH="" + # local URL="https://cdn.haiku-os.org/haiku-release/${RELEASE}" # domain gone + local URL="http://mirror.rit.edu/haiku/${RELEASE}" # NY, USA + # local URL="https://mirrors.tnonline.net/haiku/haiku-release/${RELEASE}" # Sweden + # local URL="https://mirror.aarnet.edu.au/pub/haiku/${RELEASE}" # Aus HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | grep "${ISO}" | cut -d' ' -f4) echo "${URL}/${ISO} ${HASH}" From dea192b78579aeb86e71cab441b1e17234d3cca6 Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sun, 24 Jul 2022 01:11:46 +0100 Subject: [PATCH 23/92] add warning for unsupported fedora spins (#461) --- quickget | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/quickget b/quickget index 63ac319..11d7c8a 100755 --- a/quickget +++ b/quickget @@ -1818,6 +1818,14 @@ if [ -n "${2}" ]; then echo " - Setting edition to: ${EDITION}" fi fi + # Handle odd missing fedora cominations + if [[ $OS == fedora ]] ; then + if [[ ${RELEASE} = "33" && ${EDITION} = "i3" ]] || [[ ${RELEASE} = "34" && ${EDITION} = "Cinnamon" ]] ; then + echo "ERROR! Unsupported combination" + echo " Fedora 33 i3 and Fedora 34 Cinnamon are not available, please choose another Release or Edition" + exit 1; + fi + fi VM_PATH="${OS}-${RELEASE}-${EDITION}" validate_release "releases_${OS}" From 4f3f5f2b58dac48b43ad4b9196a991246600f6af Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sun, 24 Jul 2022 01:12:33 +0100 Subject: [PATCH 24/92] updated mxlinux release to 21.1 (#462) --- quickget | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickget b/quickget index 11d7c8a..c85d01e 100755 --- a/quickget +++ b/quickget @@ -352,7 +352,7 @@ function editions_linuxmint(){ } function releases_mxlinux(){ - echo 21 + echo 21.1 } function editions_mxlinux(){ From 790c6269932ba5b03ae6ebbfc7a055bd221c630d Mon Sep 17 00:00:00 2001 From: Scott Travis Date: Sat, 23 Jul 2022 20:13:00 -0400 Subject: [PATCH 25/92] Add support for CentOS Stream (#464) * Add support for CentOS Stream Supports CentOS Stream releases 8 and 9, editions 'dvd1' and 'boot'. * Rename 'centos' to 'centos-stream' for clarity --- quickget | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/quickget b/quickget index c85d01e..67a7ebc 100755 --- a/quickget +++ b/quickget @@ -36,6 +36,7 @@ function pretty_name() { archlinux) PRETTY_NAME="Arch Linux";; arcolinux) PRETTY_NAME="Arco Linux";; cachyos) PRETTY_NAME="CachyOS";; + centos-stream) PRETTY_NAME="CentOS Stream";; dragonflybsd) PRETTY_NAME="DragonFlyBSD";; elementary) PRETTY_NAME="elementary OS";; endeavouros) PRETTY_NAME="EndeavourOS";; @@ -163,6 +164,7 @@ function os_support() { arcolinux \ batocera \ cachyos \ + centos-stream \ debian \ devuan \ dragonflybsd \ @@ -243,6 +245,14 @@ function releases_cachyos() { echo 2022.01.09 2022.02.11 } +function releases_centos-stream() { + echo 8 9 +} + +function editions_centos-stream() { + echo dvd1 boot +} + function releases_debian() { echo 10.11.0 11.2.0 11.3.0 } @@ -721,7 +731,7 @@ EOF # OS specific tweaks case ${OS} in - alma|oraclelinux|rockylinux) echo "disk_size=\"32G\"" >> "${CONF_FILE}";; + alma|centos-stream|oraclelinux|rockylinux) echo "disk_size=\"32G\"" >> "${CONF_FILE}";; dragonflybsd|haiku|openbsd|netbsd|slackware|tails) echo "boot=\"legacy\"" >> "${CONF_FILE}";; freedos) echo "boot=\"legacy\"" >> "${CONF_FILE}" @@ -834,6 +844,25 @@ function get_cachyos() { echo "${URL}/${ISO} ${HASH}" } +function get_centos-stream() { + local HASH="" + local ISO="" + case ${RELEASE} in + 8) + ISO="CentOS-Stream-${RELEASE}-x86_64-latest-${EDITION}.iso" + URL="https://mirrors.ocf.berkeley.edu/centos/8-stream/isos/x86_64" + HASH=$(wget -q -O- ${URL}/CHECKSUM | grep "SHA256 (${ISO}" | cut -d' ' -f4) + ;; + 9) + ISO="CentOS-Stream-${RELEASE}-latest-x86_64-${EDITION}.iso" + URL="https://mirrors.ocf.berkeley.edu/centos-stream/9-stream/BaseOS/x86_64/iso" + HASH=$(wget -q -O- ${URL}/${ISO}.SHA256SUM | grep "SHA256 (${ISO}" | cut -d' ' -f4) + ;; + esac + + echo "${URL}/${ISO} ${HASH}" +} + function get_debian() { local EDITION="${1:-}" local HASH="" From f061991b6724843b4d80d2e1c671a3efc7631eb6 Mon Sep 17 00:00:00 2001 From: Heysion Date: Sun, 24 Jul 2022 08:15:52 +0800 Subject: [PATCH 26/92] feat: add deepin support (#475) add deepin v20 support Log: Co-authored-by: Heysion Y --- quickget | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/quickget b/quickget index 67a7ebc..709aebf 100755 --- a/quickget +++ b/quickget @@ -166,6 +166,7 @@ function os_support() { cachyos \ centos-stream \ debian \ + deepin \ devuan \ dragonflybsd \ elementary \ @@ -261,6 +262,10 @@ function editions_debian() { echo standard cinnamon gnome kde lxde lxqt mate xfce netinst } +function releases_deepin() { + echo 20 20.1 20.2 20.2.1 20.2.2 20.2.3 20.2.4 20.3 20.4 20.5 +} + function releases_devuan() { echo beowulf chimaera } @@ -733,6 +738,10 @@ EOF case ${OS} in alma|centos-stream|oraclelinux|rockylinux) echo "disk_size=\"32G\"" >> "${CONF_FILE}";; dragonflybsd|haiku|openbsd|netbsd|slackware|tails) echo "boot=\"legacy\"" >> "${CONF_FILE}";; + deepin) + echo "disk_size=\"64G\"" >> "${CONF_FILE}" + echo "ram=\"4G\"" >> "${CONF_FILE}" + ;; freedos) echo "boot=\"legacy\"" >> "${CONF_FILE}" echo "disk_size=\"4G\"" >> "${CONF_FILE}" @@ -884,6 +893,30 @@ function get_debian() { echo "${URL}/${ISO} ${HASH}" } +function get_deepin() { + local HASH="" + local EDITION="" + local ISO="deepin-desktop-community-${RELEASE}-amd64.iso" + # deepin-desktop-community-20.3-amd64.iso + local URL="https://cdimage.deepin.com/releases/"${RELEASE} + + # fix iso name + if [[ "${RELEASE}" == *"20" ]] ; then + EDITION="1003" + ISO="deepin-desktop-community-${EDITION}-amd64.iso" + elif [[ "${RELEASE}" == *"20.1" ]]; then + EDITION="1010" + ISO="deepin-desktop-community-${EDITION}-amd64.iso" + fi + + HASH=$(wget -q -O- "${URL}/SHA256SUMS" | grep "${ISO}" | cut -d' ' -f1) + + #echo "${URL}/${ISO} ${HASH}" + web_get "${URL}/${ISO}" "${VM_PATH}" + check_hash "${ISO}" "${HASH}" + make_vm_config "${ISO}" +} + function get_devuan() { local HASH="" local ISO="" @@ -1867,6 +1900,10 @@ if [ -n "${2}" ]; then # Ubuntu doesn't use create_vm() validate_release releases_ubuntu get_ubuntu + elif [[ "${OS}" == *"deepin"* ]]; then + # deepin doesn't use create_vm() + validate_release releases_deepin + get_deepin elif [ "${OS}" == "windows" ]; then LANG="English International" if [ -n "${3}" ]; then From fe46fffeff0e1fbc61e5809f8c1e4dac271cdaf9 Mon Sep 17 00:00:00 2001 From: Philipp Kiemle <30795174+daPhipz@users.noreply.github.com> Date: Sun, 24 Jul 2022 02:16:05 +0200 Subject: [PATCH 27/92] Make Fedora 36 available (#477) Closes #471 --- quickget | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickget b/quickget index 709aebf..6067d63 100755 --- a/quickget +++ b/quickget @@ -285,7 +285,7 @@ function releases_endeavouros() { } function releases_fedora() { - echo 33 34 35 + echo 33 34 35 36 } function releases_batocera() { From 95c72d3eefd18d029c20b777107d37ad20d9aa7f Mon Sep 17 00:00:00 2001 From: Dimitris <58709057+DimitrisPa@users.noreply.github.com> Date: Sun, 24 Jul 2022 00:16:24 +0000 Subject: [PATCH 28/92] Update NixOS releases (#479) --- quickget | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickget b/quickget index 6067d63..822737e 100755 --- a/quickget +++ b/quickget @@ -397,7 +397,7 @@ function releases_netbsd() { } function releases_nixos(){ - echo 21.05 21.11 + echo 21.05 21.11 22.05 } function editions_nixos(){ From f127cca13b31ff8976dcf0895a98665ba5368edb Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sun, 24 Jul 2022 01:16:37 +0100 Subject: [PATCH 29/92] add Release 20.3 (#483) requested in #482 --- quickget | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickget b/quickget index 822737e..108bf65 100755 --- a/quickget +++ b/quickget @@ -359,7 +359,7 @@ function releases_kolibrios() { } function releases_linuxmint(){ - echo 20.2 + echo 20.2 20.3 } function editions_linuxmint(){ From 0390dcf65241379bc09b66e45e99ccb4ccf4671a Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sun, 24 Jul 2022 01:17:23 +0100 Subject: [PATCH 30/92] add LMDE (#484) requested in #482 --- quickget | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/quickget b/quickget index 108bf65..e5ab7fb 100755 --- a/quickget +++ b/quickget @@ -47,6 +47,7 @@ function pretty_name() { kdeneon) PRETTY_NAME="KDE Neon";; kolibrios) PRETTY_NAME="KolibriOS";; linuxmint) PRETTY_NAME="Linux Mint";; + lmde) PRETTY_NAME="Linux Mint Debian Edition";; mxlinux) PRETTY_NAME="MX Linux";; netboot) PRETTY_NAME="netboot.xyz";; netbsd) PRETTY_NAME="NetBSD";; @@ -183,6 +184,7 @@ function os_support() { kolibrios \ kubuntu \ linuxmint \ + lmde \ manjaro \ mxlinux \ netboot \ @@ -366,6 +368,13 @@ function editions_linuxmint(){ echo cinnamon mate xfce } +function editions_lmde(){ + echo cinnamon +} +function releases_lmde(){ + echo 5 +} + function releases_mxlinux(){ echo 21.1 } @@ -1089,6 +1098,16 @@ function get_linuxmint() { echo "${URL}/${ISO} ${HASH}" } +function get_lmde() { + local EDITION="${1:-}" + local HASH="" + local ISO="lmde-${RELEASE}-${EDITION}-64bit.iso" + local URL="https://mirror.bytemark.co.uk/linuxmint/debian" + + HASH=$(wget -q -O- "${URL}/sha256sum.txt" | grep "${ISO}" | cut -d' ' -f1) + echo "${URL}/${ISO} ${HASH}" +} + function get_macos() { local BOARD_ID="" local CWD="" From cb0922de2025c83e81b8e003dc10d5737de07ada Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sun, 24 Jul 2022 01:17:54 +0100 Subject: [PATCH 31/92] Add OpenSuSE 15.4 release (#489) --- quickget | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickget b/quickget index e5ab7fb..fa7920a 100755 --- a/quickget +++ b/quickget @@ -418,7 +418,7 @@ function releases_openbsd(){ } function releases_opensuse(){ - echo 15.0 15.1 15.2 15.3 microos tumbleweed + echo 15.0 15.1 15.2 15.3 15.4 microos tumbleweed } function releases_oraclelinux() { From 677b3e38744dbb959f36b0d4586f940d59d709ca Mon Sep 17 00:00:00 2001 From: Philip Crockett Date: Sun, 24 Jul 2022 02:19:04 +0200 Subject: [PATCH 32/92] Support Pop!_OS 22.04 (#493) --- quickget | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickget b/quickget index fa7920a..3289e60 100755 --- a/quickget +++ b/quickget @@ -426,7 +426,7 @@ function releases_oraclelinux() { } function releases_popos() { - echo 20.04 21.10 + echo 20.04 21.10 22.04 } function editions_popos() { From da30757832301e04e0234a25af61bf3d432635b7 Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sun, 24 Jul 2022 01:19:19 +0100 Subject: [PATCH 33/92] Remove Impish at EOL 14/7/2022 (#495) --- quickget | 1 - 1 file changed, 1 deletion(-) diff --git a/quickget b/quickget index 3289e60..5deff45 100755 --- a/quickget +++ b/quickget @@ -480,7 +480,6 @@ function releases_ubuntu() { ;; esac echo ${LTS_SUPPORT} \ - 21.10 \ daily-live \ daily-canary \ eol-4.10 \ From cfadfde2b7fd6cfb1c9effbf520f9d7c7eade3b5 Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sun, 24 Jul 2022 01:20:49 +0100 Subject: [PATCH 34/92] Add 11.4.0 current live release (#503) * Add 11.4.0 current live release * move latest debian on so last switches to archive --- quickget | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quickget b/quickget index 5deff45..2447e9b 100755 --- a/quickget +++ b/quickget @@ -257,7 +257,7 @@ function editions_centos-stream() { } function releases_debian() { - echo 10.11.0 11.2.0 11.3.0 + echo 10.11.0 11.2.0 11.3.0 11.4.0 } function editions_debian() { @@ -887,7 +887,7 @@ function get_debian() { local URL="" case ${RELEASE} in - 11.3.0) URL="https://cdimage.debian.org/debian-cd/${RELEASE}-live/amd64/iso-hybrid";; + 11.4.0) URL="https://cdimage.debian.org/debian-cd/${RELEASE}-live/amd64/iso-hybrid";; *) URL="https://cdimage.debian.org/cdimage/archive/${RELEASE}-live/amd64/iso-hybrid/";; esac From b540471acc8171b2de9bdd4e0296a07868159176 Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sun, 24 Jul 2022 01:21:41 +0100 Subject: [PATCH 35/92] Update latest Rocky to 9.0 release (#506) also reflect changed name for dvd iso --- quickget | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/quickget b/quickget index 2447e9b..5101f59 100755 --- a/quickget +++ b/quickget @@ -442,12 +442,13 @@ function editions_regolith() { } function releases_rockylinux() { - echo 8.3 8.4 8.5 + echo 8.3 8.4 8.5 9.0 } +# Rocky have renamed dvd1 -> dvd at 9.0 function editions_rockylinux() { echo minimal \ - dvd1 + "dvd (dvd1 prior to 9.0)" } function releases_slackware() { @@ -1307,7 +1308,7 @@ function get_rockylinux() { local URL="" case ${RELEASE} in - 8.5) URL="https://download.rockylinux.org/pub/rocky/${RELEASE}/isos/x86_64";; + 9.0) URL="https://download.rockylinux.org/pub/rocky/${RELEASE}/isos/x86_64";; *) URL="http://dl.rockylinux.org/vault/rocky/${RELEASE}/isos/x86_64/";; esac HASH=$(wget -q -O- "${URL}/CHECKSUM" | grep "SHA256" | grep "${ISO})" | cut -d' ' -f4) From 601273de40b387773f1e0dded68e9ed68f9764a4 Mon Sep 17 00:00:00 2001 From: kaikikokuke <62207468+kaikikokuke@users.noreply.github.com> Date: Sun, 24 Jul 2022 02:22:01 +0200 Subject: [PATCH 36/92] Updates MSRs alert comment to include windows (#507) Adds windows to MSRs alert comment in addition to macOS --- quickemu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickemu b/quickemu index 6a1dfa7..866d3b4 100755 --- a/quickemu +++ b/quickemu @@ -645,7 +645,7 @@ function vm_boot() { fi if [ "${guest_os}" == "macos" ] || [ "${guest_os}" == "windows" ]; then - # Display MSRs alert if the guest is macOS + # Display MSRs alert if the guest is macOS or windows ignore_msrs_alert fi From 76bb64035d1fdaa089e68d1e6a604fcf31e156e4 Mon Sep 17 00:00:00 2001 From: Abe Hanoka Date: Sat, 23 Jul 2022 20:23:04 -0400 Subject: [PATCH 37/92] fix window 11 config example (#497) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 66e2321..a015a2b 100644 --- a/README.md +++ b/README.md @@ -400,6 +400,7 @@ disk_img="windows-11/disk.qcow2" iso="windows-11/Win11_EnglishInternational_x64.iso" fixed_iso="windows-11/virtio-win.iso" tpm="on" +secureboot="on" ``` - `guest_os="windows"` instructs `quickemu` to optimise for Windows. From 02b09416d581b963e2c3580b76505b2cbd9fe8f3 Mon Sep 17 00:00:00 2001 From: Martin Wimpress Date: Sun, 24 Jul 2022 01:28:18 +0100 Subject: [PATCH 38/92] Drop Alma 8.5. Close #500 --- quickget | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickget b/quickget index 5101f59..f6a3e48 100755 --- a/quickget +++ b/quickget @@ -213,7 +213,7 @@ function os_support() { } function releases_alma() { - echo 8.5 8.6 9.0 + echo 8.6 9.0 } function editions_alma() { From 974c9ab5fae928e2f1964c37cefc9e3bd782df07 Mon Sep 17 00:00:00 2001 From: Martin Wimpress Date: Fri, 29 Jul 2022 09:31:10 +0100 Subject: [PATCH 39/92] White space clean up --- quickemu | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quickemu b/quickemu index 866d3b4..9f3c270 100755 --- a/quickemu +++ b/quickemu @@ -1149,7 +1149,7 @@ function vm_boot() { exit 1 fi - + if [ -z "${EXTRA_ARGS}" ]; then EXTRA_ARGS="${extra_args}" fi @@ -1285,7 +1285,7 @@ function viewer_param_check() { if [ "${VIEWER}" != "none" ] && [ "${VIEWER}" != "spicy" ] && [ "${VIEWER}" != "remote-viewer" ]; then echo "ERROR! Requested viewer '${VIEWER}' is not recognised." exit 1 - fi + fi if [ "${VIEWER}" == "spicy" ] && ! command -v spicy &>/dev/null; then echo "ERROR! Requested 'spicy' as viewer, but 'spicy' is not installed." exit 1 From 39da52a3bfda0cb06a669cd1b23b3114a2aa3148 Mon Sep 17 00:00:00 2001 From: Martin Wimpress Date: Fri, 29 Jul 2022 11:45:59 +0100 Subject: [PATCH 40/92] Bump the version to 3.16 --- quickemu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickemu b/quickemu index 9f3c270..17f739e 100755 --- a/quickemu +++ b/quickemu @@ -1443,7 +1443,7 @@ EXTRA_ARGS="" # shellcheck disable=SC2155 readonly LAUNCHER=$(basename "${0}") readonly DISK_MIN_SIZE=$((197632 * 8)) -readonly VERSION="3.15" +readonly VERSION="3.16" # TODO: Make this run the native architecture binary QEMU=$(command -v qemu-system-x86_64) From d0c2bb228a79356cd39ccf326a933c90aee9d420 Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Sat, 30 Jul 2022 07:56:23 +0100 Subject: [PATCH 41/92] New release docs with cogged README (#508) --- README.md | 274 ++++++++++++++++++++---------------- build-docs | 2 +- docs/quickemu.1 | 302 +++++++++++++++++++++++++--------------- docs/quickemu.1.md | 197 +++++++++++++++----------- docs/quickemu_conf.1 | 87 ++++++++---- docs/quickemu_conf.1.md | 97 ++++++------- docs/quickget.1 | 189 ++++++++++++++----------- docs/quickget.1.md | 70 +++++----- 8 files changed, 698 insertions(+), 520 deletions(-) diff --git a/README.md b/README.md index a015a2b..dc9b9d2 100644 --- a/README.md +++ b/README.md @@ -8,17 +8,16 @@
Quickemu Screenshot

Made with 💝 for

-Introduction ------------- +## Introduction Quickly create and run highly optimised desktop virtual machines for Linux, macOS and Windows; with just two commands. You decide what operating system you want to run and Quickemu will figure out the best way to do it for you. For example: -``` {.bash} -quickget ubuntu-mate 21.10 -quickemu --vm ubuntu-mate-21.10-.conf +``` bash +quickget ubuntu-mate 22.04 +quickemu --vm ubuntu-mate-22.04-.conf ``` The original objective of the project was to enable quick testing of @@ -28,8 +27,7 @@ and no elevated permissions are required to run the virtual machines. **Quickemu now also includes comprehensive support for macOS and Windows**. -Features --------- +## Features - **macOS** Monterey, Big Sur, Catalina, Mojave & High Sierra - **Windows** 8.1, 10 and 11 including TPM 2.0 @@ -67,8 +65,7 @@ Quickemu. [![Replace VirtualBox with Bash & QEMU](https://img.youtube.com/vi/AOTYWEgw0hI/0.jpg)](https://www.youtube.com/watch?v=AOTYWEgw0hI) -Requirements ------------- +## Requirements - [QEMU](https://www.qemu.org/) (*6.0.0 or newer*) **with GTK, SDL, SPICE & VirtFS support** @@ -93,11 +90,37 @@ Requirements - [zsync](http://zsync.moria.org.uk/) - [unzip](http://www.info-zip.org/UnZip.html) -Usage -===== +### Installing Requirements -Graphical User Interfaces -------------------------- +For Ubuntu, Arch and nixos systems the +[ppa](https://launchpad.net/~flexiondotorg/+archive/ubuntu/quickemu), +[AUR](https://aur.archlinux.org/packages/quickemu) or +[nix](https://github.com/NixOS/nixpkgs/tree/master/pkgs/development/quickemu) +packaging will take care of the dependencies. For other host +distributions or operating systems it will be necessary to install the +above requirements or their equivalents. + +These examples may save a little typing + +Debian: + + sudo apt install qemu bash coreutils ovmf grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-client-gtk swtpm wget xdg-user-dirs zsync unzip + +Fedora: + + sudo dnf install qemu bash coreutils edk2-tools grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-gtk-tools swtpm wget xdg-user-dirs xrandr unzip + +MacOS: + +This is a work in progress (see [issue +248](https://github.com/quickemu-project/quickemu/issues/248) for other +steps and changes that may enable running on MacOS) + + brew install qemu bash coreutils grep jq python@3.10 cdrtools gnu-sed spice-gtk wget zsync + +# Usage + +## Graphical User Interfaces While `quickemu` and `quickget` are designed for the terminal, a graphical user interface is also available: @@ -112,33 +135,30 @@ Many thanks to [Luke Wesley-Holley](https://github.com/Lukewh) and ### Quickgui for Ubuntu -``` {.bash} +``` bash sudo add-apt-repository ppa:yannick-mauray/quickgui sudo apt update sudo apt install quickgui ``` -Install Quickemu -================ +# Install Quickemu -Ubuntu ------- +## Ubuntu Quickemu is available from a PPA for Ubuntu users. The Quickemu PPA also includes a back port of QEMU 6.0.0 for 20.04 (Focal) and 21.04 (Hirsute). To install Quickemu and all the dependencies run the following in a terminal: -``` {.bash} +``` bash sudo apt-add-repository ppa:flexiondotorg/quickemu sudo apt update sudo apt install quickemu ``` -Other Linux ------------ +## Other Linux -``` {.bash} +``` bash git clone --depth=1 https://github.com/wimpysworld/quickemu cd quickemu ``` @@ -160,15 +180,14 @@ status](https://repology.org/badge/vertical-allrepos/quickemu.svg)](https://repo [![Packaging status](https://repology.org/badge/vertical-allrepos/quickgui.svg)](https://repology.org/project/quickgui/versions) -Ubuntu Guest ------------- +## Ubuntu Guest `quickget` will automatically download an Ubuntu release and create the virtual machine configuration. -``` {.bash} -quickget ubuntu 20.04 -quickemu --vm ubuntu-20.04.conf +``` bash +quickget ubuntu 22.04 +quickemu --vm ubuntu-22.04.conf ``` - Complete the installation as normal. @@ -185,7 +204,7 @@ quickemu --vm ubuntu-20.04.conf `quickget` can also download/refresh devel images via `zsync` for Ubuntu developers and testers. -``` {.bash} +``` bash quickget ubuntu devel quickemu --vm ubuntu-devel.conf ``` @@ -208,8 +227,7 @@ with your preferred flavour. - `ubuntu` (Ubuntu) - `xubuntu` (Xubuntu) -Other Operating Systems ------------------------ +## Other Operating Systems `quickget` also supports: @@ -218,11 +236,15 @@ Other Operating Systems - `android` (Android x86) - `archlinux` (Arch Linux) - `arcolinux` (Arco Linux) +- `batocera` (Batocera) - `cachyos` (CachyOS) +- `centos-stream` (CentOS Stream) - `debian` (Debian) +- `deepin` (Deepin) - `devuan` (Devuan) - `dragonflybsd` (DragonFlyBSD) - `elementary` (elementary OS) +- `endeavouros` (EndeavourOS) - `fedora` (Fedora) - `freebsd` (FreeBSD) - `freedos` (FreeDOS) @@ -234,6 +256,7 @@ Other Operating Systems - `kdeneon` (KDE Neon) - `kolibrios` (KolibriOS) - `linuxmint` (Linux Mint) +- `lmde` (Linux Mint Debian Edition) - `manjaro` (Manjaro) - `mxlinux` (MX Linux) - `netboot` (netboot.xyz) @@ -257,7 +280,7 @@ configuration. - Download a .iso image of a Linux distribution - Create a VM configuration file; for example `debian-bullseye.conf` -``` {.bash} +``` bash guest_os="linux" disk_img="debian-bullseye/disk.qcow2" iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso" @@ -265,7 +288,7 @@ iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso" - Use `quickemu` to start the virtual machine: -``` {.bash} +``` bash quickemu --vm debian-bullseye.conf ``` @@ -276,13 +299,12 @@ quickemu --vm debian-bullseye.conf - Install the SPICE WebDAV agent (`spice-webdavd`) to enable file sharing. -macOS Guest ------------ +## macOS Guest `quickget` automatically downloads a macOS recovery image and creates a virtual machine configuration. -``` {.bash} +``` bash quickget macos catalina quickemu --vm macos-catalina.conf ``` @@ -312,7 +334,7 @@ supported. The default macOS configuration looks like this: -``` {.bash} +``` bash guest_os="macos" img="macos-catalina/RecoveryImage.img" disk_img="macos-catalina/disk.qcow2" @@ -363,8 +385,7 @@ There are some considerations when running macOS via Quickemu. webdavd](https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24). - Copy/paste via SPICE agent is **not available on macOS**. -Windows 8.1, 10 & 11 Guests ---------------------------- +## Windows 8.1, 10 & 11 Guests `quickget` can automatically download Windows 8.1, [Windows 10](https://www.microsoft.com/en-gb/software-download/windows10ISO) and @@ -374,7 +395,7 @@ with the [VirtIO drivers for Windows](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/) and creates a virtual machine configuration. -``` {.bash} +``` bash quickget windows 11 quickemu --vm windows-11.conf ``` @@ -388,13 +409,13 @@ By default `quickget` will download the *"English International"* release, but you can optionally specify one of the supported languages: For example: -``` {.bash} +``` bash quickget windows 11 "Chinese (Traditional)" ``` The default Windows 11 configuration looks like this: -``` {.bash} +``` bash guest_os="windows" disk_img="windows-11/disk.qcow2" iso="windows-11/Win11_EnglishInternational_x64.iso" @@ -408,8 +429,7 @@ secureboot="on" - `tpm="on"` instructs `quickemu` to create a software emulated TPM device using `swtpm`. -SPICE -===== +# SPICE The following features are available while using the SPICE protocol: @@ -421,51 +441,49 @@ To use SPICE add `--display spice` to the Quickemu invocation, this requires that the `spicy` client is installed, available from the `spice-client-gtk` package in Debian/Ubuntu. -``` {.bash} -quickemu --vm ubuntu-20.04.conf --display spice +``` bash +quickemu --vm ubuntu-22.04.conf --display spice ``` -To enable copy/paste with a Windows guest, install [SPICE Windows guest tools](https://www.spice-space.org/download.html) in the guest VM. +To enable copy/paste with a Windows guest, install [SPICE Windows guest +tools](https://www.spice-space.org/download.html) in the guest VM. -Headless --------- +## Headless To start a VM with SPICE enabled, but no display attached use `--display none`. This requires that the `spicy` client is installed, available from the `spice-client-gtk` package in Debian/Ubuntu to connect to the running VM -``` {.bash} -quickemu --vm ubuntu-20.04.conf --display none +``` bash +quickemu --vm ubuntu-22.04.conf --display none ``` You can also use the `.ports` file in the VM directory to lookup what SSH and SPICE ports the VM is connected to. -``` {.bash} -cat ubuntu-20.04/ubuntu-20.04.ports +``` bash +cat ubuntu-22.04/ubuntu-22.04.ports ``` If, for example, the SSH port is set to 22220, and assuming your VM has a started SSH service (details vary by OS), you can typically SSH into it from the host as follows: -``` {.bash} +``` bash ssh -p 22220 your_vm_user@localhost ``` -Accessibility -============= +# Accessibility Qemu provides support for using BrlAPI to display braille output on a real or fake device. -``` {.bash} -quickemu --vm ubuntu-21.10.conf --braille --display sdl +``` bash +quickemu --vm ubuntu-22.04.conf --braille --display sdl ``` -BIOS and EFI -============ +# BIOS and EFI Since Quickemu 2.1.0 `efi` is the default boot option. If you want to override this behaviour then add the following line to you VM @@ -473,8 +491,7 @@ configuration to enable legacy BIOS. - `boot="legacy"` - Enable Legacy BIOS boot -Tuning CPU cores, RAM & disks -============================= +# Tuning CPU cores, RAM & disks By default, Quickemu will calculate the number of CPUs cores and RAM to allocate to a VM based on the specifications of your host computer. You @@ -489,8 +506,7 @@ Add additional lines to your virtual machine configuration: - `disk_size="16G"` - Specify the size of the virtual disk allocated to the VM -Disk preallocation ------------------- +## Disk preallocation Preallocation mode (allowed values: `off` (default), `metadata`, `falloc`, `full`). An image with preallocated metadata is initially @@ -502,16 +518,14 @@ configuration. - `preallocation="metadata"` -CD-ROM disks ------------- +## CD-ROM disks If you want to expose an ISO image from the host to guest add the following line to the VM configuration: - `fixed_iso="/path/to/image.iso"` -Floppy disks ------------- +## Floppy disks If you're like [Alan Pope](https://popey.com) you'll probably want to mount a floppy disk image in the guest. To do so add the following line @@ -519,14 +533,12 @@ to the VM configuration: - `floppy="/path/to/floppy.img"` -File Sharing -============ +# File Sharing All File Sharing options will only expose `~/Public` (or localised variations) for the current user to the guest VMs. -Samba 🐧 🍏 🪟 ------------ +## Samba 🐧 🍏 🪟 If `smbd` is available on the host, Quickemu will automatically enable the built-in QEMU support for exposing a Samba share from the host to @@ -534,22 +546,28 @@ the guest. You can install the minimal Samba components on Ubuntu using: -``` {.bash} +``` bash sudo apt install --no-install-recommends samba ``` -SPICE WebDAV 🐧 🪟 ----------------- +If everything is set up correctly, the `smbd` address will be printed +when the virtual machine is started. For example: + + - smbd: On guest: smb://10.0.2.4/qemu + +If using a Windows guest, right-click on "This PC", click "Add a network +location", and paste this address, removing `smb:` and replacing forward +slashes with backslashes (in this example `\\10.0.2.4\qemu`). + +## SPICE WebDAV 🐧 🪟 - TBD -VirtIO-9P 🐧 🍏 -------------- +## VirtIO-9P 🐧 🍏 - TBD -Network port forwarding -======================= +# Network port forwarding Add an additional line to your virtual machine configuration. For example: @@ -561,30 +579,26 @@ In the example above: - Port 8123 on the host is forwarded to port 8123 on the guest. - Port 8888 on the host is forwarded to port 80 on the guest. -Bridged networking -================== +# Bridged networking Connect your virtual machine to a preconfigured network bridge. Add an additional line to your virtual machine configuration - `bridge="br0"` -USB redirection -=============== +# USB redirection Quickemu supports USB redirection via SPICE pass-through and host pass-through. -SPICE redirection (recommended) -------------------------------- +## SPICE redirection (recommended) Using SPICE for USB pass-through is easiest as it doesn't require any elevated permission, start Quickemu with `--display spice` and then select `Input` -\> `Select USB Device for redirection` from the menu to choose which device(s) you want to attach to the guest. -Host redirection **NOT Recommended** ------------------------------------- +## Host redirection **NOT Recommended** **USB host redirection is not recommended**, it is provided purely for backwards compatibility to older versions of Quickemu. Using SPICE is @@ -597,9 +611,9 @@ example: In the example above: -- The USB device with vendor\_id 046d and product\_id 082d will be +- The USB device with vendor_id 046d and product_id 082d will be exposed to the guest. -- The USB device with vendor\_id 046d and product\_id 085e will be +- The USB device with vendor_id 046d and product_id 085e will be exposed to the guest. If the USB devices are not writable, `quickemu` will display the @@ -611,55 +625,80 @@ like this: sudo chown -v root:user /dev/bus/usb/001/005 ERROR! USB permission changes are required 👆 -TPM -=== +# TPM Since Quickemu 2.2.0 a software emulated TPM device can be added to guest virtual machines. Just add `tpm="on"` to your VM configuration. `quickget` will automatically add this line to Windows 11 virtual machines. -All the options -=============== +# All the options Here are the usage instructions: -``` {.bash} + +``` + Usage quickemu --vm ubuntu.conf You can also pass optional parameters - --braille : Enable braille support. Requires SDL. - --delete-disk : Delete the disk image and EFI variables - --delete-vm : Delete the entire VM and it's configuration - --display : Select display backend. 'sdl' (default), 'gtk', 'none', or 'spice' - --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit) - --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers - --screen : Use specified screen to determine the window size. - --shortcut : Create a desktop shortcut - --snapshot apply : Apply/restore a snapshot. - --snapshot create : Create a snapshot. - --snapshot delete : Delete a snapshot. - --snapshot info : Show disk/snapshot info. - --status-quo : Do not commit any changes to disk/snapshot. - --version : Print version + --braille : Enable braille support. Requires SDL. + --delete-disk : Delete the disk image and EFI variables + --delete-vm : Delete the entire VM and it's configuration + --display : Select display backend. 'sdl' (default), 'gtk', 'none', or 'spice' + --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit) + --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers + --screen : Use specified screen to determine the window size. + --shortcut : Create a desktop shortcut + --snapshot apply : Apply/restore a snapshot. + --snapshot create : Create a snapshot. + --snapshot delete : Delete a snapshot. + --snapshot info : Show disk/snapshot info. + --status-quo : Do not commit any changes to disk/snapshot. + --viewer : Choose an alternative viewer. @Options: 'spicy' (default), 'remote-viewer', 'none' + --ssh-port : Set ssh-port manually + --spice-port : Set spice-port manually + --public-dir : expose share directory. @Options: '' (default: xdg-user-dir PUBLICSHARE), '', 'none' + --monitor : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none' + --monitor-telnet-host : Set telnet host for monitor. (default: 'localhost') + --monitor-telnet-port : Set telnet port for monitor. (default: '4440') + --monitor-cmd : Send command to monitor if available. (Example: system_powerdown) + --serial : Set serial connection type. @Options: 'socket' (default), 'telnet', 'none' + --serial-telnet-host : Set telnet host for serial. (default: 'localhost') + --serial-telnet-port : Set telnet port for serial. (default: '6660') + --keyboard : Set keyboard. @Options: 'usb' (default), 'ps2', 'virtio' + --keyboard_layout : Set keyboard layout. + --mouse : Set mouse. @Options: 'tablet' (default), 'ps2', 'usb', 'virtio' + --usb-controller : Set usb-controller. @Options: 'ehci' (default), 'xhci', 'none' + --extra_args : Pass additional arguments to qemu + --version : Print version + ``` -Desktop shortcuts ------------------ + + +## Desktop shortcuts Desktop shortcuts can be created for a VM, the shortcuts are saved in `~/.local/share/applications`. Here is an example of how to create a shortcut. -``` {.bash} -quickemu --vm ubuntu-20.04-desktop.conf --shortcut +``` bash +quickemu --vm ubuntu-22.04-desktop.conf --shortcut ``` -Screen and window size (Linux guests only) ------------------------------------------- +## Screen and window size (Linux guests only) `qemu` will always default to the primary monitor to display the VM's window. @@ -680,13 +719,13 @@ must match the resolution of the screen. To know which screen to use, type: -``` {.bash} +``` bash xrandr --listmonitors | grep -v Monitors ``` The command will output something like this: -``` {.bash} +``` bash 0: +*HDMI-0 2560/597x1440/336+1920+0 HDMI-0 1: +DVI-D-0 1920/527x1080/296+0+0 DVI-D-0 ``` @@ -695,7 +734,7 @@ The first number is what needs to be passed to the `--screen` option. For example: -``` {.bash} +``` bash quickemu --vm vm.conf --screen 0 ``` @@ -704,8 +743,7 @@ which Quickemu sizes to 2048x1152. Without the `--screen` option, Quickemu would have used the 1920x1080 monitor which results in a window size of 1664x936. -References -========== +# References Useful reference that assisted the development of Quickemu. diff --git a/build-docs b/build-docs index 3ede604..51ee39c 160000 --- a/build-docs +++ b/build-docs @@ -1 +1 @@ -Subproject commit 3ede604a11b7a666f91bb19705d32d73fb0bd4d7 +Subproject commit 51ee39c41c13fb1cc78e86ec24b100f35c337d70 diff --git a/docs/quickemu.1 b/docs/quickemu.1 index 75ec017..77de3ae 100644 --- a/docs/quickemu.1 +++ b/docs/quickemu.1 @@ -1,6 +1,20 @@ -.\" Automatically generated by Pandoc 2.9.2.1 +.\" Automatically generated by Pandoc 2.18 .\" -.TH "QUICKEMU" "1" "February 20, 2022" "quickemu" "Quickemu User Manual" +.\" Define V font for inline verbatim, using C font in formats +.\" that render this, and otherwise B font. +.ie "\f[CB]x\f[]"x" \{\ +. ftr V B +. ftr VI BI +. ftr VB B +. ftr VBI BI +.\} +.el \{\ +. ftr V CR +. ftr VI CI +. ftr VB CB +. ftr VBI CBI +.\} +.TH "QUICKEMU" "1" "July 30, 2022" "quickemu" "Quickemu User Manual" .hy .SH NAME .PP @@ -61,8 +75,8 @@ Do not commit any changes to disk/snapshot. Print version .SH EXAMPLES .TP -\f[B]quickemu \[en]vm ubuntu-mate-21.10-.conf\f[R] -Launches the VM specified in the file \f[I]ubuntu-mate-21.10-.conf\f[R] +\f[B]quickemu \[en]vm ubuntu-mate-22.04-.conf\f[R] +Launches the VM specified in the file \f[I]ubuntu-mate-22.04-.conf\f[R] .SS Introduction .PP Quickly create and run highly optimised desktop virtual machines for @@ -73,8 +87,8 @@ For example: .IP .nf \f[C] -quickget ubuntu-mate 21.10 -quickemu --vm ubuntu-mate-21.10-.conf +quickget ubuntu-mate 22.04 +quickemu --vm ubuntu-mate-22.04-.conf \f[R] .fi .PP @@ -105,7 +119,7 @@ QEMU Guest Agent support (https://wiki.qemu.org/Features/GuestAgent); provides access to a system-level agent via standard QMP commands .IP \[bu] 2 Samba file sharing for Linux, macOS and Windows guests (\f[I]if -\f[CI]smbd\f[I] is installed on the host\f[R]) +\f[VI]smbd\f[I] is installed on the host\f[R]) .IP \[bu] 2 VirGL acceleration .IP \[bu] 2 @@ -181,10 +195,49 @@ xrandr (https://gitlab.freedesktop.org/xorg/app/xrandr) zsync (http://zsync.moria.org.uk/) .IP \[bu] 2 unzip (http://www.info-zip.org/UnZip.html) +.SS Installing Requirements +.PP +For Ubuntu, Arch and nixos systems the +ppa (https://launchpad.net/~flexiondotorg/+archive/ubuntu/quickemu), +AUR (https://aur.archlinux.org/packages/quickemu) or +nix (https://github.com/NixOS/nixpkgs/tree/master/pkgs/development/quickemu) +packaging will take care of the dependencies. +For other host distributions or operating systems it will be necessary +to install the above requirements or their equivalents. +.PP +These examples may save a little typing +.PP +Debian: +.IP +.nf +\f[C] +sudo apt install qemu bash coreutils ovmf grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-client-gtk swtpm wget xdg-user-dirs zsync unzip +\f[R] +.fi +.PP +Fedora: +.IP +.nf +\f[C] +sudo dnf install qemu bash coreutils edk2-tools grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-gtk-tools swtpm wget xdg-user-dirs xrandr unzip +\f[R] +.fi +.PP +MacOS: +.PP +This is a work in progress (see issue +248 (https://github.com/quickemu-project/quickemu/issues/248) for other +steps and changes that may enable running on MacOS) +.IP +.nf +\f[C] +brew install qemu bash coreutils grep jq python\[at]3.10 cdrtools gnu-sed spice-gtk wget zsync +\f[R] +.fi .SH Usage .SS Graphical User Interfaces .PP -While \f[C]quickemu\f[R] and \f[C]quickget\f[R] are designed for the +While \f[V]quickemu\f[R] and \f[V]quickget\f[R] are designed for the terminal, a graphical user interface is also available: .IP \[bu] 2 \f[B]Quickgui (https://github.com/quickgui/quickgui)\f[R] by Mark @@ -206,13 +259,13 @@ sudo apt install quickgui .fi .SS Ubuntu Guest .PP -\f[C]quickget\f[R] will automatically download an Ubuntu release and +\f[V]quickget\f[R] will automatically download an Ubuntu release and create the virtual machine configuration. .IP .nf \f[C] -quickget ubuntu 20.04 -quickemu --vm ubuntu-20.04.conf +quickget ubuntu 22.04 +quickemu --vm ubuntu-22.04.conf \f[R] .fi .IP \[bu] 2 @@ -221,24 +274,24 @@ Complete the installation as normal. Post-install: .RS 2 .IP \[bu] 2 -Install the SPICE agent (\f[C]spice-vdagent\f[R]) to enable copy/paste +Install the SPICE agent (\f[V]spice-vdagent\f[R]) to enable copy/paste and USB redirection .RS 2 .IP \[bu] 2 -\f[C]sudo apt install spice-vdagent\f[R] +\f[V]sudo apt install spice-vdagent\f[R] .RE .IP \[bu] 2 -Install the SPICE WebDAV agent (\f[C]spice-webdavd\f[R]) to enable file +Install the SPICE WebDAV agent (\f[V]spice-webdavd\f[R]) to enable file sharing. .RS 2 .IP \[bu] 2 -\f[C]sudo apt install spice-webdavd\f[R] +\f[V]sudo apt install spice-webdavd\f[R] .RE .RE .SS Ubuntu devel (daily-live) images .PP -\f[C]quickget\f[R] can also download/refresh devel images via -\f[C]zsync\f[R] for Ubuntu developers and testers. +\f[V]quickget\f[R] can also download/refresh devel images via +\f[V]zsync\f[R] for Ubuntu developers and testers. .IP .nf \f[C] @@ -247,106 +300,116 @@ quickemu --vm ubuntu-devel.conf \f[R] .fi .PP -You can run \f[C]quickget ubuntu devel\f[R] to refresh your daily +You can run \f[V]quickget ubuntu devel\f[R] to refresh your daily development image as often as you like, it will even automatically switch to a new series. .SS Ubuntu Flavours .PP All the official Ubuntu flavours are supported, just replace -\f[C]ubuntu\f[R] with your preferred flavour. +\f[V]ubuntu\f[R] with your preferred flavour. .IP \[bu] 2 -\f[C]kubuntu\f[R] (Kubuntu) +\f[V]kubuntu\f[R] (Kubuntu) .IP \[bu] 2 -\f[C]lubuntu\f[R] (Lubuntu) +\f[V]lubuntu\f[R] (Lubuntu) .IP \[bu] 2 -\f[C]ubuntu-budgie\f[R] (Ubuntu Budgie) +\f[V]ubuntu-budgie\f[R] (Ubuntu Budgie) .IP \[bu] 2 -\f[C]ubuntukylin\f[R] (Ubuntu Kylin) +\f[V]ubuntukylin\f[R] (Ubuntu Kylin) .IP \[bu] 2 -\f[C]ubuntu-mate\f[R] (Ubuntu MATE) +\f[V]ubuntu-mate\f[R] (Ubuntu MATE) .IP \[bu] 2 -\f[C]ubuntustudio\f[R] (Ubuntu Studio) +\f[V]ubuntustudio\f[R] (Ubuntu Studio) .IP \[bu] 2 -\f[C]ubuntu\f[R] (Ubuntu) +\f[V]ubuntu\f[R] (Ubuntu) .IP \[bu] 2 -\f[C]xubuntu\f[R] (Xubuntu) +\f[V]xubuntu\f[R] (Xubuntu) .SS Other Operating Systems .PP -\f[C]quickget\f[R] also supports: +\f[V]quickget\f[R] also supports: .IP \[bu] 2 -\f[C]alma\f[R] (Alma Linux) +\f[V]alma\f[R] (Alma Linux) .IP \[bu] 2 -\f[C]alpine\f[R] (Alpine Linux) +\f[V]alpine\f[R] (Alpine Linux) .IP \[bu] 2 -\f[C]android\f[R] (Android x86) +\f[V]android\f[R] (Android x86) .IP \[bu] 2 -\f[C]archlinux\f[R] (Arch Linux) +\f[V]archlinux\f[R] (Arch Linux) .IP \[bu] 2 -\f[C]arcolinux\f[R] (Arco Linux) +\f[V]arcolinux\f[R] (Arco Linux) .IP \[bu] 2 -\f[C]cachyos\f[R] (CachyOS) +\f[V]batocera\f[R] (Batocera) .IP \[bu] 2 -\f[C]debian\f[R] (Debian) +\f[V]cachyos\f[R] (CachyOS) .IP \[bu] 2 -\f[C]devuan\f[R] (Devuan) +\f[V]centos-stream\f[R] (CentOS Stream) .IP \[bu] 2 -\f[C]dragonflybsd\f[R] (DragonFlyBSD) +\f[V]debian\f[R] (Debian) .IP \[bu] 2 -\f[C]elementary\f[R] (elementary OS) +\f[V]deepin\f[R] (Deepin) .IP \[bu] 2 -\f[C]fedora\f[R] (Fedora) +\f[V]devuan\f[R] (Devuan) .IP \[bu] 2 -\f[C]freebsd\f[R] (FreeBSD) +\f[V]dragonflybsd\f[R] (DragonFlyBSD) .IP \[bu] 2 -\f[C]freedos\f[R] (FreeDOS) +\f[V]elementary\f[R] (elementary OS) .IP \[bu] 2 -\f[C]garuda\f[R] (Garuda Linux) +\f[V]endeavouros\f[R] (EndeavourOS) .IP \[bu] 2 -\f[C]gentoo\f[R] (Gentoo) +\f[V]fedora\f[R] (Fedora) .IP \[bu] 2 -\f[C]ghostbsd\f[R] (GhostBSD) +\f[V]freebsd\f[R] (FreeBSD) .IP \[bu] 2 -\f[C]haiku\f[R] (Haiku) +\f[V]freedos\f[R] (FreeDOS) .IP \[bu] 2 -\f[C]kali\f[R] (Kali) +\f[V]garuda\f[R] (Garuda Linux) .IP \[bu] 2 -\f[C]kdeneon\f[R] (KDE Neon) +\f[V]gentoo\f[R] (Gentoo) .IP \[bu] 2 -\f[C]kolibrios\f[R] (KolibriOS) +\f[V]ghostbsd\f[R] (GhostBSD) .IP \[bu] 2 -\f[C]linuxmint\f[R] (Linux Mint) +\f[V]haiku\f[R] (Haiku) .IP \[bu] 2 -\f[C]manjaro\f[R] (Manjaro) +\f[V]kali\f[R] (Kali) .IP \[bu] 2 -\f[C]mxlinux\f[R] (MX Linux) +\f[V]kdeneon\f[R] (KDE Neon) .IP \[bu] 2 -\f[C]netboot\f[R] (netboot.xyz) +\f[V]kolibrios\f[R] (KolibriOS) .IP \[bu] 2 -\f[C]netbsd\f[R] (NetBSD) +\f[V]linuxmint\f[R] (Linux Mint) .IP \[bu] 2 -\f[C]nixos\f[R] (NixOS) +\f[V]lmde\f[R] (Linux Mint Debian Edition) .IP \[bu] 2 -\f[C]openbsd\f[R] (OpenBSD) +\f[V]manjaro\f[R] (Manjaro) .IP \[bu] 2 -\f[C]opensuse\f[R] (openSUSE) +\f[V]mxlinux\f[R] (MX Linux) .IP \[bu] 2 -\f[C]oraclelinux\f[R] (Oracle Linux) +\f[V]netboot\f[R] (netboot.xyz) .IP \[bu] 2 -\f[C]popos\f[R] (Pop!_OS) +\f[V]netbsd\f[R] (NetBSD) .IP \[bu] 2 -\f[C]regolith\f[R] (Regolith Linux) +\f[V]nixos\f[R] (NixOS) .IP \[bu] 2 -\f[C]rockylinux\f[R] (Rocky Linux) +\f[V]openbsd\f[R] (OpenBSD) .IP \[bu] 2 -\f[C]slackware\f[R] (Slackware) +\f[V]opensuse\f[R] (openSUSE) .IP \[bu] 2 -\f[C]solus\f[R] (Solus) +\f[V]oraclelinux\f[R] (Oracle Linux) .IP \[bu] 2 -\f[C]tails\f[R] (Tails) +\f[V]popos\f[R] (Pop!_OS) .IP \[bu] 2 -\f[C]void\f[R] (Void Linux) +\f[V]regolith\f[R] (Regolith Linux) .IP \[bu] 2 -\f[C]zorin\f[R] (Zorin OS) +\f[V]rockylinux\f[R] (Rocky Linux) +.IP \[bu] 2 +\f[V]slackware\f[R] (Slackware) +.IP \[bu] 2 +\f[V]solus\f[R] (Solus) +.IP \[bu] 2 +\f[V]tails\f[R] (Tails) +.IP \[bu] 2 +\f[V]void\f[R] (Void Linux) +.IP \[bu] 2 +\f[V]zorin\f[R] (Zorin OS) .PP Or you can download a Linux image and manually create a VM configuration. @@ -354,7 +417,7 @@ configuration. Download a .iso image of a Linux distribution .IP \[bu] 2 Create a VM configuration file; for example -\f[C]debian-bullseye.conf\f[R] +\f[V]debian-bullseye.conf\f[R] .IP .nf \f[C] @@ -364,7 +427,7 @@ iso=\[dq]debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso\[dq] \f[R] .fi .IP \[bu] 2 -Use \f[C]quickemu\f[R] to start the virtual machine: +Use \f[V]quickemu\f[R] to start the virtual machine: .IP .nf \f[C] @@ -377,15 +440,15 @@ Complete the installation as normal. Post-install: .RS 2 .IP \[bu] 2 -Install the SPICE agent (\f[C]spice-vdagent\f[R]) to enable copy/paste +Install the SPICE agent (\f[V]spice-vdagent\f[R]) to enable copy/paste and USB redirection. .IP \[bu] 2 -Install the SPICE WebDAV agent (\f[C]spice-webdavd\f[R]) to enable file +Install the SPICE WebDAV agent (\f[V]spice-webdavd\f[R]) to enable file sharing. .RE .SS macOS Guest .PP -\f[C]quickget\f[R] automatically downloads a macOS recovery image and +\f[V]quickget\f[R] automatically downloads a macOS recovery image and creates a virtual machine configuration. .IP .nf @@ -395,8 +458,8 @@ quickemu --vm macos-catalina.conf \f[R] .fi .PP -macOS \f[C]high-sierra\f[R], \f[C]mojave\f[R], \f[C]catalina\f[R], -\f[C]big-sur\f[R] and \f[C]monterey\f[R] are supported. +macOS \f[V]high-sierra\f[R], \f[V]mojave\f[R], \f[V]catalina\f[R], +\f[V]big-sur\f[R] and \f[V]monterey\f[R] are supported. .IP \[bu] 2 Use cursor keys and enter key to select the \f[B]macOS Base System\f[R] .IP \[bu] 2 @@ -409,19 +472,19 @@ Click \f[B]Disk Utility\f[R] and \f[B]Continue\f[R] On macOS Catalina, Big Sur & Monterey .RS 2 .IP \[bu] 2 -Select \f[C]Apple Inc. VirtIO Block Media\f[R] from the list and click +Select \f[V]Apple Inc. VirtIO Block Media\f[R] from the list and click \f[B]Erase\f[R]. .RE .IP \[bu] 2 On macOS Mojave and High Sierra .RS 2 .IP \[bu] 2 -Select \f[C]QEMU HARDDISK Media\f[R] (\[ti]103.08GB) from the list and +Select \f[V]QEMU HARDDISK Media\f[R] (\[ti]103.08GB) from the list and click \f[B]Erase\f[R]. .RE .RE .IP \[bu] 2 -Enter a \f[C]Name:\f[R] for the disk and click \f[B]Erase\f[R]. +Enter a \f[V]Name:\f[R] for the disk and click \f[B]Erase\f[R]. .IP \[bu] 2 Click \f[B]Done\f[R]. .IP \[bu] 2 @@ -455,10 +518,10 @@ macos_release=\[dq]catalina\[dq] \f[R] .fi .IP \[bu] 2 -\f[C]guest_os=\[dq]macos\[dq]\f[R] instructs Quickemu to optimise for +\f[V]guest_os=\[dq]macos\[dq]\f[R] instructs Quickemu to optimise for macOS. .IP \[bu] 2 -\f[C]macos_release=\[dq]catalina\[dq]\f[R] instructs Quickemu to +\f[V]macos_release=\[dq]catalina\[dq]\f[R] instructs Quickemu to optimise for a particular macOS release. .RS 2 .IP \[bu] 2 @@ -486,7 +549,7 @@ Big Sur Monterey .RE .IP \[bu] 2 -\f[C]quickemu\f[R] will automatically download the required +\f[V]quickemu\f[R] will automatically download the required OpenCore (https://github.com/acidanthera/OpenCorePkg) bootloader and OVMF firmware from OSX-KVM (https://github.com/kholia/OSX-KVM). .IP \[bu] 2 @@ -499,11 +562,11 @@ VirtIO Block Media (https://www.kraxel.org/blog/2019/06/macos-qemu-guest/) is used for the system disk where supported. .IP \[bu] 2 -VirtIO \f[C]usb-tablet\f[R] (http://philjordan.eu/osx-virt/) is used for +VirtIO \f[V]usb-tablet\f[R] (http://philjordan.eu/osx-virt/) is used for the mouse. .IP \[bu] 2 -VirtIO Network (\f[C]virtio-net\f[R]) is supported and enabled on macOS -Big Sur and newer but previous releases use \f[C]vmxnet3\f[R]. +VirtIO Network (\f[V]virtio-net\f[R]) is supported and enabled on macOS +Big Sur and newer but previous releases use \f[V]vmxnet3\f[R]. .IP \[bu] 2 VirtIO Memory Ballooning is supported and enabled on macOS Big Sur and newer but disabled for other support macOS releases. @@ -532,7 +595,7 @@ webdavd (https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24). Copy/paste via SPICE agent is \f[B]not available on macOS\f[R]. .SS Windows 8.1, 10 & 11 Guests .PP -\f[C]quickget\f[R] can automatically download Windows 8.1, Windows +\f[V]quickget\f[R] can automatically download Windows 8.1, Windows 10 (https://www.microsoft.com/en-gb/software-download/windows10ISO) and Windows 11 (https://www.microsoft.com/en-gb/software-download/windows11) along with the VirtIO drivers for @@ -551,7 +614,7 @@ Complete the installation as you normally would. All relevant drivers and services should be installed automatically. .SS Regional versions .PP -By default \f[C]quickget\f[R] will download the \f[I]\[lq]English +By default \f[V]quickget\f[R] will download the \f[I]\[lq]English International\[rq]\f[R] release, but you can optionally specify one of the supported languages: For example: .IP @@ -570,74 +633,89 @@ disk_img=\[dq]windows-11/disk.qcow2\[dq] iso=\[dq]windows-11/Win11_EnglishInternational_x64.iso\[dq] fixed_iso=\[dq]windows-11/virtio-win.iso\[dq] tpm=\[dq]on\[dq] +secureboot=\[dq]on\[dq] \f[R] .fi .IP \[bu] 2 -\f[C]guest_os=\[dq]windows\[dq]\f[R] instructs \f[C]quickemu\f[R] to +\f[V]guest_os=\[dq]windows\[dq]\f[R] instructs \f[V]quickemu\f[R] to optimise for Windows. .IP \[bu] 2 -\f[C]fixed_iso=\f[R] specifies the ISO image that provides VirtIO +\f[V]fixed_iso=\f[R] specifies the ISO image that provides VirtIO drivers. .IP \[bu] 2 -\f[C]tpm=\[dq]on\[dq]\f[R] instructs \f[C]quickemu\f[R] to create a -software emulated TPM device using \f[C]swtpm\f[R]. +\f[V]tpm=\[dq]on\[dq]\f[R] instructs \f[V]quickemu\f[R] to create a +software emulated TPM device using \f[V]swtpm\f[R]. .SH All the options .PP Here are the usage instructions: .IP .nf \f[C] - Usage quickemu --vm ubuntu.conf You can also pass optional parameters - --braille : Enable braille support. Requires SDL. - --delete-disk : Delete the disk image and EFI variables - --delete-vm : Delete the entire VM and it\[aq]s configuration - --display : Select display backend. \[aq]sdl\[aq] (default), \[aq]gtk\[aq], \[aq]none\[aq], or \[aq]spice\[aq] - --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit) - --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers - --screen : Use specified screen to determine the window size. - --shortcut : Create a desktop shortcut - --snapshot apply : Apply/restore a snapshot. - --snapshot create : Create a snapshot. - --snapshot delete : Delete a snapshot. - --snapshot info : Show disk/snapshot info. - --status-quo : Do not commit any changes to disk/snapshot. - --version : Print version - + --braille : Enable braille support. Requires SDL. + --delete-disk : Delete the disk image and EFI variables + --delete-vm : Delete the entire VM and it\[aq]s configuration + --display : Select display backend. \[aq]sdl\[aq] (default), \[aq]gtk\[aq], \[aq]none\[aq], or \[aq]spice\[aq] + --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit) + --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers + --screen : Use specified screen to determine the window size. + --shortcut : Create a desktop shortcut + --snapshot apply : Apply/restore a snapshot. + --snapshot create : Create a snapshot. + --snapshot delete : Delete a snapshot. + --snapshot info : Show disk/snapshot info. + --status-quo : Do not commit any changes to disk/snapshot. + --viewer : Choose an alternative viewer. \[at]Options: \[aq]spicy\[aq] (default), \[aq]remote-viewer\[aq], \[aq]none\[aq] + --ssh-port : Set ssh-port manually + --spice-port : Set spice-port manually + --public-dir : expose share directory. \[at]Options: \[aq]\[aq] (default: xdg-user-dir PUBLICSHARE), \[aq]\[aq], \[aq]none\[aq] + --monitor : Set monitor connection type. \[at]Options: \[aq]socket\[aq] (default), \[aq]telnet\[aq], \[aq]none\[aq] + --monitor-telnet-host : Set telnet host for monitor. (default: \[aq]localhost\[aq]) + --monitor-telnet-port : Set telnet port for monitor. (default: \[aq]4440\[aq]) + --monitor-cmd : Send command to monitor if available. (Example: system_powerdown) + --serial : Set serial connection type. \[at]Options: \[aq]socket\[aq] (default), \[aq]telnet\[aq], \[aq]none\[aq] + --serial-telnet-host : Set telnet host for serial. (default: \[aq]localhost\[aq]) + --serial-telnet-port : Set telnet port for serial. (default: \[aq]6660\[aq]) + --keyboard : Set keyboard. \[at]Options: \[aq]usb\[aq] (default), \[aq]ps2\[aq], \[aq]virtio\[aq] + --keyboard_layout : Set keyboard layout. + --mouse : Set mouse. \[at]Options: \[aq]tablet\[aq] (default), \[aq]ps2\[aq], \[aq]usb\[aq], \[aq]virtio\[aq] + --usb-controller : Set usb-controller. \[at]Options: \[aq]ehci\[aq] (default), \[aq]xhci\[aq], \[aq]none\[aq] + --extra_args : Pass additional arguments to qemu + --version : Print version \f[R] .fi .SS Desktop shortcuts .PP Desktop shortcuts can be created for a VM, the shortcuts are saved in -\f[C]\[ti]/.local/share/applications\f[R]. +\f[V]\[ti]/.local/share/applications\f[R]. Here is an example of how to create a shortcut. .IP .nf \f[C] -quickemu --vm ubuntu-20.04-desktop.conf --shortcut +quickemu --vm ubuntu-22.04-desktop.conf --shortcut \f[R] .fi .SS Screen and window size (Linux guests only) .PP -\f[C]qemu\f[R] will always default to the primary monitor to display the +\f[V]qemu\f[R] will always default to the primary monitor to display the VM\[cq]s window. .PP -Without the \f[C]--screen\f[R] option, \f[C]quickemu\f[R] will look for +Without the \f[V]--screen\f[R] option, \f[V]quickemu\f[R] will look for the size of the smallest monitor, and use a size that fits on said monitor. .PP -The \f[C]--screen\f[R] option forces \f[C]quickemu\f[R] to use the size +The \f[V]--screen\f[R] option forces \f[V]quickemu\f[R] to use the size of the given monitor to compute the size of the window. \f[B]It won\[cq]t use that monitor to display the VM\[cq]s window if it\[cq]s not the primary monitor\f[R]. This is useful if the primary monitor if not the smallest one, and if the VM\[cq]s window doesn\[cq]t need to be moved around. .PP -The \f[C]--screen\f[R] option is also useful with the -\f[C]--fullscreen\f[R] option, again because \f[C]qemu\f[R] will always +The \f[V]--screen\f[R] option is also useful with the +\f[V]--fullscreen\f[R] option, again because \f[V]qemu\f[R] will always use the primary monitor. In order for the fullscreen mode to work properly, the resolution of the VM\[cq]s window must match the resolution of the screen. @@ -659,7 +737,7 @@ The command will output something like this: \f[R] .fi .PP -The first number is what needs to be passed to the \f[C]--screen\f[R] +The first number is what needs to be passed to the \f[V]--screen\f[R] option. .PP For example: @@ -672,7 +750,7 @@ quickemu --vm vm.conf --screen 0 .PP The above uses the 2560x1440 screen to compute the size of the window, which Quickemu sizes to 2048x1152. -Without the \f[C]--screen\f[R] option, Quickemu would have used the +Without the \f[V]--screen\f[R] option, Quickemu would have used the 1920x1080 monitor which results in a window size of 1664x936. .SH References .PP diff --git a/docs/quickemu.1.md b/docs/quickemu.1.md index c1d878d..66a98e7 100644 --- a/docs/quickemu.1.md +++ b/docs/quickemu.1.md @@ -1,30 +1,26 @@ --- author: Martin Wimpress -date: 'February 20, 2022' +date: July 30, 2022 footer: quickemu header: Quickemu User Manual section: 1 title: QUICKEMU --- -NAME -==== +# NAME quickemu - A quick VM builder and manager -SYNOPSIS -======== +# SYNOPSIS **quickemu** \[*OPTION*\]... -DESCRIPTION -=========== +# DESCRIPTION **quickemu** will create and run highly optimised desktop virtual machines for Linux, macOS and Windows -OPTIONS -======= +# OPTIONS **--vm** : vm configuration file @@ -70,23 +66,21 @@ You can also pass optional parameters **--version** : Print version -EXAMPLES -======== +# EXAMPLES -**quickemu --vm ubuntu-mate-21.10-.conf** -: Launches the VM specified in the file *ubuntu-mate-21.10-.conf* +**quickemu --vm ubuntu-mate-22.04-.conf** +: Launches the VM specified in the file *ubuntu-mate-22.04-.conf* -Introduction ------------- +## Introduction Quickly create and run highly optimised desktop virtual machines for Linux, macOS and Windows; with just two commands. You decide what operating system you want to run and Quickemu will figure out the best way to do it for you. For example: -``` {.bash} -quickget ubuntu-mate 21.10 -quickemu --vm ubuntu-mate-21.10-.conf +``` bash +quickget ubuntu-mate 22.04 +quickemu --vm ubuntu-mate-22.04-.conf ``` The original objective of the project was to enable quick testing of @@ -96,8 +90,7 @@ and no elevated permissions are required to run the virtual machines. **Quickemu now also includes comprehensive support for macOS and Windows**. -Features --------- +## Features - **macOS** Monterey, Big Sur, Catalina, Mojave & High Sierra - **Windows** 8.1, 10 and 11 including TPM 2.0 @@ -135,8 +128,7 @@ Quickemu. [![Replace VirtualBox with Bash & QEMU](https://img.youtube.com/vi/AOTYWEgw0hI/0.jpg)](https://www.youtube.com/watch?v=AOTYWEgw0hI) -Requirements ------------- +## Requirements - [QEMU](https://www.qemu.org/) (*6.0.0 or newer*) **with GTK, SDL, SPICE & VirtFS support** @@ -161,11 +153,37 @@ Requirements - [zsync](http://zsync.moria.org.uk/) - [unzip](http://www.info-zip.org/UnZip.html) -Usage -===== +### Installing Requirements -Graphical User Interfaces -------------------------- +For Ubuntu, Arch and nixos systems the +[ppa](https://launchpad.net/~flexiondotorg/+archive/ubuntu/quickemu), +[AUR](https://aur.archlinux.org/packages/quickemu) or +[nix](https://github.com/NixOS/nixpkgs/tree/master/pkgs/development/quickemu) +packaging will take care of the dependencies. For other host +distributions or operating systems it will be necessary to install the +above requirements or their equivalents. + +These examples may save a little typing + +Debian: + + sudo apt install qemu bash coreutils ovmf grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-client-gtk swtpm wget xdg-user-dirs zsync unzip + +Fedora: + + sudo dnf install qemu bash coreutils edk2-tools grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-gtk-tools swtpm wget xdg-user-dirs xrandr unzip + +MacOS: + +This is a work in progress (see [issue +248](https://github.com/quickemu-project/quickemu/issues/248) for other +steps and changes that may enable running on MacOS) + + brew install qemu bash coreutils grep jq python@3.10 cdrtools gnu-sed spice-gtk wget zsync + +# Usage + +## Graphical User Interfaces While `quickemu` and `quickget` are designed for the terminal, a graphical user interface is also available: @@ -180,21 +198,20 @@ Many thanks to [Luke Wesley-Holley](https://github.com/Lukewh) and ### Quickgui for Ubuntu -``` {.bash} +``` bash sudo add-apt-repository ppa:yannick-mauray/quickgui sudo apt update sudo apt install quickgui ``` -Ubuntu Guest ------------- +## Ubuntu Guest `quickget` will automatically download an Ubuntu release and create the virtual machine configuration. -``` {.bash} -quickget ubuntu 20.04 -quickemu --vm ubuntu-20.04.conf +``` bash +quickget ubuntu 22.04 +quickemu --vm ubuntu-22.04.conf ``` - Complete the installation as normal. @@ -211,7 +228,7 @@ quickemu --vm ubuntu-20.04.conf `quickget` can also download/refresh devel images via `zsync` for Ubuntu developers and testers. -``` {.bash} +``` bash quickget ubuntu devel quickemu --vm ubuntu-devel.conf ``` @@ -234,8 +251,7 @@ with your preferred flavour. - `ubuntu` (Ubuntu) - `xubuntu` (Xubuntu) -Other Operating Systems ------------------------ +## Other Operating Systems `quickget` also supports: @@ -244,11 +260,15 @@ Other Operating Systems - `android` (Android x86) - `archlinux` (Arch Linux) - `arcolinux` (Arco Linux) +- `batocera` (Batocera) - `cachyos` (CachyOS) +- `centos-stream` (CentOS Stream) - `debian` (Debian) +- `deepin` (Deepin) - `devuan` (Devuan) - `dragonflybsd` (DragonFlyBSD) - `elementary` (elementary OS) +- `endeavouros` (EndeavourOS) - `fedora` (Fedora) - `freebsd` (FreeBSD) - `freedos` (FreeDOS) @@ -260,6 +280,7 @@ Other Operating Systems - `kdeneon` (KDE Neon) - `kolibrios` (KolibriOS) - `linuxmint` (Linux Mint) +- `lmde` (Linux Mint Debian Edition) - `manjaro` (Manjaro) - `mxlinux` (MX Linux) - `netboot` (netboot.xyz) @@ -283,7 +304,7 @@ configuration. - Download a .iso image of a Linux distribution - Create a VM configuration file; for example `debian-bullseye.conf` -``` {.bash} +``` bash guest_os="linux" disk_img="debian-bullseye/disk.qcow2" iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso" @@ -291,7 +312,7 @@ iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso" - Use `quickemu` to start the virtual machine: -``` {.bash} +``` bash quickemu --vm debian-bullseye.conf ``` @@ -302,13 +323,12 @@ quickemu --vm debian-bullseye.conf - Install the SPICE WebDAV agent (`spice-webdavd`) to enable file sharing. -macOS Guest ------------ +## macOS Guest `quickget` automatically downloads a macOS recovery image and creates a virtual machine configuration. -``` {.bash} +``` bash quickget macos catalina quickemu --vm macos-catalina.conf ``` @@ -338,7 +358,7 @@ supported. The default macOS configuration looks like this: -``` {.bash} +``` bash guest_os="macos" img="macos-catalina/RecoveryImage.img" disk_img="macos-catalina/disk.qcow2" @@ -389,8 +409,7 @@ There are some considerations when running macOS via Quickemu. webdavd](https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24). - Copy/paste via SPICE agent is **not available on macOS**. -Windows 8.1, 10 & 11 Guests ---------------------------- +## Windows 8.1, 10 & 11 Guests `quickget` can automatically download Windows 8.1, [Windows 10](https://www.microsoft.com/en-gb/software-download/windows10ISO) and @@ -400,7 +419,7 @@ with the [VirtIO drivers for Windows](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/) and creates a virtual machine configuration. -``` {.bash} +``` bash quickget windows 11 quickemu --vm windows-11.conf ``` @@ -414,18 +433,19 @@ By default `quickget` will download the *"English International"* release, but you can optionally specify one of the supported languages: For example: -``` {.bash} +``` bash quickget windows 11 "Chinese (Traditional)" ``` The default Windows 11 configuration looks like this: -``` {.bash} +``` bash guest_os="windows" disk_img="windows-11/disk.qcow2" iso="windows-11/Win11_EnglishInternational_x64.iso" fixed_iso="windows-11/virtio-win.iso" tpm="on" +secureboot="on" ``` - `guest_os="windows"` instructs `quickemu` to optimise for Windows. @@ -433,47 +453,58 @@ tpm="on" - `tpm="on"` instructs `quickemu` to create a software emulated TPM device using `swtpm`. -All the options -=============== +# All the options Here are the usage instructions: -``` {.bash} -Usage - quickemu --vm ubuntu.conf -You can also pass optional parameters - --braille : Enable braille support. Requires SDL. - --delete-disk : Delete the disk image and EFI variables - --delete-vm : Delete the entire VM and it's configuration - --display : Select display backend. 'sdl' (default), 'gtk', 'none', or 'spice' - --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit) - --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers - --screen : Use specified screen to determine the window size. - --shortcut : Create a desktop shortcut - --snapshot apply : Apply/restore a snapshot. - --snapshot create : Create a snapshot. - --snapshot delete : Delete a snapshot. - --snapshot info : Show disk/snapshot info. - --status-quo : Do not commit any changes to disk/snapshot. - --version : Print version + Usage + quickemu --vm ubuntu.conf -``` + You can also pass optional parameters + --braille : Enable braille support. Requires SDL. + --delete-disk : Delete the disk image and EFI variables + --delete-vm : Delete the entire VM and it's configuration + --display : Select display backend. 'sdl' (default), 'gtk', 'none', or 'spice' + --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit) + --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers + --screen : Use specified screen to determine the window size. + --shortcut : Create a desktop shortcut + --snapshot apply : Apply/restore a snapshot. + --snapshot create : Create a snapshot. + --snapshot delete : Delete a snapshot. + --snapshot info : Show disk/snapshot info. + --status-quo : Do not commit any changes to disk/snapshot. + --viewer : Choose an alternative viewer. @Options: 'spicy' (default), 'remote-viewer', 'none' + --ssh-port : Set ssh-port manually + --spice-port : Set spice-port manually + --public-dir : expose share directory. @Options: '' (default: xdg-user-dir PUBLICSHARE), '', 'none' + --monitor : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none' + --monitor-telnet-host : Set telnet host for monitor. (default: 'localhost') + --monitor-telnet-port : Set telnet port for monitor. (default: '4440') + --monitor-cmd : Send command to monitor if available. (Example: system_powerdown) + --serial : Set serial connection type. @Options: 'socket' (default), 'telnet', 'none' + --serial-telnet-host : Set telnet host for serial. (default: 'localhost') + --serial-telnet-port : Set telnet port for serial. (default: '6660') + --keyboard : Set keyboard. @Options: 'usb' (default), 'ps2', 'virtio' + --keyboard_layout : Set keyboard layout. + --mouse : Set mouse. @Options: 'tablet' (default), 'ps2', 'usb', 'virtio' + --usb-controller : Set usb-controller. @Options: 'ehci' (default), 'xhci', 'none' + --extra_args : Pass additional arguments to qemu + --version : Print version -Desktop shortcuts ------------------ +## Desktop shortcuts Desktop shortcuts can be created for a VM, the shortcuts are saved in `~/.local/share/applications`. Here is an example of how to create a shortcut. -``` {.bash} -quickemu --vm ubuntu-20.04-desktop.conf --shortcut +``` bash +quickemu --vm ubuntu-22.04-desktop.conf --shortcut ``` -Screen and window size (Linux guests only) ------------------------------------------- +## Screen and window size (Linux guests only) `qemu` will always default to the primary monitor to display the VM's window. @@ -494,13 +525,13 @@ must match the resolution of the screen. To know which screen to use, type: -``` {.bash} +``` bash xrandr --listmonitors | grep -v Monitors ``` The command will output something like this: -``` {.bash} +``` bash 0: +*HDMI-0 2560/597x1440/336+1920+0 HDMI-0 1: +DVI-D-0 1920/527x1080/296+0+0 DVI-D-0 ``` @@ -509,7 +540,7 @@ The first number is what needs to be passed to the `--screen` option. For example: -``` {.bash} +``` bash quickemu --vm vm.conf --screen 0 ``` @@ -518,8 +549,7 @@ which Quickemu sizes to 2048x1152. Without the `--screen` option, Quickemu would have used the 1920x1080 monitor which results in a window size of 1664x936. -References -========== +# References Useful reference that assisted the development of Quickemu. @@ -556,20 +586,17 @@ Useful reference that assisted the development of Quickemu. - - -AUTHORS -======= +# AUTHORS Written by Martin Wimpress. -BUGS -==== +# BUGS Submit bug reports online at: -SEE ALSO -======== +# SEE ALSO Full sources at: -quickemu\_conf(1), quickget(1), quickgui(1) +quickemu_conf(1), quickget(1), quickgui(1) diff --git a/docs/quickemu_conf.1 b/docs/quickemu_conf.1 index 5f3472f..5fa43b7 100644 --- a/docs/quickemu_conf.1 +++ b/docs/quickemu_conf.1 @@ -1,6 +1,20 @@ -.\" Automatically generated by Pandoc 2.9.2.1 +.\" Automatically generated by Pandoc 2.18 .\" -.TH "QUICKEMU_CONF" "1" "February 20, 2022" "quickemu_conf" "Quickemu Configuration Manual" +.\" Define V font for inline verbatim, using C font in formats +.\" that render this, and otherwise B font. +.ie "\f[CB]x\f[]"x" \{\ +. ftr V B +. ftr VI BI +. ftr VB B +. ftr VBI BI +.\} +.el \{\ +. ftr V CR +. ftr VI CI +. ftr VB CB +. ftr VBI CBI +.\} +.TH "QUICKEMU_CONF" "1" "July 30, 2022" "quickemu_conf" "Quickemu Configuration Manual" .hy .SH NAME .PP @@ -60,10 +74,10 @@ macos_release=\[dq]catalina\[dq] \f[R] .fi .IP \[bu] 2 -\f[C]guest_os=\[dq]macos\[dq]\f[R] instructs Quickemu to optimise for +\f[V]guest_os=\[dq]macos\[dq]\f[R] instructs Quickemu to optimise for macOS. .IP \[bu] 2 -\f[C]macos_release=\[dq]catalina\[dq]\f[R] instructs Quickemu to +\f[V]macos_release=\[dq]catalina\[dq]\f[R] instructs Quickemu to optimise for a particular macOS release. .RS 2 .IP \[bu] 2 @@ -86,21 +100,21 @@ tpm=\[dq]on\[dq] \f[R] .fi .IP \[bu] 2 -\f[C]guest_os=\[dq]windows\[dq]\f[R] instructs \f[C]quickemu\f[R] to +\f[V]guest_os=\[dq]windows\[dq]\f[R] instructs \f[V]quickemu\f[R] to optimise for Windows. .IP \[bu] 2 -\f[C]fixed_iso=\f[R] specifies the ISO image that provides VirtIO +\f[V]fixed_iso=\f[R] specifies the ISO image that provides VirtIO drivers. .IP \[bu] 2 -\f[C]tpm=\[dq]on\[dq]\f[R] instructs \f[C]quickemu\f[R] to create a -software emulated TPM device using \f[C]swtpm\f[R]. +\f[V]tpm=\[dq]on\[dq]\f[R] instructs \f[V]quickemu\f[R] to create a +software emulated TPM device using \f[V]swtpm\f[R]. .SH BIOS and EFI .PP -Since Quickemu 2.1.0 \f[C]efi\f[R] is the default boot option. +Since Quickemu 2.1.0 \f[V]efi\f[R] is the default boot option. If you want to override this behaviour then add the following line to you VM configuration to enable legacy BIOS. .IP \[bu] 2 -\f[C]boot=\[dq]legacy\[dq]\f[R] - Enable Legacy BIOS boot +\f[V]boot=\[dq]legacy\[dq]\f[R] - Enable Legacy BIOS boot .SH Tuning CPU cores, RAM & disks .PP By default, Quickemu will calculate the number of CPUs cores and RAM to @@ -110,18 +124,18 @@ your liking. .PP Add additional lines to your virtual machine configuration: .IP \[bu] 2 -\f[C]cpu_cores=\[dq]4\[dq]\f[R] - Specify the number of CPU cores +\f[V]cpu_cores=\[dq]4\[dq]\f[R] - Specify the number of CPU cores allocated to the VM .IP \[bu] 2 -\f[C]ram=\[dq]4G\[dq]\f[R] - Specify the amount of RAM to allocate to +\f[V]ram=\[dq]4G\[dq]\f[R] - Specify the amount of RAM to allocate to the VM .IP \[bu] 2 -\f[C]disk_size=\[dq]16G\[dq]\f[R] - Specify the size of the virtual disk +\f[V]disk_size=\[dq]16G\[dq]\f[R] - Specify the size of the virtual disk allocated to the VM .SS Disk preallocation .PP -Preallocation mode (allowed values: \f[C]off\f[R] (default), -\f[C]metadata\f[R], \f[C]falloc\f[R], \f[C]full\f[R]). +Preallocation mode (allowed values: \f[V]off\f[R] (default), +\f[V]metadata\f[R], \f[V]falloc\f[R], \f[V]full\f[R]). An image with preallocated metadata is initially larger but can improve performance when the image needs to grow. .PP @@ -129,27 +143,27 @@ Specify what disk preallocation should be used, if any, when creating the system disk image by adding a line like this to your VM configuration. .IP \[bu] 2 -\f[C]preallocation=\[dq]metadata\[dq]\f[R] +\f[V]preallocation=\[dq]metadata\[dq]\f[R] .SS CD-ROM disks .PP If you want to expose an ISO image from the host to guest add the following line to the VM configuration: .IP \[bu] 2 -\f[C]fixed_iso=\[dq]/path/to/image.iso\[dq]\f[R] +\f[V]fixed_iso=\[dq]/path/to/image.iso\[dq]\f[R] .SS Floppy disks .PP If you\[cq]re like Alan Pope (https://popey.com) you\[cq]ll probably want to mount a floppy disk image in the guest. To do so add the following line to the VM configuration: .IP \[bu] 2 -\f[C]floppy=\[dq]/path/to/floppy.img\[dq]\f[R] +\f[V]floppy=\[dq]/path/to/floppy.img\[dq]\f[R] .SH File Sharing .PP -All File Sharing options will only expose \f[C]\[ti]/Public\f[R] (or +All File Sharing options will only expose \f[V]\[ti]/Public\f[R] (or localised variations) for the current user to the guest VMs. .SS Samba \[u1F427] \[u1F34F] \[u1FA9F] .PP -If \f[C]smbd\f[R] is available on the host, Quickemu will automatically +If \f[V]smbd\f[R] is available on the host, Quickemu will automatically enable the built-in QEMU support for exposing a Samba share from the host to the guest. .PP @@ -160,6 +174,21 @@ You can install the minimal Samba components on Ubuntu using: sudo apt install --no-install-recommends samba \f[R] .fi +.PP +If everything is set up correctly, the \f[V]smbd\f[R] address will be +printed when the virtual machine is started. +For example: +.IP +.nf +\f[C] + - smbd: On guest: smb://10.0.2.4/qemu +\f[R] +.fi +.PP +If using a Windows guest, right-click on \[lq]This PC\[rq], click +\[lq]Add a network location\[rq], and paste this address, removing +\f[V]smb:\f[R] and replacing forward slashes with backslashes (in this +example \f[V]\[rs]\[rs]10.0.2.4\[rs]qemu\f[R]). .SS SPICE WebDAV \[u1F427] \[u1FA9F] .IP \[bu] 2 TBD @@ -171,7 +200,7 @@ TBD Add an additional line to your virtual machine configuration. For example: .IP \[bu] 2 -\f[C]port_forwards=(\[dq]8123:8123\[dq] \[dq]8888:80\[dq])\f[R] +\f[V]port_forwards=(\[dq]8123:8123\[dq] \[dq]8888:80\[dq])\f[R] .PP In the example above: .IP \[bu] 2 @@ -183,7 +212,7 @@ Port 8888 on the host is forwarded to port 80 on the guest. Connect your virtual machine to a preconfigured network bridge. Add an additional line to your virtual machine configuration .IP \[bu] 2 -\f[C]bridge=\[dq]br0\[dq]\f[R] +\f[V]bridge=\[dq]br0\[dq]\f[R] .SH USB redirection .PP Quickemu supports USB redirection via SPICE pass-through and host @@ -191,9 +220,9 @@ pass-through. .SS SPICE redirection (recommended) .PP Using SPICE for USB pass-through is easiest as it doesn\[cq]t require -any elevated permission, start Quickemu with \f[C]--display spice\f[R] -and then select \f[C]Input\f[R] -> -\f[C]Select USB Device for redirection\f[R] from the menu to choose +any elevated permission, start Quickemu with \f[V]--display spice\f[R] +and then select \f[V]Input\f[R] -> +\f[V]Select USB Device for redirection\f[R] from the menu to choose which device(s) you want to attach to the guest. .SS Host redirection \f[B]NOT Recommended\f[R] .PP @@ -204,7 +233,7 @@ Using SPICE is preferred, see above. Add an additional line to your virtual machine configuration. For example: .IP \[bu] 2 -\f[C]usb_devices=(\[dq]046d:082d\[dq] \[dq]046d:085e\[dq])\f[R] +\f[V]usb_devices=(\[dq]046d:082d\[dq] \[dq]046d:085e\[dq])\f[R] .PP In the example above: .IP \[bu] 2 @@ -214,7 +243,7 @@ to the guest. The USB device with vendor_id 046d and product_id 085e will be exposed to the guest. .PP -If the USB devices are not writable, \f[C]quickemu\f[R] will display the +If the USB devices are not writable, \f[V]quickemu\f[R] will display the appropriate commands to modify the USB device(s) access permissions, like this: .IP @@ -230,8 +259,8 @@ like this: .PP Since Quickemu 2.2.0 a software emulated TPM device can be added to guest virtual machines. -Just add \f[C]tpm=\[dq]on\[dq]\f[R] to your VM configuration. -\f[C]quickget\f[R] will automatically add this line to Windows 11 +Just add \f[V]tpm=\[dq]on\[dq]\f[R] to your VM configuration. +\f[V]quickget\f[R] will automatically add this line to Windows 11 virtual machines. .SH AUTHORS .PP diff --git a/docs/quickemu_conf.1.md b/docs/quickemu_conf.1.md index a978739..8ff9ba7 100644 --- a/docs/quickemu_conf.1.md +++ b/docs/quickemu_conf.1.md @@ -1,19 +1,17 @@ --- author: Martin Wimpress -date: 'February 20, 2022' -footer: quickemu\_conf +date: July 30, 2022 +footer: quickemu_conf header: Quickemu Configuration Manual section: 1 -title: QUICKEMU\_CONF +title: QUICKEMU_CONF --- -NAME -==== +# NAME -quickemu\_conf - Options and parameters in the quickemu \.conf +quickemu_conf - Options and parameters in the quickemu \.conf -DESCRIPTION -=========== +# DESCRIPTION **quickemu** will create and run highly optimised desktop virtual machines for Linux, macOS and Windows. It uses sensible defaults, but @@ -21,12 +19,11 @@ many configuration options can be overridden in the required configuration file, which will as a minimum specify the path to the installation ISO and QEMU disk for the installed VM -OPTIONS -======= +# OPTIONS These are the options and defaults for the \.conf file -``` {.bash} +``` bash # Lowercase variables are used in the VM config file only boot="efi" bridge="" @@ -47,10 +44,9 @@ tpm="off" usb_devices=() ``` -EXAMPLES -======== +# EXAMPLES -``` {.bash} +``` bash guest_os="linux" disk_img="debian-bullseye/disk.qcow2" iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso" @@ -58,7 +54,7 @@ iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso" The default macOS configuration looks like this: -``` {.bash} +``` bash guest_os="macos" img="macos-catalina/RecoveryImage.img" disk_img="macos-catalina/disk.qcow2" @@ -75,7 +71,7 @@ macos_release="catalina" The default Windows 11 configuration looks like this: -``` {.bash} +``` bash guest_os="windows" disk_img="windows-11/disk.qcow2" iso="windows-11/Win11_EnglishInternational_x64.iso" @@ -88,8 +84,7 @@ tpm="on" - `tpm="on"` instructs `quickemu` to create a software emulated TPM device using `swtpm`. -BIOS and EFI -============ +# BIOS and EFI Since Quickemu 2.1.0 `efi` is the default boot option. If you want to override this behaviour then add the following line to you VM @@ -97,8 +92,7 @@ configuration to enable legacy BIOS. - `boot="legacy"` - Enable Legacy BIOS boot -Tuning CPU cores, RAM & disks -============================= +# Tuning CPU cores, RAM & disks By default, Quickemu will calculate the number of CPUs cores and RAM to allocate to a VM based on the specifications of your host computer. You @@ -113,8 +107,7 @@ Add additional lines to your virtual machine configuration: - `disk_size="16G"` - Specify the size of the virtual disk allocated to the VM -Disk preallocation ------------------- +## Disk preallocation Preallocation mode (allowed values: `off` (default), `metadata`, `falloc`, `full`). An image with preallocated metadata is initially @@ -126,16 +119,14 @@ configuration. - `preallocation="metadata"` -CD-ROM disks ------------- +## CD-ROM disks If you want to expose an ISO image from the host to guest add the following line to the VM configuration: - `fixed_iso="/path/to/image.iso"` -Floppy disks ------------- +## Floppy disks If you're like [Alan Pope](https://popey.com) you'll probably want to mount a floppy disk image in the guest. To do so add the following line @@ -143,14 +134,12 @@ to the VM configuration: - `floppy="/path/to/floppy.img"` -File Sharing -============ +# File Sharing All File Sharing options will only expose `~/Public` (or localised variations) for the current user to the guest VMs. -Samba 🐧 🍏 🪟 ------------ +## Samba 🐧 🍏 🪟 If `smbd` is available on the host, Quickemu will automatically enable the built-in QEMU support for exposing a Samba share from the host to @@ -158,22 +147,28 @@ the guest. You can install the minimal Samba components on Ubuntu using: -``` {.bash} +``` bash sudo apt install --no-install-recommends samba ``` -SPICE WebDAV 🐧 🪟 ----------------- +If everything is set up correctly, the `smbd` address will be printed +when the virtual machine is started. For example: + + - smbd: On guest: smb://10.0.2.4/qemu + +If using a Windows guest, right-click on "This PC", click "Add a network +location", and paste this address, removing `smb:` and replacing forward +slashes with backslashes (in this example `\\10.0.2.4\qemu`). + +## SPICE WebDAV 🐧 🪟 - TBD -VirtIO-9P 🐧 🍏 -------------- +## VirtIO-9P 🐧 🍏 - TBD -Network port forwarding -======================= +# Network port forwarding Add an additional line to your virtual machine configuration. For example: @@ -185,30 +180,26 @@ In the example above: - Port 8123 on the host is forwarded to port 8123 on the guest. - Port 8888 on the host is forwarded to port 80 on the guest. -Bridged networking -================== +# Bridged networking Connect your virtual machine to a preconfigured network bridge. Add an additional line to your virtual machine configuration - `bridge="br0"` -USB redirection -=============== +# USB redirection Quickemu supports USB redirection via SPICE pass-through and host pass-through. -SPICE redirection (recommended) -------------------------------- +## SPICE redirection (recommended) Using SPICE for USB pass-through is easiest as it doesn't require any elevated permission, start Quickemu with `--display spice` and then select `Input` -\> `Select USB Device for redirection` from the menu to choose which device(s) you want to attach to the guest. -Host redirection **NOT Recommended** ------------------------------------- +## Host redirection **NOT Recommended** **USB host redirection is not recommended**, it is provided purely for backwards compatibility to older versions of Quickemu. Using SPICE is @@ -221,9 +212,9 @@ example: In the example above: -- The USB device with vendor\_id 046d and product\_id 082d will be +- The USB device with vendor_id 046d and product_id 082d will be exposed to the guest. -- The USB device with vendor\_id 046d and product\_id 085e will be +- The USB device with vendor_id 046d and product_id 085e will be exposed to the guest. If the USB devices are not writable, `quickemu` will display the @@ -235,27 +226,23 @@ like this: sudo chown -v root:user /dev/bus/usb/001/005 ERROR! USB permission changes are required 👆 -TPM -=== +# TPM Since Quickemu 2.2.0 a software emulated TPM device can be added to guest virtual machines. Just add `tpm="on"` to your VM configuration. `quickget` will automatically add this line to Windows 11 virtual machines. -AUTHORS -======= +# AUTHORS Written by Martin Wimpress. -BUGS -==== +# BUGS Submit bug reports online at: -SEE ALSO -======== +# SEE ALSO Full sources at: diff --git a/docs/quickget.1 b/docs/quickget.1 index 2ee7927..3bcc359 100644 --- a/docs/quickget.1 +++ b/docs/quickget.1 @@ -1,6 +1,20 @@ -.\" Automatically generated by Pandoc 2.9.2.1 +.\" Automatically generated by Pandoc 2.18 .\" -.TH "QUICKGET" "1" "February 20, 2022" "quickget" "Quickget User Manual" +.\" Define V font for inline verbatim, using C font in formats +.\" that render this, and otherwise B font. +.ie "\f[CB]x\f[]"x" \{\ +. ftr V B +. ftr VI BI +. ftr VB B +. ftr VBI BI +.\} +.el \{\ +. ftr V CR +. ftr VI CI +. ftr VB CB +. ftr VBI CBI +.\} +.TH "QUICKGET" "1" "July 30, 2022" "quickget" "Quickget User Manual" .hy .SH NAME .PP @@ -12,7 +26,7 @@ quickget - download and prepare materials for building a quickemu VM .SH DESCRIPTION .PP \f[B]quickget\f[R] will download the requisite materials and prepare a -configuration for \f[C]quickemu\f[R] to use to build and run +configuration for \f[V]quickemu\f[R] to use to build and run .SH OPTIONS .TP \f[B]version | -version | \[en]version\f[R] @@ -29,13 +43,13 @@ Editions may not apply and will be defaulted if not provided. .SH NOTES .SS Ubuntu Guest .PP -\f[C]quickget\f[R] will automatically download an Ubuntu release and +\f[V]quickget\f[R] will automatically download an Ubuntu release and create the virtual machine configuration. .IP .nf \f[C] -quickget ubuntu 20.04 -quickemu --vm ubuntu-20.04.conf +quickget ubuntu 22.04 +quickemu --vm ubuntu-22.04.conf \f[R] .fi .IP \[bu] 2 @@ -44,24 +58,24 @@ Complete the installation as normal. Post-install: .RS 2 .IP \[bu] 2 -Install the SPICE agent (\f[C]spice-vdagent\f[R]) to enable copy/paste +Install the SPICE agent (\f[V]spice-vdagent\f[R]) to enable copy/paste and USB redirection .RS 2 .IP \[bu] 2 -\f[C]sudo apt install spice-vdagent\f[R] +\f[V]sudo apt install spice-vdagent\f[R] .RE .IP \[bu] 2 -Install the SPICE WebDAV agent (\f[C]spice-webdavd\f[R]) to enable file +Install the SPICE WebDAV agent (\f[V]spice-webdavd\f[R]) to enable file sharing. .RS 2 .IP \[bu] 2 -\f[C]sudo apt install spice-webdavd\f[R] +\f[V]sudo apt install spice-webdavd\f[R] .RE .RE .SS Ubuntu devel (daily-live) images .PP -\f[C]quickget\f[R] can also download/refresh devel images via -\f[C]zsync\f[R] for Ubuntu developers and testers. +\f[V]quickget\f[R] can also download/refresh devel images via +\f[V]zsync\f[R] for Ubuntu developers and testers. .IP .nf \f[C] @@ -70,106 +84,116 @@ quickemu --vm ubuntu-devel.conf \f[R] .fi .PP -You can run \f[C]quickget ubuntu devel\f[R] to refresh your daily +You can run \f[V]quickget ubuntu devel\f[R] to refresh your daily development image as often as you like, it will even automatically switch to a new series. .SS Ubuntu Flavours .PP All the official Ubuntu flavours are supported, just replace -\f[C]ubuntu\f[R] with your preferred flavour. +\f[V]ubuntu\f[R] with your preferred flavour. .IP \[bu] 2 -\f[C]kubuntu\f[R] (Kubuntu) +\f[V]kubuntu\f[R] (Kubuntu) .IP \[bu] 2 -\f[C]lubuntu\f[R] (Lubuntu) +\f[V]lubuntu\f[R] (Lubuntu) .IP \[bu] 2 -\f[C]ubuntu-budgie\f[R] (Ubuntu Budgie) +\f[V]ubuntu-budgie\f[R] (Ubuntu Budgie) .IP \[bu] 2 -\f[C]ubuntukylin\f[R] (Ubuntu Kylin) +\f[V]ubuntukylin\f[R] (Ubuntu Kylin) .IP \[bu] 2 -\f[C]ubuntu-mate\f[R] (Ubuntu MATE) +\f[V]ubuntu-mate\f[R] (Ubuntu MATE) .IP \[bu] 2 -\f[C]ubuntustudio\f[R] (Ubuntu Studio) +\f[V]ubuntustudio\f[R] (Ubuntu Studio) .IP \[bu] 2 -\f[C]ubuntu\f[R] (Ubuntu) +\f[V]ubuntu\f[R] (Ubuntu) .IP \[bu] 2 -\f[C]xubuntu\f[R] (Xubuntu) +\f[V]xubuntu\f[R] (Xubuntu) .SS Other Operating Systems .PP -\f[C]quickget\f[R] also supports: +\f[V]quickget\f[R] also supports: .IP \[bu] 2 -\f[C]alma\f[R] (Alma Linux) +\f[V]alma\f[R] (Alma Linux) .IP \[bu] 2 -\f[C]alpine\f[R] (Alpine Linux) +\f[V]alpine\f[R] (Alpine Linux) .IP \[bu] 2 -\f[C]android\f[R] (Android x86) +\f[V]android\f[R] (Android x86) .IP \[bu] 2 -\f[C]archlinux\f[R] (Arch Linux) +\f[V]archlinux\f[R] (Arch Linux) .IP \[bu] 2 -\f[C]arcolinux\f[R] (Arco Linux) +\f[V]arcolinux\f[R] (Arco Linux) .IP \[bu] 2 -\f[C]cachyos\f[R] (CachyOS) +\f[V]batocera\f[R] (Batocera) .IP \[bu] 2 -\f[C]debian\f[R] (Debian) +\f[V]cachyos\f[R] (CachyOS) .IP \[bu] 2 -\f[C]devuan\f[R] (Devuan) +\f[V]centos-stream\f[R] (CentOS Stream) .IP \[bu] 2 -\f[C]dragonflybsd\f[R] (DragonFlyBSD) +\f[V]debian\f[R] (Debian) .IP \[bu] 2 -\f[C]elementary\f[R] (elementary OS) +\f[V]deepin\f[R] (Deepin) .IP \[bu] 2 -\f[C]fedora\f[R] (Fedora) +\f[V]devuan\f[R] (Devuan) .IP \[bu] 2 -\f[C]freebsd\f[R] (FreeBSD) +\f[V]dragonflybsd\f[R] (DragonFlyBSD) .IP \[bu] 2 -\f[C]freedos\f[R] (FreeDOS) +\f[V]elementary\f[R] (elementary OS) .IP \[bu] 2 -\f[C]garuda\f[R] (Garuda Linux) +\f[V]endeavouros\f[R] (EndeavourOS) .IP \[bu] 2 -\f[C]gentoo\f[R] (Gentoo) +\f[V]fedora\f[R] (Fedora) .IP \[bu] 2 -\f[C]ghostbsd\f[R] (GhostBSD) +\f[V]freebsd\f[R] (FreeBSD) .IP \[bu] 2 -\f[C]haiku\f[R] (Haiku) +\f[V]freedos\f[R] (FreeDOS) .IP \[bu] 2 -\f[C]kali\f[R] (Kali) +\f[V]garuda\f[R] (Garuda Linux) .IP \[bu] 2 -\f[C]kdeneon\f[R] (KDE Neon) +\f[V]gentoo\f[R] (Gentoo) .IP \[bu] 2 -\f[C]kolibrios\f[R] (KolibriOS) +\f[V]ghostbsd\f[R] (GhostBSD) .IP \[bu] 2 -\f[C]linuxmint\f[R] (Linux Mint) +\f[V]haiku\f[R] (Haiku) .IP \[bu] 2 -\f[C]manjaro\f[R] (Manjaro) +\f[V]kali\f[R] (Kali) .IP \[bu] 2 -\f[C]mxlinux\f[R] (MX Linux) +\f[V]kdeneon\f[R] (KDE Neon) .IP \[bu] 2 -\f[C]netboot\f[R] (netboot.xyz) +\f[V]kolibrios\f[R] (KolibriOS) .IP \[bu] 2 -\f[C]netbsd\f[R] (NetBSD) +\f[V]linuxmint\f[R] (Linux Mint) .IP \[bu] 2 -\f[C]nixos\f[R] (NixOS) +\f[V]lmde\f[R] (Linux Mint Debian Edition) .IP \[bu] 2 -\f[C]openbsd\f[R] (OpenBSD) +\f[V]manjaro\f[R] (Manjaro) .IP \[bu] 2 -\f[C]opensuse\f[R] (openSUSE) +\f[V]mxlinux\f[R] (MX Linux) .IP \[bu] 2 -\f[C]oraclelinux\f[R] (Oracle Linux) +\f[V]netboot\f[R] (netboot.xyz) .IP \[bu] 2 -\f[C]popos\f[R] (Pop!_OS) +\f[V]netbsd\f[R] (NetBSD) .IP \[bu] 2 -\f[C]regolith\f[R] (Regolith Linux) +\f[V]nixos\f[R] (NixOS) .IP \[bu] 2 -\f[C]rockylinux\f[R] (Rocky Linux) +\f[V]openbsd\f[R] (OpenBSD) .IP \[bu] 2 -\f[C]slackware\f[R] (Slackware) +\f[V]opensuse\f[R] (openSUSE) .IP \[bu] 2 -\f[C]solus\f[R] (Solus) +\f[V]oraclelinux\f[R] (Oracle Linux) .IP \[bu] 2 -\f[C]tails\f[R] (Tails) +\f[V]popos\f[R] (Pop!_OS) .IP \[bu] 2 -\f[C]void\f[R] (Void Linux) +\f[V]regolith\f[R] (Regolith Linux) .IP \[bu] 2 -\f[C]zorin\f[R] (Zorin OS) +\f[V]rockylinux\f[R] (Rocky Linux) +.IP \[bu] 2 +\f[V]slackware\f[R] (Slackware) +.IP \[bu] 2 +\f[V]solus\f[R] (Solus) +.IP \[bu] 2 +\f[V]tails\f[R] (Tails) +.IP \[bu] 2 +\f[V]void\f[R] (Void Linux) +.IP \[bu] 2 +\f[V]zorin\f[R] (Zorin OS) .PP Or you can download a Linux image and manually create a VM configuration. @@ -177,7 +201,7 @@ configuration. Download a .iso image of a Linux distribution .IP \[bu] 2 Create a VM configuration file; for example -\f[C]debian-bullseye.conf\f[R] +\f[V]debian-bullseye.conf\f[R] .IP .nf \f[C] @@ -187,7 +211,7 @@ iso=\[dq]debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso\[dq] \f[R] .fi .IP \[bu] 2 -Use \f[C]quickemu\f[R] to start the virtual machine: +Use \f[V]quickemu\f[R] to start the virtual machine: .IP .nf \f[C] @@ -200,15 +224,15 @@ Complete the installation as normal. Post-install: .RS 2 .IP \[bu] 2 -Install the SPICE agent (\f[C]spice-vdagent\f[R]) to enable copy/paste +Install the SPICE agent (\f[V]spice-vdagent\f[R]) to enable copy/paste and USB redirection. .IP \[bu] 2 -Install the SPICE WebDAV agent (\f[C]spice-webdavd\f[R]) to enable file +Install the SPICE WebDAV agent (\f[V]spice-webdavd\f[R]) to enable file sharing. .RE .SS macOS Guest .PP -\f[C]quickget\f[R] automatically downloads a macOS recovery image and +\f[V]quickget\f[R] automatically downloads a macOS recovery image and creates a virtual machine configuration. .IP .nf @@ -218,8 +242,8 @@ quickemu --vm macos-catalina.conf \f[R] .fi .PP -macOS \f[C]high-sierra\f[R], \f[C]mojave\f[R], \f[C]catalina\f[R], -\f[C]big-sur\f[R] and \f[C]monterey\f[R] are supported. +macOS \f[V]high-sierra\f[R], \f[V]mojave\f[R], \f[V]catalina\f[R], +\f[V]big-sur\f[R] and \f[V]monterey\f[R] are supported. .IP \[bu] 2 Use cursor keys and enter key to select the \f[B]macOS Base System\f[R] .IP \[bu] 2 @@ -232,19 +256,19 @@ Click \f[B]Disk Utility\f[R] and \f[B]Continue\f[R] On macOS Catalina, Big Sur & Monterey .RS 2 .IP \[bu] 2 -Select \f[C]Apple Inc. VirtIO Block Media\f[R] from the list and click +Select \f[V]Apple Inc. VirtIO Block Media\f[R] from the list and click \f[B]Erase\f[R]. .RE .IP \[bu] 2 On macOS Mojave and High Sierra .RS 2 .IP \[bu] 2 -Select \f[C]QEMU HARDDISK Media\f[R] (\[ti]103.08GB) from the list and +Select \f[V]QEMU HARDDISK Media\f[R] (\[ti]103.08GB) from the list and click \f[B]Erase\f[R]. .RE .RE .IP \[bu] 2 -Enter a \f[C]Name:\f[R] for the disk and click \f[B]Erase\f[R]. +Enter a \f[V]Name:\f[R] for the disk and click \f[B]Erase\f[R]. .IP \[bu] 2 Click \f[B]Done\f[R]. .IP \[bu] 2 @@ -278,10 +302,10 @@ macos_release=\[dq]catalina\[dq] \f[R] .fi .IP \[bu] 2 -\f[C]guest_os=\[dq]macos\[dq]\f[R] instructs Quickemu to optimise for +\f[V]guest_os=\[dq]macos\[dq]\f[R] instructs Quickemu to optimise for macOS. .IP \[bu] 2 -\f[C]macos_release=\[dq]catalina\[dq]\f[R] instructs Quickemu to +\f[V]macos_release=\[dq]catalina\[dq]\f[R] instructs Quickemu to optimise for a particular macOS release. .RS 2 .IP \[bu] 2 @@ -309,7 +333,7 @@ Big Sur Monterey .RE .IP \[bu] 2 -\f[C]quickemu\f[R] will automatically download the required +\f[V]quickemu\f[R] will automatically download the required OpenCore (https://github.com/acidanthera/OpenCorePkg) bootloader and OVMF firmware from OSX-KVM (https://github.com/kholia/OSX-KVM). .IP \[bu] 2 @@ -322,11 +346,11 @@ VirtIO Block Media (https://www.kraxel.org/blog/2019/06/macos-qemu-guest/) is used for the system disk where supported. .IP \[bu] 2 -VirtIO \f[C]usb-tablet\f[R] (http://philjordan.eu/osx-virt/) is used for +VirtIO \f[V]usb-tablet\f[R] (http://philjordan.eu/osx-virt/) is used for the mouse. .IP \[bu] 2 -VirtIO Network (\f[C]virtio-net\f[R]) is supported and enabled on macOS -Big Sur and newer but previous releases use \f[C]vmxnet3\f[R]. +VirtIO Network (\f[V]virtio-net\f[R]) is supported and enabled on macOS +Big Sur and newer but previous releases use \f[V]vmxnet3\f[R]. .IP \[bu] 2 VirtIO Memory Ballooning is supported and enabled on macOS Big Sur and newer but disabled for other support macOS releases. @@ -355,7 +379,7 @@ webdavd (https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24). Copy/paste via SPICE agent is \f[B]not available on macOS\f[R]. .SS Windows 8.1, 10 & 11 Guests .PP -\f[C]quickget\f[R] can automatically download Windows 8.1, Windows +\f[V]quickget\f[R] can automatically download Windows 8.1, Windows 10 (https://www.microsoft.com/en-gb/software-download/windows10ISO) and Windows 11 (https://www.microsoft.com/en-gb/software-download/windows11) along with the VirtIO drivers for @@ -374,7 +398,7 @@ Complete the installation as you normally would. All relevant drivers and services should be installed automatically. .SS Regional versions .PP -By default \f[C]quickget\f[R] will download the \f[I]\[lq]English +By default \f[V]quickget\f[R] will download the \f[I]\[lq]English International\[rq]\f[R] release, but you can optionally specify one of the supported languages: For example: .IP @@ -393,17 +417,18 @@ disk_img=\[dq]windows-11/disk.qcow2\[dq] iso=\[dq]windows-11/Win11_EnglishInternational_x64.iso\[dq] fixed_iso=\[dq]windows-11/virtio-win.iso\[dq] tpm=\[dq]on\[dq] +secureboot=\[dq]on\[dq] \f[R] .fi .IP \[bu] 2 -\f[C]guest_os=\[dq]windows\[dq]\f[R] instructs \f[C]quickemu\f[R] to +\f[V]guest_os=\[dq]windows\[dq]\f[R] instructs \f[V]quickemu\f[R] to optimise for Windows. .IP \[bu] 2 -\f[C]fixed_iso=\f[R] specifies the ISO image that provides VirtIO +\f[V]fixed_iso=\f[R] specifies the ISO image that provides VirtIO drivers. .IP \[bu] 2 -\f[C]tpm=\[dq]on\[dq]\f[R] instructs \f[C]quickemu\f[R] to create a -software emulated TPM device using \f[C]swtpm\f[R]. +\f[V]tpm=\[dq]on\[dq]\f[R] instructs \f[V]quickemu\f[R] to create a +software emulated TPM device using \f[V]swtpm\f[R]. .SH AUTHORS .PP Written by Martin Wimpress. diff --git a/docs/quickget.1.md b/docs/quickget.1.md index fa7939b..e34b73a 100644 --- a/docs/quickget.1.md +++ b/docs/quickget.1.md @@ -1,35 +1,31 @@ --- author: Martin Wimpress -date: 'February 20, 2022' +date: July 30, 2022 footer: quickget header: Quickget User Manual section: 1 title: QUICKGET --- -NAME -==== +# NAME quickget - download and prepare materials for building a quickemu VM -SYNOPSIS -======== +# SYNOPSIS **quickget** \[*os*\] \[*release*\] \[*edition*\] \| \[*OPTION*\]\* -DESCRIPTION -=========== +# DESCRIPTION **quickget** will download the requisite materials and prepare a configuration for `quickemu` to use to build and run -OPTIONS -======= +# OPTIONS **version \| -version \| --version** : show version (from Quickemu) -**list \| list\_csv \| list\_json** +**list \| list_csv \| list_json** : provide a csv list of all supported guest OSes, versions and variants. @@ -39,18 +35,16 @@ OPTIONS script will exit. Editions may not apply and will be defaulted if not provided. -NOTES -===== +# NOTES -Ubuntu Guest ------------- +## Ubuntu Guest `quickget` will automatically download an Ubuntu release and create the virtual machine configuration. -``` {.bash} -quickget ubuntu 20.04 -quickemu --vm ubuntu-20.04.conf +``` bash +quickget ubuntu 22.04 +quickemu --vm ubuntu-22.04.conf ``` - Complete the installation as normal. @@ -67,7 +61,7 @@ quickemu --vm ubuntu-20.04.conf `quickget` can also download/refresh devel images via `zsync` for Ubuntu developers and testers. -``` {.bash} +``` bash quickget ubuntu devel quickemu --vm ubuntu-devel.conf ``` @@ -90,8 +84,7 @@ with your preferred flavour. - `ubuntu` (Ubuntu) - `xubuntu` (Xubuntu) -Other Operating Systems ------------------------ +## Other Operating Systems `quickget` also supports: @@ -100,11 +93,15 @@ Other Operating Systems - `android` (Android x86) - `archlinux` (Arch Linux) - `arcolinux` (Arco Linux) +- `batocera` (Batocera) - `cachyos` (CachyOS) +- `centos-stream` (CentOS Stream) - `debian` (Debian) +- `deepin` (Deepin) - `devuan` (Devuan) - `dragonflybsd` (DragonFlyBSD) - `elementary` (elementary OS) +- `endeavouros` (EndeavourOS) - `fedora` (Fedora) - `freebsd` (FreeBSD) - `freedos` (FreeDOS) @@ -116,6 +113,7 @@ Other Operating Systems - `kdeneon` (KDE Neon) - `kolibrios` (KolibriOS) - `linuxmint` (Linux Mint) +- `lmde` (Linux Mint Debian Edition) - `manjaro` (Manjaro) - `mxlinux` (MX Linux) - `netboot` (netboot.xyz) @@ -139,7 +137,7 @@ configuration. - Download a .iso image of a Linux distribution - Create a VM configuration file; for example `debian-bullseye.conf` -``` {.bash} +``` bash guest_os="linux" disk_img="debian-bullseye/disk.qcow2" iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso" @@ -147,7 +145,7 @@ iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso" - Use `quickemu` to start the virtual machine: -``` {.bash} +``` bash quickemu --vm debian-bullseye.conf ``` @@ -158,13 +156,12 @@ quickemu --vm debian-bullseye.conf - Install the SPICE WebDAV agent (`spice-webdavd`) to enable file sharing. -macOS Guest ------------ +## macOS Guest `quickget` automatically downloads a macOS recovery image and creates a virtual machine configuration. -``` {.bash} +``` bash quickget macos catalina quickemu --vm macos-catalina.conf ``` @@ -194,7 +191,7 @@ supported. The default macOS configuration looks like this: -``` {.bash} +``` bash guest_os="macos" img="macos-catalina/RecoveryImage.img" disk_img="macos-catalina/disk.qcow2" @@ -245,8 +242,7 @@ There are some considerations when running macOS via Quickemu. webdavd](https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24). - Copy/paste via SPICE agent is **not available on macOS**. -Windows 8.1, 10 & 11 Guests ---------------------------- +## Windows 8.1, 10 & 11 Guests `quickget` can automatically download Windows 8.1, [Windows 10](https://www.microsoft.com/en-gb/software-download/windows10ISO) and @@ -256,7 +252,7 @@ with the [VirtIO drivers for Windows](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/) and creates a virtual machine configuration. -``` {.bash} +``` bash quickget windows 11 quickemu --vm windows-11.conf ``` @@ -270,18 +266,19 @@ By default `quickget` will download the *"English International"* release, but you can optionally specify one of the supported languages: For example: -``` {.bash} +``` bash quickget windows 11 "Chinese (Traditional)" ``` The default Windows 11 configuration looks like this: -``` {.bash} +``` bash guest_os="windows" disk_img="windows-11/disk.qcow2" iso="windows-11/Win11_EnglishInternational_x64.iso" fixed_iso="windows-11/virtio-win.iso" tpm="on" +secureboot="on" ``` - `guest_os="windows"` instructs `quickemu` to optimise for Windows. @@ -289,20 +286,17 @@ tpm="on" - `tpm="on"` instructs `quickemu` to create a software emulated TPM device using `swtpm`. -AUTHORS -======= +# AUTHORS Written by Martin Wimpress. -BUGS -==== +# BUGS Submit bug reports online at: -SEE ALSO -======== +# SEE ALSO Full sources at: -quickemu(1), quickemu\_conf(1), quickgui(1) +quickemu(1), quickemu_conf(1), quickgui(1) From b7e1fba11780a03ba03ec5f9d7a7f5a63a4d9a84 Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Mon, 1 Aug 2022 09:14:21 +0100 Subject: [PATCH 42/92] Correct batocera for release 34 (#512) * chore: docs submodule * check for current batocera release at runtime --- build-docs | 2 +- quickget | 21 ++++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/build-docs b/build-docs index 51ee39c..c881d8e 160000 --- a/build-docs +++ b/build-docs @@ -1 +1 @@ -Subproject commit 51ee39c41c13fb1cc78e86ec24b100f35c337d70 +Subproject commit c881d8e4862a5810a4793f34626181667fde8f89 diff --git a/quickget b/quickget index f6a3e48..267895a 100755 --- a/quickget +++ b/quickget @@ -291,7 +291,7 @@ function releases_fedora() { } function releases_batocera() { - echo 33 + echo 32 33 34 } function editions_fedora() { @@ -850,8 +850,23 @@ function get_arcolinux() { function get_batocera() { local HASH="" - local ISO="batocera-x86_64-${RELEASE}-20220203.img.gz" - local URL="https://updates.batocera.org/x86_64/stable/last" + local URL="https://mirrors.o2switch.fr/batocera/x86_64/stable/last" + local ISO="$(curl -sl ${URL}/ | grep -e 'batocera.*img.gz'|cut -d\" -f2)" + local CURRENT_RELEASE=$(echo "${ISO}"| cut -d\- -f3) + + + case ${RELEASE} in + ${CURRENT_RELEASE}) #Current release + URL+="" + ;; + *) + URL+="/archives/${RELEASE}" + ISO="$(curl -sl ${URL}/ | grep -e 'batocera.*img.gz'|cut -d\" -f2)" + ;; # non-current are here + + esac + + echo "${URL}/${ISO} ${HASH}" } From 45722ac1f8a8fd69228753a79c694d3e8301068a Mon Sep 17 00:00:00 2001 From: Phil Clifford Date: Mon, 1 Aug 2022 09:14:53 +0100 Subject: [PATCH 43/92] Oracle Linux 9.0 added (#513) * chore: docs submodule * Oracle Linux Release 9.0 added also removed some early obsoleted 8.x releases --- quickget | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/quickget b/quickget index 267895a..313644a 100755 --- a/quickget +++ b/quickget @@ -422,7 +422,7 @@ function releases_opensuse(){ } function releases_oraclelinux() { - echo 7.7 7.8 7.9 8.2 8.3 8.4 8.5 + echo 7.7 7.8 7.9 8.4 8.5 8.6 9.0 } function releases_popos() { @@ -1285,8 +1285,8 @@ function get_oraclelinux() { local URL="https://yum.oracle.com/ISOS/OracleLinux/OL${VER_MAJ}/u${VER_MIN}/x86_64/" case ${VER_MAJ} in - 8) ISO="OracleLinux-R${VER_MAJ}-U${VER_MIN}-x86_64-dvd.iso";; - *) ISO="OracleLinux-R${VER_MAJ}-U${VER_MIN}-Server-x86_64-dvd.iso";; + 7) ISO="OracleLinux-R${VER_MAJ}-U${VER_MIN}-Server-x86_64-dvd.iso";; + *) ISO="OracleLinux-R${VER_MAJ}-U${VER_MIN}-x86_64-dvd.iso";; esac HASH=$(wget -q -O- "https://linux.oracle.com/security/gpg/checksum/OracleLinux-R${VER_MAJ}-U${VER_MIN}-Server-x86_64.checksum" | grep "${ISO}" | cut -d' ' -f1) echo "${URL}/${ISO} ${HASH}" From f65b8e328b83c2affa2cc00e9daa9614ab533286 Mon Sep 17 00:00:00 2001 From: Vladislav Nepogodin Date: Mon, 1 Aug 2022 04:24:08 +0400 Subject: [PATCH 44/92] new release --- quickget | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/quickget b/quickget index 313644a..6c00bfb 100755 --- a/quickget +++ b/quickget @@ -245,7 +245,11 @@ function editions_arcolinux() { } function releases_cachyos() { - echo 2022.01.09 2022.02.11 + echo 220731 +} + +function editions_cachyos() { + echo kde gnome xfce } function releases_centos-stream() { @@ -872,8 +876,9 @@ function get_batocera() { function get_cachyos() { local HASH="" - local ISO="cachyos-${RELEASE}-x86_64.iso" - local URL="https://mirror.cachyos.org/ISO" + local ISO="cachyos-${EDITION}-linux-${RELEASE}.iso" + local URL="https://mirror.cachyos.org/ISO/${EDITION}/${RELEASE}" + HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | cut -d' ' -f1) echo "${URL}/${ISO} ${HASH}" } From e8b1b7cb3e43f71e605cee7f68f7f19990cee149 Mon Sep 17 00:00:00 2001 From: infokiller Date: Mon, 1 Aug 2022 11:22:12 +0300 Subject: [PATCH 45/92] Add support for spice-app (#510) * Add spice-app as display option * Rework how we set the default OUTPUT variable display is never set and display_param_check is already checked when parsing options * enable overriding the gl param 3d acceleration is not stable on some setups (looking at you, nvidia) Co-authored-by: Matej --- quickemu | 46 ++++++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/quickemu b/quickemu index 17f739e..56576a4 100755 --- a/quickemu +++ b/quickemu @@ -221,7 +221,6 @@ function vm_boot() { local HOST_CPU_SMT="" local HOST_CPU_SOCKETS="" local HOST_CPU_VENDOR="" - local GL="on" local GUEST_TWEAKS="" local KERNEL_NAME="Unknown" local KERNEL_NODE="" @@ -734,24 +733,32 @@ function vm_boot() { DISPLAY_RENDER="${OUTPUT},grab-on-hover=on,zoom-to-fit=off" # GL is not working with GTK and virtio-vga if [ "${DISPLAY_DEVICE}" == "virtio-vga" ]; then - GL="off" + gl="off" fi ;; none|spice) DISPLAY_RENDER="none";; + # spice-app has a bug where using spice-app,gl=off seems to enable gl, but + # if the gl param is omitted it works fine. + spice-app) + DISPLAY_RENDER="${OUTPUT}" + if [[ "${gl}" == "on" ]]; then + DISPLAY_RENDER+=",gl=on" + fi + ;; *) - DISPLAY_RENDER="${OUTPUT},gl=${GL}";; + DISPLAY_RENDER="${OUTPUT},gl=${gl}";; esac - if [ "${GL}" == "on" ] && [[ "${DISPLAY_DEVICE}" == *"virtio"* ]]; then + if [ "${gl}" == "on" ] && [[ "${DISPLAY_DEVICE}" == *"virtio"* ]]; then if [ "${QEMU_VER_SHORT}" -ge 61 ]; then DISPLAY_DEVICE="${DISPLAY_DEVICE}-gl" else DISPLAY_DEVICE="${DISPLAY_DEVICE},virgl=on" fi - echo ", GL (${GL}), VirGL (on)" + echo ", GL (${gl}), VirGL (on)" else - echo ", GL (${GL}), VirGL (off)" + echo ", GL (${gl}), VirGL (off)" fi # Build the video configuration @@ -1243,7 +1250,7 @@ function usage() { echo " --braille : Enable braille support. Requires SDL." echo " --delete-disk : Delete the disk image and EFI variables" echo " --delete-vm : Delete the entire VM and it's configuration" - echo " --display : Select display backend. 'sdl' (default), 'gtk', 'none', or 'spice'" + echo " --display : Select display backend. 'sdl' (default), 'gtk', 'none', 'spice' or 'spice-app'" echo " --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit)" echo " --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers" echo " --screen : Use specified screen to determine the window size." @@ -1274,8 +1281,7 @@ function usage() { } function display_param_check() { - # @ASK: accept "spice-app" as output ? - if [ "${OUTPUT}" != "gtk" ] && [ "${OUTPUT}" != "none" ] && [ "${OUTPUT}" != "sdl" ] && [ "${OUTPUT}" != "spice" ]; then + if [ "${OUTPUT}" != "gtk" ] && [ "${OUTPUT}" != "none" ] && [ "${OUTPUT}" != "sdl" ] && [ "${OUTPUT}" != "spice" ] && [ "${OUTPUT}" != "spice-app" ]; then echo "ERROR! Requested output '${OUTPUT}' is not recognised." exit 1 fi @@ -1612,16 +1618,14 @@ if [ -n "${VM}" ] && [ -e "${VM}" ]; then disk_size="${disk}" fi + # Set the default OUTPUT if not provided by user if [ -z "${OUTPUT}" ]; then - # Braille support requires SDL. Override OUTPUT if braille was requested. - if [ -n "${BRAILLE}" ]; then - OUTPUT="sdl" - elif [ -z "${display}" ]; then - OUTPUT="sdl" - else - OUTPUT="${display}" - display_param_check - fi + OUTPUT="sdl" + fi + + # Braille support requires SDL. Override OUTPUT if braille was requested. + if [ -n "${BRAILLE}" ]; then + OUTPUT="sdl" fi if [ -z "${VIEWER}" ]; then @@ -1629,6 +1633,12 @@ if [ -n "${VM}" ] && [ -e "${VM}" ]; then fi viewer_param_check + # Set the default 3d acceleration. Will be overridden to "off" if + # DISPLAY_DEVICE is determined to be virtio-vga since it doesn't work there. + if [ -z "${gl}" ]; then + gl="on" + fi + if [ -z "${PUBLIC}" ]; then PUBLIC="${public_dir}" fi From 7ce97daf27dd16444d0f3c29aa6f06b2c5562aaa Mon Sep 17 00:00:00 2001 From: MatejSpindler Date: Mon, 1 Aug 2022 10:23:19 +0200 Subject: [PATCH 46/92] Add multiscreen mode (#473) Enable multiscreen with max_outputs for the virtio-vga if user configures max_outputs in the .conf file --- quickemu | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/quickemu b/quickemu index 56576a4..debefd1 100755 --- a/quickemu +++ b/quickemu @@ -776,6 +776,11 @@ function vm_boot() { ati-vga|cirrus-vga|VGA) VIDEO="${VIDEO},vgamem_mb=64";; esac + # Configure multiscreen if max_outputs was provided in the .conf file + if [ -v max_outputs ]; then + VIDEO="${VIDEO},max_outputs=${max_outputs}" + fi + # Add fullscreen options VIDEO="${VIDEO} ${FULLSCREEN}" From 4e836b78fec2d750caf0137910b20bf28a96ca70 Mon Sep 17 00:00:00 2001 From: Martin Wimpress Date: Mon, 1 Aug 2022 10:16:51 +0100 Subject: [PATCH 47/92] Collapse component in unattended.xml --- quickget | 60 ++++++++------------------------------------------------ 1 file changed, 8 insertions(+), 52 deletions(-) diff --git a/quickget b/quickget index 6c00bfb..02348dd 100755 --- a/quickget +++ b/quickget @@ -1448,44 +1448,22 @@ function unattended_windows() { https://docs.microsoft.com/en-us/windows-hardware/customize/desktop/unattend/ --> - + * - + true - + true - + * Quickemu Project @@ -1497,25 +1475,13 @@ function unattended_windows() { Quickemu Project - + 0 - + false @@ -1625,11 +1591,7 @@ function unattended_windows() { - + + + false + * @@ -1457,6 +1460,9 @@ function unattended_windows() { true + + 1 + @@ -1474,6 +1480,7 @@ function unattended_windows() { https://github.com/quickemu-project/quickemu/issues Quickemu Project + W269N-WFGWX-YVC9B-4J6C9-T83GX 0 @@ -1584,8 +1591,11 @@ function unattended_windows() { true + Quickemu + Quickemu Project + - VK7JG-NPHTM-C97JM-9MPGT-3V66T + W269N-WFGWX-YVC9B-4J6C9-T83GX Never @@ -1640,19 +1650,45 @@ function unattended_windows() { + + + quickemu + true</PlainText> + </Password> + <Enabled>true</Enabled> + <Username>Quickemu</Username> + </AutoLogon> + <DisableAutoDaylightTimeSet>false</DisableAutoDaylightTimeSet> <OOBE> <HideEULAPage>true</HideEULAPage> - <HideLocalAccountScreen>false</HideLocalAccountScreen> + <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> - <HideOnlineAccountScreens>false</HideOnlineAccountScreens> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> - <SkipUserOOBE>false</SkipUserOOBE> - <SkipMachineOOBE>false</SkipMachineOOBE> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> <VMModeOptimizations> <SkipWinREInitialization>true</SkipWinREInitialization> </VMModeOptimizations> </OOBE> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Password> + <Value>quickemu</Value> + <PlainText>true</PlainText> + </Password> + <Description>Quickemu</Description> + <DisplayName>Quickemu</DisplayName> + <Group>Administrators</Group> + <Name>Quickemu</Name> + </LocalAccount> + </LocalAccounts> + </UserAccounts> + <RegisteredOrganization>Quickemu Project</RegisteredOrganization> + <RegisteredOwner>Quickemu</RegisteredOwner> <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <CommandLine>msiexec /i E:\guest-agent\qemu-ga-x86_64.msi /quiet /passive /qn</CommandLine> From 2e5785286f31f470681dfb9712f9be4222b8661d Mon Sep 17 00:00:00 2001 From: Phil Clifford <philip.clifford@gmail.com> Date: Mon, 1 Aug 2022 10:11:56 +0100 Subject: [PATCH 49/92] doc refresh to include option --- README.md | 72 ++++++++++++++++++++++------------------- docs/quickemu.1 | 7 ++-- docs/quickemu.1.md | 10 ++++-- docs/quickemu_conf.1 | 2 +- docs/quickemu_conf.1.md | 2 +- docs/quickget.1 | 5 ++- docs/quickget.1.md | 6 +++- 7 files changed, 62 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index dc9b9d2..6a97658 100644 --- a/README.md +++ b/README.md @@ -231,6 +231,10 @@ with your preferred flavour. `quickget` also supports: +## Other Operating Systems + +`quickget` also supports: + - `alma` (Alma Linux) - `alpine` (Alpine Linux) - `android` (Android x86) @@ -648,46 +652,46 @@ cog.out(f"```\n\n{help}\n\n```\n\n") ``` -Usage - quickemu --vm ubuntu.conf + Usage + quickemu --vm ubuntu.conf -You can also pass optional parameters - --braille : Enable braille support. Requires SDL. - --delete-disk : Delete the disk image and EFI variables - --delete-vm : Delete the entire VM and it's configuration - --display : Select display backend. 'sdl' (default), 'gtk', 'none', or 'spice' - --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit) - --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers - --screen <screen> : Use specified screen to determine the window size. - --shortcut : Create a desktop shortcut - --snapshot apply <tag> : Apply/restore a snapshot. - --snapshot create <tag> : Create a snapshot. - --snapshot delete <tag> : Delete a snapshot. - --snapshot info : Show disk/snapshot info. - --status-quo : Do not commit any changes to disk/snapshot. - --viewer <viewer> : Choose an alternative viewer. @Options: 'spicy' (default), 'remote-viewer', 'none' - --ssh-port <port> : Set ssh-port manually - --spice-port <port> : Set spice-port manually - --public-dir <path> : expose share directory. @Options: '' (default: xdg-user-dir PUBLICSHARE), '<directory>', 'none' - --monitor <type> : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none' - --monitor-telnet-host <ip/host> : Set telnet host for monitor. (default: 'localhost') - --monitor-telnet-port <port> : Set telnet port for monitor. (default: '4440') - --monitor-cmd <cmd> : Send command to monitor if available. (Example: system_powerdown) - --serial <type> : Set serial connection type. @Options: 'socket' (default), 'telnet', 'none' - --serial-telnet-host <ip/host> : Set telnet host for serial. (default: 'localhost') - --serial-telnet-port <port> : Set telnet port for serial. (default: '6660') - --keyboard <type> : Set keyboard. @Options: 'usb' (default), 'ps2', 'virtio' - --keyboard_layout <layout> : Set keyboard layout. - --mouse <type> : Set mouse. @Options: 'tablet' (default), 'ps2', 'usb', 'virtio' - --usb-controller <type> : Set usb-controller. @Options: 'ehci' (default), 'xhci', 'none' - --extra_args <arguments> : Pass additional arguments to qemu - --version : Print version + You can also pass optional parameters + --braille : Enable braille support. Requires SDL. + --delete-disk : Delete the disk image and EFI variables + --delete-vm : Delete the entire VM and it's configuration + --display : Select display backend. 'sdl' (default), 'gtk', 'none', 'spice' or 'spice-app' + --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit) + --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers + --screen <screen> : Use specified screen to determine the window size. + --shortcut : Create a desktop shortcut + --snapshot apply <tag> : Apply/restore a snapshot. + --snapshot create <tag> : Create a snapshot. + --snapshot delete <tag> : Delete a snapshot. + --snapshot info : Show disk/snapshot info. + --status-quo : Do not commit any changes to disk/snapshot. + --viewer <viewer> : Choose an alternative viewer. @Options: 'spicy' (default), 'remote-viewer', 'none' + --ssh-port <port> : Set ssh-port manually + --spice-port <port> : Set spice-port manually + --public-dir <path> : expose share directory. @Options: '' (default: xdg-user-dir PUBLICSHARE), '<directory>', 'none' + --monitor <type> : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none' + --monitor-telnet-host <ip/host> : Set telnet host for monitor. (default: 'localhost') + --monitor-telnet-port <port> : Set telnet port for monitor. (default: '4440') + --monitor-cmd <cmd> : Send command to monitor if available. (Example: system_powerdown) + --serial <type> : Set serial connection type. @Options: 'socket' (default), 'telnet', 'none' + --serial-telnet-host <ip/host> : Set telnet host for serial. (default: 'localhost') + --serial-telnet-port <port> : Set telnet port for serial. (default: '6660') + --keyboard <type> : Set keyboard. @Options: 'usb' (default), 'ps2', 'virtio' + --keyboard_layout <layout> : Set keyboard layout. + --mouse <type> : Set mouse. @Options: 'tablet' (default), 'ps2', 'usb', 'virtio' + --usb-controller <type> : Set usb-controller. @Options: 'ehci' (default), 'xhci', 'none' + --extra_args <arguments> : Pass additional arguments to qemu + --version : Print version ``` - <!-- [[[end]]] --> + ## Desktop shortcuts Desktop shortcuts can be created for a VM, the shortcuts are saved in diff --git a/docs/quickemu.1 b/docs/quickemu.1 index 77de3ae..c069623 100644 --- a/docs/quickemu.1 +++ b/docs/quickemu.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "QUICKEMU" "1" "July 30, 2022" "quickemu" "Quickemu User Manual" +.TH "QUICKEMU" "1" "August 1, 2022" "quickemu" "Quickemu User Manual" .hy .SH NAME .PP @@ -326,6 +326,9 @@ All the official Ubuntu flavours are supported, just replace .SS Other Operating Systems .PP \f[V]quickget\f[R] also supports: +.SS Other Operating Systems +.PP +\f[V]quickget\f[R] also supports: .IP \[bu] 2 \f[V]alma\f[R] (Alma Linux) .IP \[bu] 2 @@ -658,7 +661,7 @@ You can also pass optional parameters --braille : Enable braille support. Requires SDL. --delete-disk : Delete the disk image and EFI variables --delete-vm : Delete the entire VM and it\[aq]s configuration - --display : Select display backend. \[aq]sdl\[aq] (default), \[aq]gtk\[aq], \[aq]none\[aq], or \[aq]spice\[aq] + --display : Select display backend. \[aq]sdl\[aq] (default), \[aq]gtk\[aq], \[aq]none\[aq], \[aq]spice\[aq] or \[aq]spice-app\[aq] --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit) --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers --screen <screen> : Use specified screen to determine the window size. diff --git a/docs/quickemu.1.md b/docs/quickemu.1.md index 66a98e7..b98f373 100644 --- a/docs/quickemu.1.md +++ b/docs/quickemu.1.md @@ -1,6 +1,6 @@ --- author: Martin Wimpress -date: July 30, 2022 +date: August 1, 2022 footer: quickemu header: Quickemu User Manual section: 1 @@ -255,6 +255,10 @@ with your preferred flavour. `quickget` also supports: +## Other Operating Systems + +`quickget` also supports: + - `alma` (Alma Linux) - `alpine` (Alpine Linux) - `android` (Android x86) @@ -466,7 +470,7 @@ Here are the usage instructions: --braille : Enable braille support. Requires SDL. --delete-disk : Delete the disk image and EFI variables --delete-vm : Delete the entire VM and it's configuration - --display : Select display backend. 'sdl' (default), 'gtk', 'none', or 'spice' + --display : Select display backend. 'sdl' (default), 'gtk', 'none', 'spice' or 'spice-app' --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit) --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers --screen <screen> : Use specified screen to determine the window size. @@ -494,6 +498,8 @@ Here are the usage instructions: --extra_args <arguments> : Pass additional arguments to qemu --version : Print version + + ## Desktop shortcuts Desktop shortcuts can be created for a VM, the shortcuts are saved in diff --git a/docs/quickemu_conf.1 b/docs/quickemu_conf.1 index 5fa43b7..d0f9480 100644 --- a/docs/quickemu_conf.1 +++ b/docs/quickemu_conf.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "QUICKEMU_CONF" "1" "July 30, 2022" "quickemu_conf" "Quickemu Configuration Manual" +.TH "QUICKEMU_CONF" "1" "August 1, 2022" "quickemu_conf" "Quickemu Configuration Manual" .hy .SH NAME .PP diff --git a/docs/quickemu_conf.1.md b/docs/quickemu_conf.1.md index 8ff9ba7..e533f00 100644 --- a/docs/quickemu_conf.1.md +++ b/docs/quickemu_conf.1.md @@ -1,6 +1,6 @@ --- author: Martin Wimpress -date: July 30, 2022 +date: August 1, 2022 footer: quickemu_conf header: Quickemu Configuration Manual section: 1 diff --git a/docs/quickget.1 b/docs/quickget.1 index 3bcc359..a3899f2 100644 --- a/docs/quickget.1 +++ b/docs/quickget.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "QUICKGET" "1" "July 30, 2022" "quickget" "Quickget User Manual" +.TH "QUICKGET" "1" "August 1, 2022" "quickget" "Quickget User Manual" .hy .SH NAME .PP @@ -110,6 +110,9 @@ All the official Ubuntu flavours are supported, just replace .SS Other Operating Systems .PP \f[V]quickget\f[R] also supports: +.SS Other Operating Systems +.PP +\f[V]quickget\f[R] also supports: .IP \[bu] 2 \f[V]alma\f[R] (Alma Linux) .IP \[bu] 2 diff --git a/docs/quickget.1.md b/docs/quickget.1.md index e34b73a..04c163c 100644 --- a/docs/quickget.1.md +++ b/docs/quickget.1.md @@ -1,6 +1,6 @@ --- author: Martin Wimpress -date: July 30, 2022 +date: August 1, 2022 footer: quickget header: Quickget User Manual section: 1 @@ -88,6 +88,10 @@ with your preferred flavour. `quickget` also supports: +## Other Operating Systems + +`quickget` also supports: + - `alma` (Alma Linux) - `alpine` (Alpine Linux) - `android` (Android x86) From 7e0c00bfe7bb1e28d18ce5047d0f6a6c224d72f1 Mon Sep 17 00:00:00 2001 From: Phil Clifford <philip.clifford@gmail.com> Date: Mon, 1 Aug 2022 11:15:07 +0100 Subject: [PATCH 50/92] Last change hopefully --- README.md | 5 ++++- docs/quickemu.1 | 9 +++++++++ docs/quickemu.1.md | 4 ++++ docs/quickget.1 | 9 +++++++++ docs/quickget.1.md | 4 ++++ 5 files changed, 30 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6a97658..4ff12b4 100644 --- a/README.md +++ b/README.md @@ -406,6 +406,10 @@ quickemu --vm windows-11.conf - Complete the installation as you normally would. - All relevant drivers and services should be installed automatically. +- A local adminstrator user account is automatically created, with + these credentials: + - Username: `Quickemu` + - Password: `quickemu` ### Regional versions @@ -691,7 +695,6 @@ cog.out(f"```\n\n{help}\n\n```\n\n") ``` <!-- [[[end]]] --> - ## Desktop shortcuts Desktop shortcuts can be created for a VM, the shortcuts are saved in diff --git a/docs/quickemu.1 b/docs/quickemu.1 index c069623..98a04c0 100644 --- a/docs/quickemu.1 +++ b/docs/quickemu.1 @@ -615,6 +615,15 @@ quickemu --vm windows-11.conf Complete the installation as you normally would. .IP \[bu] 2 All relevant drivers and services should be installed automatically. +.IP \[bu] 2 +A local adminstrator user account is automatically created, with these +credentials: +.RS 2 +.IP \[bu] 2 +Username: \f[V]Quickemu\f[R] +.IP \[bu] 2 +Password: \f[V]quickemu\f[R] +.RE .SS Regional versions .PP By default \f[V]quickget\f[R] will download the \f[I]\[lq]English diff --git a/docs/quickemu.1.md b/docs/quickemu.1.md index b98f373..61582a9 100644 --- a/docs/quickemu.1.md +++ b/docs/quickemu.1.md @@ -430,6 +430,10 @@ quickemu --vm windows-11.conf - Complete the installation as you normally would. - All relevant drivers and services should be installed automatically. +- A local adminstrator user account is automatically created, with + these credentials: + - Username: `Quickemu` + - Password: `quickemu` ### Regional versions diff --git a/docs/quickget.1 b/docs/quickget.1 index a3899f2..8d19e83 100644 --- a/docs/quickget.1 +++ b/docs/quickget.1 @@ -399,6 +399,15 @@ quickemu --vm windows-11.conf Complete the installation as you normally would. .IP \[bu] 2 All relevant drivers and services should be installed automatically. +.IP \[bu] 2 +A local adminstrator user account is automatically created, with these +credentials: +.RS 2 +.IP \[bu] 2 +Username: \f[V]Quickemu\f[R] +.IP \[bu] 2 +Password: \f[V]quickemu\f[R] +.RE .SS Regional versions .PP By default \f[V]quickget\f[R] will download the \f[I]\[lq]English diff --git a/docs/quickget.1.md b/docs/quickget.1.md index 04c163c..20cef24 100644 --- a/docs/quickget.1.md +++ b/docs/quickget.1.md @@ -263,6 +263,10 @@ quickemu --vm windows-11.conf - Complete the installation as you normally would. - All relevant drivers and services should be installed automatically. +- A local adminstrator user account is automatically created, with + these credentials: + - Username: `Quickemu` + - Password: `quickemu` ### Regional versions From 54908fa3dac8b50fd2923b0e2d6fa62e434eb769 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Mon, 1 Aug 2022 11:21:47 +0100 Subject: [PATCH 51/92] Bump the version to 4.0 --- quickemu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickemu b/quickemu index debefd1..d39426a 100755 --- a/quickemu +++ b/quickemu @@ -1454,7 +1454,7 @@ EXTRA_ARGS="" # shellcheck disable=SC2155 readonly LAUNCHER=$(basename "${0}") readonly DISK_MIN_SIZE=$((197632 * 8)) -readonly VERSION="3.16" +readonly VERSION="4.0" # TODO: Make this run the native architecture binary QEMU=$(command -v qemu-system-x86_64) From 600ada52aee063c3b40bd8513bd178e444594de7 Mon Sep 17 00:00:00 2001 From: Mikael Bak <mikabak@protonmail.com> Date: Thu, 18 Aug 2022 10:44:09 +0200 Subject: [PATCH 52/92] Add reactos (#423) * Add initial support for ReactOS * Move code block to be able to override default cdrom settings --- quickemu | 51 ++++++++++++++++++++++++++++++++++++--------------- quickget | 29 +++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 15 deletions(-) diff --git a/quickemu b/quickemu index d39426a..c5e6f3c 100755 --- a/quickemu +++ b/quickemu @@ -509,6 +509,14 @@ function vm_boot() { MACHINE_TYPE="pc" NET_DEVICE="rtl8139" ;; + reactos) + CPU="-cpu qemu32,kvm=on" + if [ "${HOST_CPU_VENDOR}" == "AuthenticAMD" ]; then + CPU="${CPU},topoext" + fi + MACHINE_TYPE="pc" + NET_DEVICE="e1000" + ;; macos) #https://www.nicksherlock.com/2020/06/installing-macos-big-sur-on-proxmox/ # A CPU with SSE4.1 support is required for >= macOS Sierra @@ -1003,6 +1011,27 @@ function vm_boot() { -drive if=pflash,format=raw,unit=1,file="${EFI_VARS}") fi + if [ -n "${iso}" ] && [ "${guest_os}" == "freedos" ]; then + # FreeDOS reboots after partitioning the disk, and QEMU tries to boot from disk after first restart + # This flag sets the boot order to cdrom,disk. It will persist until powering down the VM + args+=(-boot order=dc) + elif [ -n "${iso}" ] && [ "${guest_os}" == "kolibrios" ]; then + # Since there is bug (probably) in KolibriOS: cdrom indexes 0 or 1 make system show an extra unexisting iso, so we use index=2 + # shellcheck disable=SC2054 + args+=(-drive media=cdrom,index=2,file="${iso}") + iso="" + elif [ -n "${iso}" ] && [ "${guest_os}" == "reactos" ]; then + # shellcheck disable=SC2054 + # https://reactos.org/wiki/QEMU + args+=(-boot order=d + -drive if=ide,index=2,media=cdrom,file="${iso}") + iso="" + elif [ -n "${iso}" ] && [ "${guest_os}" == "windows" ] && [ -e "${VMDIR}/unattended.iso" ]; then + # Attach the unattended configuration to Windows guests when booting from ISO + # shellcheck disable=SC2054 + args+=(-drive media=cdrom,index=2,file="${VMDIR}/unattended.iso") + fi + if [ -n "${floppy}" ]; then # shellcheck disable=SC2054 args+=(-drive if=floppy,format=raw,file="${floppy}") @@ -1018,21 +1047,6 @@ function vm_boot() { args+=(-drive media=cdrom,index=1,file="${fixed_iso}") fi - if [ -n "${iso}" ] && [ "${guest_os}" == "freedos" ]; then - # FreeDOS reboots after partitioning the disk, and QEMU tries to boot from disk after first restart - # This flag sets the boot order to cdrom,disk. It will persist until powering down the VM - args+=(-boot order=dc) - elif [ -n "${iso}" ] && [ "${guest_os}" == "kolibrios" ]; then - # Since there is bug (probably) in KolibriOS: cdrom indexes 0 or 1 make system show an extra unexisting iso, so we use index=2 - # shellcheck disable=SC2054 - args+=(-drive media=cdrom,index=2,file="${iso}") - iso="" - elif [ -n "${iso}" ] && [ "${guest_os}" == "windows" ] && [ -e "${VMDIR}/unattended.iso" ]; then - # Attach the unattended configuration to Windows guests when booting from ISO - # shellcheck disable=SC2054 - args+=(-drive media=cdrom,index=2,file="${VMDIR}/unattended.iso") - fi - if [ "${guest_os}" == "macos" ]; then # shellcheck disable=SC2054 args+=(-device ahci,id=ahci @@ -1053,12 +1067,19 @@ function vm_boot() { args+=(-device ahci,id=ahci -device ide-hd,bus=ahci.0,drive=SystemDisk -drive id=SystemDisk,if=none,format=qcow2,file="${disk_img}" ${STATUS_QUO}) + elif [ "${guest_os}" == "batocera" ] ; then # shellcheck disable=SC2054,SC2206 args+=(-device virtio-blk-pci,drive=BootDisk -drive id=BootDisk,if=none,format=raw,file="${img}" -device virtio-blk-pci,drive=SystemDisk -drive id=SystemDisk,if=none,format=qcow2,file="${disk_img}" ${STATUS_QUO}) + + elif [ "${guest_os}" == "reactos" ]; then + # shellcheck disable=SC2054,SC2206 + # https://reactos.org/wiki/QEMU + args+=(-drive if=ide,index=0,media=disk,file="${disk_img}") + else # shellcheck disable=SC2054,SC2206 args+=(-device virtio-blk-pci,drive=SystemDisk diff --git a/quickget b/quickget index de7eecf..dfbd61e 100755 --- a/quickget +++ b/quickget @@ -57,6 +57,7 @@ function pretty_name() { opensuse) PRETTY_NAME="openSUSE";; oraclelinux) PRETTY_NAME="Oracle Linux";; popos) PRETTY_NAME="Pop!_OS";; + reactos) PRETTY_NAME="ReactOS";; regolith) PRETTY_NAME="Regolith Linux";; rockylinux) PRETTY_NAME="Rocky Linux";; ubuntu-budgie) PRETTY_NAME="Ubuntu Budgie";; @@ -196,6 +197,7 @@ function os_support() { opensuse \ oraclelinux \ popos \ + reactos \ regolith \ rockylinux \ slackware \ @@ -437,6 +439,10 @@ function editions_popos() { echo intel nvidia } +function releases_reactos() { + echo latest +} + function releases_regolith() { echo focal impish } @@ -719,6 +725,9 @@ function make_vm_config() { openbsd) GUEST="openbsd" IMAGE_TYPE="iso";; + reactos) + GUEST="reactos" + IMAGE_TYPE="iso";; windows) GUEST="windows" IMAGE_TYPE="iso";; @@ -765,6 +774,11 @@ EOF echo "disk_size=\"2G\"" >> "${CONF_FILE}" echo "ram=\"128M\"" >> "${CONF_FILE}" ;; + reactos) + echo "boot=\"legacy\"" >> "${CONF_FILE}" + echo "disk_size=\"12G\"" >> "${CONF_FILE}" + echo "ram=\"2048M\"" >> "${CONF_FILE}" + ;; macos) echo "macos_release=\"${RELEASE}\"" >> "${CONF_FILE}";; esac @@ -1307,6 +1321,16 @@ function get_popos() { echo "${URL} ${HASH}" } +function get_reactos() { + local HASH="" + local URL="" + local TMPURL="" + + TMPURL=$(wget -q -S -O- --max-redirect=0 "https://sourceforge.net/projects/reactos/files/latest/download" 2>&1 | grep Location | cut -d' ' -f4) + URL=${TMPURL%\?*} + echo "${URL} ${HASH}" +} + function get_regolith() { local EDITION="${1:-}" local HASH="" @@ -1843,6 +1867,11 @@ create_vm() { ISO="${ISO/.gz/}" fi + if [ ${OS} == "reactos" ] && [[ $ISO =~ ".zip" ]]; then + unzip ${VM_PATH}/${ISO} -d ${VM_PATH} + ISO=$(ls ${VM_PATH} | grep -i '.iso' | grep -v '.zip') + fi + make_vm_config "${ISO}" } From 1b1bd84e6a06f7d98861cf425e4895f69b0ffede Mon Sep 17 00:00:00 2001 From: Graham Ashton <graham@effectif.com> Date: Mon, 1 Aug 2022 11:24:35 +0100 Subject: [PATCH 53/92] Add script to retrieve Windows product keys --- windowskey | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100755 windowskey diff --git a/windowskey b/windowskey new file mode 100755 index 0000000..c6a02af --- /dev/null +++ b/windowskey @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 + + +import html.parser +import os +import sys +import urllib.request + + +""" +Download Windows product keys from MicroSoft +""" + +key_page_url = "https://docs.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys" + + +def usage(): + script = os.path.basename(sys.argv[0]) + message = f"""Usage: {script} [windows-version] + +To specify the version of Windows you'd like, pass a string that matches the +name of the operating system you'd like to download. Case doesn't matter, so +you can use "windows 10" or "Windows 10". + +e.g. + + {script} "Windows 10" + {script} "enterprise" + +""" + print(message, file=sys.stderr) + sys.exit(0) + + +def download_page(url): + response = urllib.request.urlopen(url) + return response.read().decode("utf-8") + + +class WindowsKeyPageParser(html.parser.HTMLParser): + def __init__(self, *, convert_charrefs=True): + super().__init__(convert_charrefs=True) + self.product_keys = {} + self.parsing_os = False + + def handle_starttag(self, tag, attrs): + self.parsing_os = tag == "td" + + def handle_endtag(self, tag): + self.parsing_os = False + + def handle_data(self, data): + if self.parsing_os: + self.stash_table_cell(data) + + def stash_table_cell(self, data): + if "Windows" in data: + self.current_os = data + else: + product_key = data + self.product_keys[self.current_os] = product_key + + +def find_keys_for_all_versions(markup): + parser = WindowsKeyPageParser() + parser.feed(markup) + return parser.product_keys + + +if __name__ == "__main__": + try: + arg = sys.argv[1] + except IndexError: + windows_version = "" + else: + if arg in ["-h", "--help"]: + usage() + windows_version = arg + + markup = download_page(key_page_url) + product_keys = find_keys_for_all_versions(markup) + + for os_name, product_key in product_keys.items(): + if windows_version.lower() in os_name.lower(): + print(f"{os_name}: {product_key}") From 8e8c65eac6d0c4421165b2315df587503d44c31b Mon Sep 17 00:00:00 2001 From: 3nprob <74199244+3nprob@users.noreply.github.com> Date: Thu, 18 Aug 2022 08:45:10 +0000 Subject: [PATCH 54/92] Allow overriding some VM arguments via env vars (#519) * allow overriding MACHINE_TYPE,MAC_DISK_DEV,NET_DEVICE,SMM via env vars * allow overriding EFI_CODE,EFI_EXTRA_VARS --- quickemu | 124 +++++++++++++++++++++++++------------------------------ 1 file changed, 57 insertions(+), 67 deletions(-) diff --git a/quickemu b/quickemu index c5e6f3c..1d86dcc 100755 --- a/quickemu +++ b/quickemu @@ -212,7 +212,7 @@ function vm_boot() { local DISK_USED="" local DISPLAY_DEVICE="" local DISPLAY_RENDER="" - local EFI_CODE="" + local EFI_CODE="${EFI_CODE}" local EFI_VARS="" local GUEST_CPU_CORES="" local GUEST_CPU_LOGICAL_CORES="" @@ -226,13 +226,13 @@ function vm_boot() { local KERNEL_NODE="" local KERNEL_VER="?" local LSB_DESCRIPTION="Unknown OS" - local MACHINE_TYPE="q35" + local MACHINE_TYPE="${MACHINE_TYPE:-q35}" local MAC_BOOTLOADER="" local MAC_MISSING="" - local MAC_DISK_DEV="ide-hd,bus=ahci.2" - local NET_DEVICE="virtio-net" + local MAC_DISK_DEV="${MAC_DISK_DEV:-ide-hd,bus=ahci.2}" + local NET_DEVICE="${NET_DEVICE:-virtio-net}" local OSK="" - local SMM="off" + local SMM="${SMM:-off}" local USB_HOST_PASSTHROUGH_CONTROLLER="qemu-xhci" local VIDEO="" @@ -379,69 +379,59 @@ function vm_boot() { # does not support SMM. # https://bugzilla.redhat.com/show_bug.cgi?id=1929357#c5 - case ${secureboot} in - on) - if [ -e "/usr/share/OVMF/OVMF_CODE_4M.secboot.fd" ]; then - EFI_CODE="/usr/share/OVMF/OVMF_CODE_4M.secboot.fd" - efi_vars "/usr/share/OVMF/OVMF_VARS_4M.fd" "${EFI_VARS}" - elif [ -e "/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd" ]; then - EFI_CODE="/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd" - efi_vars "/usr/share/edk2/ovmf/OVMF_VARS.fd" "${EFI_VARS}" - elif [ -e "/usr/share/OVMF/x64/OVMF_CODE.secboot.fd" ]; then - EFI_CODE="/usr/share/OVMF/x64/OVMF_CODE.secboot.fd" - efi_vars "/usr/share/OVMF/x64/OVMF_VARS.fd" "${EFI_VARS}" - elif [ -e "/usr/share/edk2-ovmf/OVMF_CODE.secboot.fd" ]; then - EFI_CODE="/usr/share/edk2-ovmf/OVMF_CODE.secboot.fd" - efi_vars "/usr/share/edk2-ovmf/OVMF_VARS.fd" "${EFI_VARS}" - elif [ -e "/usr/share/qemu/ovmf-x86_64-smm-ms-code.bin" ]; then - EFI_CODE="/usr/share/qemu/ovmf-x86_64-smm-ms-code.bin" - efi_vars "/usr/share/qemu/ovmf-x86_64-smm-ms-vars.bin" "${EFI_VARS}" - elif [ -e "/usr/share/qemu/edk2-x86_64-secure-code.fd" ]; then - EFI_CODE="/usr/share/qemu/edk2-x86_64-secure-code.fd" - efi_vars "/usr/share/qemu/edk2-x86_64-code.fd" "${EFI_VARS}" - # Solus new place to hide - elif [ -e "/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd" ]; then - EFI_CODE="/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd" - efi_vars "/usr/share/edk2-ovmf/x64/OVMF_VARS.fd" "${EFI_VARS}" - else - echo "ERROR! SecureBoot was requested but no SecureBoot capable firmware was found." - echo " Please install OVMF firmware." - exit 1 + if [ ! -z "${EFI_CODE}" ] || [ ! -e "${EFI_CODE}" ]; then + case ${secureboot} in + on) + ovmfs=("/usr/share/OVMF/OVMF_CODE_4M.secboot.fd","/usr/share/OVMF/OVMF_VARS_4M.fd" \ + "/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd","/usr/share/edk2/ovmf/OVMF_VARS.fd" \ + "/usr/share/OVMF/x64/OVMF_CODE.secboot.fd","/usr/share/OVMF/x64/OVMF_VARS.fd" \ + "/usr/share/edk2-ovmf/OVMF_CODE.secboot.fd","/usr/share/edk2-ovmf/OVMF_VARS.fd" \ + "/usr/share/qemu/ovmf-x86_64-smm-ms-code.bin","/usr/share/qemu/ovmf-x86_64-smm-ms-vars.bin" \ + "/usr/share/qemu/edk2-x86_64-secure-code.fd","/usr/share/qemu/edk2-x86_64-code.fd" \ + "/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd","/usr/share/edk2-ovmf/x64/OVMF_VARS.fd" + ) + ;; + *) + ovmfs=("/usr/share/OVMF/OVMF_CODE_4M.fd","/usr/share/OVMF/OVMF_VARS_4M.fd" \ + "/usr/share/edk2/ovmf/OVMF_CODE.fd","/usr/share/edk2/ovmf/OVMF_VARS.fd" \ + "/usr/share/OVMF/OVMF_CODE.fd","/usr/share/OVMF/OVMF_VARS.fd" \ + "/usr/share/OVMF/x64/OVMF_CODE.fd","/usr/share/OVMF/x64/OVMF_VARS.fd" \ + "/usr/share/edk2-ovmf/OVMF_CODE.fd","/usr/share/edk2-ovmf/OVMF_VARS.fd" \ + "/usr/share/qemu/ovmf-x86_64-4m-code.bin","/usr/share/qemu/ovmf-x86_64-4m-vars.bin" \ + "/usr/share/qemu/edk2-x86_64-code.fd","/usr/share/qemu/edk2-x86_64-code.fd" \ + "/usr/share/edk2-ovmf/x64/OVMF_CODE.fd","/usr/share/edk2-ovmf/x64/OVMF_VARS.fd" + ) + ;; + esac + # Attempt each EFI_CODE file one by one, selecting the corresponding code and vars + # when an existing file is found. + _IFS=$IFS + IFS="," + for f in "${ovmfs[@]}"; do + set -- $f; + if [ -e "${1}" ]; then + EFI_CODE="${1}" + EFI_EXTRA_VARS="${2}" fi - ;; - *) - if [ -e "/usr/share/OVMF/OVMF_CODE_4M.fd" ]; then - EFI_CODE="/usr/share/OVMF/OVMF_CODE_4M.fd" - efi_vars "/usr/share/OVMF/OVMF_VARS_4M.fd" "${EFI_VARS}" - elif [ -e "/usr/share/edk2/ovmf/OVMF_CODE.fd" ]; then - EFI_CODE="/usr/share/edk2/ovmf/OVMF_CODE.fd" - efi_vars "/usr/share/edk2/ovmf/OVMF_VARS.fd" "${EFI_VARS}" - elif [ -e "/usr/share/OVMF/OVMF_CODE.fd" ]; then - EFI_CODE="/usr/share/OVMF/OVMF_CODE.fd" - efi_vars "/usr/share/OVMF/OVMF_VARS.fd" "${EFI_VARS}" - elif [ -e "/usr/share/OVMF/x64/OVMF_CODE.fd" ]; then - EFI_CODE="/usr/share/OVMF/x64/OVMF_CODE.fd" - efi_vars "/usr/share/OVMF/x64/OVMF_VARS.fd" "${EFI_VARS}" - elif [ -e "/usr/share/edk2-ovmf/OVMF_CODE.fd" ]; then - EFI_CODE="/usr/share/edk2-ovmf/OVMF_CODE.fd" - efi_vars "/usr/share/edk2-ovmf/OVMF_VARS.fd" "${EFI_VARS}" - elif [ -e "/usr/share/qemu/ovmf-x86_64-4m-code.bin" ]; then - EFI_CODE="/usr/share/qemu/ovmf-x86_64-4m-code.bin" - efi_vars "/usr/share/qemu/ovmf-x86_64-4m-vars.bin" "${EFI_VARS}" - elif [ -e "/usr/share/qemu/edk2-x86_64-code.fd" ]; then - EFI_CODE="/usr/share/qemu/edk2-x86_64-code.fd" - efi_vars "/usr/share/qemu/edk2-x86_64-code.fd" "${EFI_VARS}" - # Solus - elif [ -e "/usr/share/edk2-ovmf/x64/OVMF_CODE.fd" ]; then - EFI_CODE="/usr/share/edk2-ovmf/x64/OVMF_CODE.fd" - efi_vars "/usr/share/edk2-ovmf/x64/OVMF_VARS.fd" "${EFI_VARS}" - else - echo "ERROR! EFI boot requested but no EFI firmware found." - echo " Please install OVMF firmware." - exit 1 - fi - ;; - esac + done + IFS=$_IFS + fi + if [ -z "${EFI_CODE}" ] || [ ! -e "${EFI_CODE}" ]; then + if [ "$secureboot" == "on" ]; then + echo "ERROR! SecureBoot was requested but no SecureBoot capable firmware was found." + else + echo "ERROR! EFI boot requested but no EFI firmware found." + fi + echo " Please install OVMF firmware." + exit 1 + fi + if [ ! -z "${EFI_EXTRA_VARS}" ]; then + if [ ! -e "${EFI_EXTRA_VARS}" ]; then + echo " - EFI: ERROR! EFI_EXTRA_VARS file ${EFI_EXTRA_VARS} does not exist." + exit 1 + fi + efi_vars "${EFI_EXTRA_VARS}" "${EFI_VARS}" + fi # Make sure EFI_VARS references an actual, writeable, file if [ ! -f "${EFI_VARS}" ] || [ ! -w "${EFI_VARS}" ]; then From e19a2ce837f5bfe567c9a84c45d98fb48416c4c8 Mon Sep 17 00:00:00 2001 From: Dani Llewellyn <diddledani@ubuntu.com> Date: Tue, 2 Aug 2022 22:18:06 +0100 Subject: [PATCH 55/92] Remove duplicate option (usb_controller) the default for `usb_controller` is set twice in `quickemu` script. Remove the second `usb_controller` default setting. --- quickemu | 2 -- 1 file changed, 2 deletions(-) diff --git a/quickemu b/quickemu index 1d86dcc..0a41287 100755 --- a/quickemu +++ b/quickemu @@ -1422,8 +1422,6 @@ keyboard="usb" keyboard_layout="en-us" # options: ps2, usb, tablet, virtio mouse="tablet" -# options: ehci, xhci -usb_controller="ehci" BRAILLE="" DELETE_DISK=0 From 573b2566cba64617c14a98b3e580af3120ce2069 Mon Sep 17 00:00:00 2001 From: Phil Clifford <philclifford@users.noreply.github.com> Date: Thu, 18 Aug 2022 09:47:59 +0100 Subject: [PATCH 56/92] Add super-size for some Zorin options (#522) test the EDITION for those that need a large disk Co-authored-by: Martin Wimpress <304639+flexiondotorg@users.noreply.github.com> --- quickget | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/quickget b/quickget index dfbd61e..6488b58 100755 --- a/quickget +++ b/quickget @@ -774,6 +774,12 @@ EOF echo "disk_size=\"2G\"" >> "${CONF_FILE}" echo "ram=\"128M\"" >> "${CONF_FILE}" ;; + zorin) + case ${EDITION} in + education64|edulite64) + echo "disk_size=\"32G\"" >> "${CONF_FILE}";; + esac + ;; reactos) echo "boot=\"legacy\"" >> "${CONF_FILE}" echo "disk_size=\"12G\"" >> "${CONF_FILE}" From 6474505dc2dc41444498bc31afc13bf360c825eb Mon Sep 17 00:00:00 2001 From: Deihim Poornader <deihim007@gmail.com> Date: Sun, 7 Aug 2022 11:40:23 +0430 Subject: [PATCH 57/92] Update quickemu Limit spice to localhost, preventing potential unauthorized access. --- quickemu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickemu b/quickemu index 0a41287..e552997 100755 --- a/quickemu +++ b/quickemu @@ -833,7 +833,7 @@ function vm_boot() { echo -n " --spice-shared-dir ${PUBLIC}" fi echo "${FULLSPICY}" - SPICE="${SPICE},port=${SPICE_PORT}" + SPICE="${SPICE},port=${SPICE_PORT},addr=127.0.0.1" fi if [ -n "${PUBLIC}" ]; then From 309057f9848548d70a9e7b66d6f576f3d3f70ca9 Mon Sep 17 00:00:00 2001 From: Deihim Poornader <deihim007@gmail.com> Date: Sun, 7 Aug 2022 11:49:07 +0430 Subject: [PATCH 58/92] Add udp port forward Add udp port forward, which can be useful for windows rdp udp acceleration. --- quickemu | 1 + 1 file changed, 1 insertion(+) diff --git a/quickemu b/quickemu index e552997..fc02ea2 100755 --- a/quickemu +++ b/quickemu @@ -808,6 +808,7 @@ function vm_boot() { GUEST_PORT=$(echo "${FORWARD}" | cut -d':' -f2) echo " - ${HOST_PORT} => ${GUEST_PORT}" NET="${NET},hostfwd=tcp::${HOST_PORT}-:${GUEST_PORT}" + NET="${NET},hostfwd=udp::${HOST_PORT}-:${GUEST_PORT}" done fi From 1522e4b1a4cd93b16125e2ff3c3c59562bed82b4 Mon Sep 17 00:00:00 2001 From: Jake Halaska <26490690+5Dev24@users.noreply.github.com> Date: Sun, 7 Aug 2022 06:11:56 -0500 Subject: [PATCH 59/92] Force IPv4 on android mirror --- quickget | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quickget b/quickget index 6488b58..1b75636 100755 --- a/quickget +++ b/quickget @@ -845,8 +845,8 @@ function get_android() { ISO=$(echo "${JSON_REL}" | jq -r .n) HASH=$(echo "${JSON_REL}" | jq -r .hash.sha256) # Traverse the directories to find the .iso location - for DIR in $(wget -q -O- "${URL}" | grep -o -E '[0-9]{5}' | sort -ur); do - if wget -q -O- "${URL}/${DIR}" | grep "${ISO}" &>/dev/null; then + for DIR in $(wget -4 -q -O- "${URL}" | grep -o -E '[0-9]{5}' | sort -ur); do + if wget -4 -q -O- "${URL}/${DIR}" | grep "${ISO}" &>/dev/null; then URL="${URL}/${DIR}" break fi From 0a7a38b915594b747f431646b5752d0657bd7652 Mon Sep 17 00:00:00 2001 From: interorbital <106621171+interorbital@users.noreply.github.com> Date: Sun, 7 Aug 2022 12:15:56 +0300 Subject: [PATCH 60/92] added linuxmint 21 to quickget --- quickget | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickget b/quickget index 1b75636..dbe8f08 100755 --- a/quickget +++ b/quickget @@ -367,7 +367,7 @@ function releases_kolibrios() { } function releases_linuxmint(){ - echo 20.2 20.3 + echo 20.2 20.3 21 } function editions_linuxmint(){ From 477d35dad7d66e8ec57f5f6f9d0882a44596c149 Mon Sep 17 00:00:00 2001 From: Phil Clifford <philip.clifford@gmail.com> Date: Thu, 11 Aug 2022 02:27:54 +0100 Subject: [PATCH 61/92] try to support jammy daily testing --- quickget | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/quickget b/quickget index dbe8f08..adfdd04 100755 --- a/quickget +++ b/quickget @@ -491,6 +491,7 @@ function releases_ubuntu() { ;; esac echo ${LTS_SUPPORT} \ + jammy-daily \ daily-live \ daily-canary \ eol-4.10 \ @@ -1410,6 +1411,10 @@ function get_ubuntu() { if [[ "${RELEASE}" == "eol-"* ]]; then URL="https://old-releases.ubuntu.com/releases/${RELEASE/eol-/}" + elif [[ "${RELEASE}" == "jammy-daily" ]]; then + URL="https://cdimage.ubuntu.com/${OS}/jammy/daily-live/current" + VM_PATH="${OS}-jammy-live" + elif [[ "${RELEASE}" == *"daily"* ]] || [ "${RELEASE}" == "dvd" ]; then URL="https://cdimage.ubuntu.com/${OS}/${RELEASE}/current" VM_PATH="${OS}-daily-live" From 94ee99a48e172c7c6b420af178f2e505dfcd8a69 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Thu, 18 Aug 2022 10:48:16 +0100 Subject: [PATCH 62/92] Add notes to work around MacOS App Store logins #474 This work around may work in some situations. --- README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/README.md b/README.md index 4ff12b4..3125723 100644 --- a/README.md +++ b/README.md @@ -389,6 +389,22 @@ There are some considerations when running macOS via Quickemu. webdavd](https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24). - Copy/paste via SPICE agent is **not available on macOS**. +### macOS App Store + +If you see *"Your device or computer could not be verified"* when you try to +login to the App Store, make sure that your wired ethernet device is `en0`. Use +`ifconfig` in a terminal to verify this. + +If the wired ethernet device is not `en0`, then then go to *System Preferences* -> *Network*, +delete all the network devices and apply the changes. Next, open a terminal and +run the following: + +```bash +sudo rm /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist +``` + +Now reboot, and the App Store should work. + ## Windows 8.1, 10 & 11 Guests `quickget` can automatically download Windows 8.1, [Windows From 10c35369a1855ed9b28a105cd72f73c8e6a94eb6 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Thu, 18 Aug 2022 10:50:29 +0100 Subject: [PATCH 63/92] Don't pass-through the CPU for macOS guest on Intel CPU hosts. Close #502 --- quickemu | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/quickemu b/quickemu index fc02ea2..46b143e 100755 --- a/quickemu +++ b/quickemu @@ -511,14 +511,9 @@ function vm_boot() { #https://www.nicksherlock.com/2020/06/installing-macos-big-sur-on-proxmox/ # A CPU with SSE4.1 support is required for >= macOS Sierra if check_cpu_flag sse4_1; then - case ${HOST_CPU_VENDOR} in - GenuineIntel) - CPU="-cpu host,kvm=on,vendor=GenuineIntel,+hypervisor,+invtsc,+kvm_pv_eoi,+kvm_pv_unhalt";; - AuthenticAMD|*) - # Used in past versions: +movbe,+smep,+xgetbv1,+xsavec,+avx2 - # Warn on AMD: +fma4,+pcid - CPU="-cpu Penryn,kvm=on,vendor=GenuineIntel,+aes,+avx,+bmi1,+bmi2,+fma,+hypervisor,+invtsc,+kvm_pv_eoi,+kvm_pv_unhalt,+popcnt,+ssse3,+sse4.2,vmware-cpuid-freq=on,+xsave,+xsaveopt,check";; - esac + # Used in past versions: +movbe,+smep,+xgetbv1,+xsavec,+avx2 + # Warn on AMD: +fma4,+pcid + CPU="-cpu Penryn,kvm=on,vendor=GenuineIntel,+aes,+avx,+bmi1,+bmi2,+fma,+hypervisor,+invtsc,+kvm_pv_eoi,+kvm_pv_unhalt,+popcnt,+ssse3,+sse4.2,vmware-cpuid-freq=on,+xsave,+xsaveopt,check" else echo "ERROR! macOS requires a CPU with SSE 4.1 support." exit 1 From 275f057cdd5e3040ba4c6878b1d7742e66bbd395 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Thu, 18 Aug 2022 12:55:47 +0100 Subject: [PATCH 64/92] Limit macOS Monterey to 2 CPU cores. Close #438 Post-install the cpu_cores=2 can be removed from the virtual machine configuration file. --- quickget | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/quickget b/quickget index adfdd04..4b93db3 100755 --- a/quickget +++ b/quickget @@ -786,7 +786,13 @@ EOF echo "disk_size=\"12G\"" >> "${CONF_FILE}" echo "ram=\"2048M\"" >> "${CONF_FILE}" ;; - macos) echo "macos_release=\"${RELEASE}\"" >> "${CONF_FILE}";; + macos) + echo "macos_release=\"${RELEASE}\"" >> "${CONF_FILE}" + # https://github.com/quickemu-project/quickemu/issues/438 + if [ "${RELEASE}" == "monterey" ]; then + echo "cpu_cores=2" >> "${CONF_FILE}" + fi + ;; esac # Enable TPM for Windows 11 From fd105ab8f565056864011a8d5c316a0ca61cf982 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Thu, 18 Aug 2022 12:57:24 +0100 Subject: [PATCH 65/92] White space clean up --- quickemu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickemu b/quickemu index 46b143e..a4f7145 100755 --- a/quickemu +++ b/quickemu @@ -173,7 +173,7 @@ function enable_usb_passthrough() { done if [ "${USB_NOT_READY}" -eq 1 ]; then - echo " ERROR! USB permission changes are required 👆" + echo " ERROR! USB permission changes are required 👆" exit 1 fi fi From 74e72404b4119e37d9434a023e42c23e1977e701 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Thu, 18 Aug 2022 16:02:35 +0100 Subject: [PATCH 66/92] Automatically press any key when booting Windows install. Close #231 --- quickemu | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/quickemu b/quickemu index a4f7145..d29f7aa 100755 --- a/quickemu +++ b/quickemu @@ -1752,8 +1752,13 @@ if [ ${SHORTCUT} -eq 1 ]; then exit fi -if [ $VM_UP -eq 0 ]; then +if [ ${VM_UP} -eq 0 ]; then vm_boot + # If the VM being started is an uninstalled Windows VM then auto-skip the press-any key prompt. + if [ -n "${iso}" ] && [ "${guest_os}" == "windows" ]; then + sleep 3.5 + monitor_send_cmd "sendkey ret" + fi start_viewer else parse_ports_from_file From 3f05e41e1358bf5978818a557ee2fbf18f58fca2 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Thu, 18 Aug 2022 16:02:59 +0100 Subject: [PATCH 67/92] Clean up status messages --- quickemu | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/quickemu b/quickemu index d29f7aa..7735830 100755 --- a/quickemu +++ b/quickemu @@ -1196,7 +1196,6 @@ function vm_boot() { function start_viewer { errno=0 if [ "${VIEWER}" != "none" ]; then - echo "---" # If output is 'none' then SPICE was requested. if [ "${OUTPUT}" == "spice" ]; then @@ -1204,11 +1203,11 @@ function start_viewer { # show via viewer: remote-viewer if [ -n "${PUBLIC}" ]; then - echo " - Start viewer: ${VIEWER} --title \"${VMNAME}\" --spice-shared-dir \"${PUBLIC}\" ${FULLSPICY} \"spice://localhost:${SPICE_PORT}\" >/dev/null 2>&1 &" + echo " - Viewer: ${VIEWER} --title \"${VMNAME}\" --spice-shared-dir \"${PUBLIC}\" ${FULLSPICY} \"spice://localhost:${SPICE_PORT}\" >/dev/null 2>&1 &" ${VIEWER} --title "${VMNAME}" --spice-shared-dir "${PUBLIC}" ${FULLSPICY} "spice://localhost:${SPICE_PORT}" >/dev/null 2>&1 & errno=$? else - echo " - Start viewer: ${VIEWER} --title \"${VMNAME}\" ${FULLSPICY} \"spice://localhost:${SPICE_PORT}\" >/dev/null 2>&1 &" + echo " - Viewer: ${VIEWER} --title \"${VMNAME}\" ${FULLSPICY} \"spice://localhost:${SPICE_PORT}\" >/dev/null 2>&1 &" ${VIEWER} --title "${VMNAME}" ${FULLSPICY} "spice://localhost:${SPICE_PORT}" >/dev/null 2>&1 & errno=$? fi @@ -1217,11 +1216,11 @@ function start_viewer { # show via viewer: spicy if [ -n "${PUBLIC}" ]; then - echo " - Start viewer: ${VIEWER} --title \"${VMNAME}\" --port \"${SPICE_PORT}\" --spice-shared-dir \"${PUBLIC}\" \"${FULLSPICY}\" >/dev/null 2>&1 &" + echo " - Viewer: ${VIEWER} --title \"${VMNAME}\" --port \"${SPICE_PORT}\" --spice-shared-dir \"${PUBLIC}\" \"${FULLSPICY}\" >/dev/null 2>&1 &" ${VIEWER} --title "${VMNAME}" --port "${SPICE_PORT}" --spice-shared-dir "${PUBLIC}" "${FULLSPICY}" >/dev/null 2>&1 & errno=$? else - echo " - Start viewer: ${VIEWER} --title \"${VMNAME}\" --port \"${SPICE_PORT}\" \"${FULLSPICY}\" >/dev/null 2>&1 &" + echo " - Viewer: ${VIEWER} --title \"${VMNAME}\" --port \"${SPICE_PORT}\" \"${FULLSPICY}\" >/dev/null 2>&1 &" ${VIEWER} --title "${VMNAME}" --port "${SPICE_PORT}" "${FULLSPICY}" >/dev/null 2>&1 & errno=$? fi @@ -1360,14 +1359,13 @@ function monitor_send_cmd { return fi - case "${monitor_channel}" in socket) - echo -e " - MON-SEND: ${MSG}" + echo -e " - Sending: ${MSG}" echo -e "${MSG}" | socat -,shut-down unix-connect:"${VM_MONITOR_SOCKETPATH}" 2>&1 > /dev/null ;; telnet) - echo -e " - MON-SEND: ${MSG}" + echo -e " - Sending: ${MSG}" echo -e "${MSG}" | socat - tcp:"${MONITOR_TELNET_HOST}":"${MONITOR_TELNET_PORT}" 2>&1 > /dev/null ;; *) From 13abd0c5a7a302e7606864caf4db72cff53eb1ca Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Thu, 18 Aug 2022 17:51:31 +0100 Subject: [PATCH 68/92] Move MSR warning to an appropriate section of the status messages --- quickemu | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/quickemu b/quickemu index 7735830..98fab07 100755 --- a/quickemu +++ b/quickemu @@ -336,6 +336,11 @@ function vm_boot() { boot=${boot,,} guest_os=${guest_os,,} + if [ "${guest_os}" == "macos" ] || [ "${guest_os}" == "windows" ]; then + # Display MSRs alert if the guest is macOS or windows + ignore_msrs_alert + fi + # Always Boot macOS using EFI if [ "${guest_os}" == "macos" ]; then boot="efi" @@ -636,11 +641,6 @@ function vm_boot() { img="" fi - if [ "${guest_os}" == "macos" ] || [ "${guest_os}" == "windows" ]; then - # Display MSRs alert if the guest is macOS or windows - ignore_msrs_alert - fi - # Has the status quo been requested? if [ "${STATUS_QUO}" == "-snapshot" ]; then if [ -z "${img}" ] && [ -z "${iso}" ]; then From d8417a6abefa9d9ed6e6284f7365899af8276ac5 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Thu, 18 Aug 2022 17:51:55 +0100 Subject: [PATCH 69/92] Make shellcheck happy --- quickemu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickemu b/quickemu index 98fab07..2606407 100755 --- a/quickemu +++ b/quickemu @@ -384,7 +384,7 @@ function vm_boot() { # does not support SMM. # https://bugzilla.redhat.com/show_bug.cgi?id=1929357#c5 - if [ ! -z "${EFI_CODE}" ] || [ ! -e "${EFI_CODE}" ]; then + if [ -n "${EFI_CODE}" ] || [ ! -e "${EFI_CODE}" ]; then case ${secureboot} in on) ovmfs=("/usr/share/OVMF/OVMF_CODE_4M.secboot.fd","/usr/share/OVMF/OVMF_VARS_4M.fd" \ From c147560731ec81b8f213d9498670e57232e8e3c6 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 17:16:54 +0100 Subject: [PATCH 70/92] Refactor guest tweak for Batocera, KolobriOS, ReactOS, Haiku & FreeDOS --- quickemu | 32 ++++++++++---------------------- quickget | 8 ++++++-- 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/quickemu b/quickemu index 2606407..c4eb32a 100755 --- a/quickemu +++ b/quickemu @@ -464,7 +464,7 @@ function vm_boot() { # Make any OS specific adjustments case ${guest_os} in - *bsd|haiku|freedos|linux) + batocera|*bsd|freedos|haiku|linux) CPU="-cpu host,kvm=on" if [ "${HOST_CPU_VENDOR}" == "AuthenticAMD" ]; then CPU="${CPU},topoext" @@ -472,7 +472,7 @@ function vm_boot() { if [ "${guest_os}" == "freebsd" ] || [ "${guest_os}" == "ghostbsd" ]; then MOUSE="usb" - elif [ "${guest_os}" == "haiku" ] || [ "${guest_os}" == "freedos" ]; then + elif [ "${guest_os}" == "batocera" ] || [ "${guest_os}" == "freedos" ] || [ "${guest_os}" == "haiku" ]; then MACHINE_TYPE="pc" NET_DEVICE="rtl8139" fi @@ -482,35 +482,23 @@ function vm_boot() { SMM="on" fi - if [ -z "${disk_size}" ]; then disk_size="16G" fi ;; - batocera) - CPU="-cpu host,kvm=on" - if [ "${HOST_CPU_VENDOR}" == "AuthenticAMD" ]; then - CPU="${CPU},topoext" - fi - MACHINE_TYPE="pc" - NET_DEVICE="rtl8139" - disk_size="8G" - ;; - kolibrios) + kolibrios|reactos) CPU="-cpu qemu32,kvm=on" if [ "${HOST_CPU_VENDOR}" == "AuthenticAMD" ]; then CPU="${CPU},topoext" fi MACHINE_TYPE="pc" - NET_DEVICE="rtl8139" - ;; - reactos) - CPU="-cpu qemu32,kvm=on" - if [ "${HOST_CPU_VENDOR}" == "AuthenticAMD" ]; then - CPU="${CPU},topoext" - fi - MACHINE_TYPE="pc" - NET_DEVICE="e1000" + case ${guest_os} in + kolibrios) NET_DEVICE="rtl8139";; + reactos) + NET_DEVICE="e1000" + KEYBOARD="ps2" + ;; + esac ;; macos) #https://www.nicksherlock.com/2020/06/installing-macos-big-sur-on-proxmox/ diff --git a/quickget b/quickget index 4b93db3..0dd1d7d 100755 --- a/quickget +++ b/quickget @@ -759,8 +759,12 @@ EOF # OS specific tweaks case ${OS} in - alma|centos-stream|oraclelinux|rockylinux) echo "disk_size=\"32G\"" >> "${CONF_FILE}";; - dragonflybsd|haiku|openbsd|netbsd|slackware|tails) echo "boot=\"legacy\"" >> "${CONF_FILE}";; + alma|centos-stream|oraclelinux|rockylinux) + echo "disk_size=\"32G\"" >> "${CONF_FILE}";; + batocera) + echo "disk_size=\"8G\"" >> "${CONF_FILE}";; + dragonflybsd|haiku|openbsd|netbsd|slackware|tails) + echo "boot=\"legacy\"" >> "${CONF_FILE}";; deepin) echo "disk_size=\"64G\"" >> "${CONF_FILE}" echo "ram=\"4G\"" >> "${CONF_FILE}" From 02e0a9e55a04b51aa950701eb3d5e0ae31ba13ae Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 17:17:58 +0100 Subject: [PATCH 71/92] Document how to enable audio in macOS guests. Close #337 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3125723..11cb154 100644 --- a/README.md +++ b/README.md @@ -382,8 +382,8 @@ There are some considerations when running macOS via Quickemu. - UHCI (USB 2.0) on macOS Catalina and earlier. - XHCI (USB 3.0) on macOS Big Sur and newer. - Display resolution can only be changed via macOS System Preferences. -- Full Duplex audio works on macOS High Sierra, Mojave and Catalina. - - **macOS Big Sur and Monterey have no audio at all**. +- **Full Duplex audio requires [VoodooHDA OC](https://github.com/chris1111/VoodooHDA-OC) or pass-through a USB audio-device to the macOS guest VM**. + - NOTE! [Gatekeeper](https://disable-gatekeeper.github.io/) and [System Integrity Protection (SIP)](https://developer.apple.com/documentation/security/disabling_and_enabling_system_integrity_protection) need to be disabled to install VoodooHDA OC - File sharing between guest and host is available via [virtio-9p](https://wiki.qemu.org/Documentation/9psetup) and [SPICE webdavd](https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24). From 2071816ede19fd51109f20d99d2fff7481f85d90 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 17:20:06 +0100 Subject: [PATCH 72/92] Add initial support for macOS Ventura --- quickemu | 31 ++++++++++++++++++++++--------- quickget | 2 ++ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/quickemu b/quickemu index c4eb32a..0d6e6d2 100755 --- a/quickemu +++ b/quickemu @@ -503,14 +503,27 @@ function vm_boot() { macos) #https://www.nicksherlock.com/2020/06/installing-macos-big-sur-on-proxmox/ # A CPU with SSE4.1 support is required for >= macOS Sierra - if check_cpu_flag sse4_1; then - # Used in past versions: +movbe,+smep,+xgetbv1,+xsavec,+avx2 - # Warn on AMD: +fma4,+pcid - CPU="-cpu Penryn,kvm=on,vendor=GenuineIntel,+aes,+avx,+bmi1,+bmi2,+fma,+hypervisor,+invtsc,+kvm_pv_eoi,+kvm_pv_unhalt,+popcnt,+ssse3,+sse4.2,vmware-cpuid-freq=on,+xsave,+xsaveopt,check" - else - echo "ERROR! macOS requires a CPU with SSE 4.1 support." - exit 1 - fi + # A CPU with AVX2 support is required for >= macOS Ventura + case ${macos_release} in + ventura) + if check_cpu_flag sse4_1 && check_cpu_flag avx2; then + CPU="-cpu Haswell,kvm=on,vendor=GenuineIntel,+hypervisor,+invtsc,+kvm_pv_eoi,+kvm_pv_unhalt" + else + echo "ERROR! macOS ${macos_release} requires a CPU with SSE 4.1 and AVX2 support." + exit 1 + fi + ;; + *) + if check_cpu_flag sse4_1; then + # Used in past versions: +movbe,+smep,+xgetbv1,+xsavec,+avx2 + # Warn on AMD: +fma4,+pcid + CPU="-cpu Penryn,kvm=on,vendor=GenuineIntel,+aes,+avx,+bmi1,+bmi2,+fma,+hypervisor,+invtsc,+kvm_pv_eoi,+kvm_pv_unhalt,+popcnt,+ssse3,+sse4.2,vmware-cpuid-freq=on,+xsave,+xsaveopt,check" + else + echo "ERROR! macOS ${macos_release} requires a CPU with SSE 4.1 support." + exit 1 + fi + ;; + esac OSK=$(echo "bheuneqjbexolgurfrjbeqfthneqrqcyrnfrqbagfgrny(p)NccyrPbzchgreVap" | tr 'A-Za-z' 'N-ZA-Mn-za-m') # Disable S3 support in the VM to prevent macOS suspending during install @@ -529,7 +542,7 @@ function vm_boot() { NET_DEVICE="vmxnet3" USB_HOST_PASSTHROUGH_CONTROLLER="usb-ehci" ;; - big-sur|monterey) + big-sur|monterey|ventura) BALLOON="-device virtio-balloon" MAC_DISK_DEV="virtio-blk-pci" NET_DEVICE="virtio-net" diff --git a/quickget b/quickget index 0dd1d7d..ea21f06 100755 --- a/quickget +++ b/quickget @@ -1164,6 +1164,7 @@ function get_macos() { local CWD="" local MACRECOVERY="" local MLB="" + local OS_TYPE="default" case ${RELEASE} in high-sierra) @@ -1214,6 +1215,7 @@ function get_macos() { ${MACRECOVERY} \ --board-id "${BOARD_ID}" \ --mlb "${MLB}" \ + --os-type "${OS_TYPE}" \ --basename RecoveryImage \ --outdir "${VM_PATH}" \ download From 9b5a6a44acf2690952008cd5225d1911d5ae3b25 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 17:33:50 +0100 Subject: [PATCH 73/92] Ensure only one scanout is present. Ref #222 Run QEMU with '-vga none' to avoid having two scanouts, one for VGA and another for virtio-vga-gl. - Workaround for a GTK assertion failure in gtk_widget_get_realized(). - Allows seamless mouse in macOS when using the qxl-vga device. - Enables sane default resolutions in all support macOS versions. --- quickemu | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/quickemu b/quickemu index 0d6e6d2..7030280 100755 --- a/quickemu +++ b/quickemu @@ -234,6 +234,7 @@ function vm_boot() { local OSK="" local SMM="${SMM:-off}" local USB_HOST_PASSTHROUGH_CONTROLLER="qemu-xhci" + local VGA="" local VIDEO="" KERNEL_NAME=$(uname --kernel-name) @@ -707,12 +708,9 @@ function vm_boot() { *) DISPLAY_DEVICE="virtio-vga";; esac elif [ "${guest_os}" == "macos" ]; then - # Displays in System Preferences can be used to select a resolution if: - # - Mojave only offers 4:3 resolutions - # - High Sierra will run at the default 1920x1080 only. - # QXL prevents seamless mouse working with a SPICE client - # - https://github.com/wimpysworld/quickemu/issues/222 - DISPLAY_DEVICE="VGA" + # qxl-vga supports seamless mouse and sane resolutions if only one scanout + # is used. Which is whay '-vga none' is added to the QEMU command line. + DISPLAY_DEVICE="qxl-vga" elif [ "${guest_os}" == "windows" ]; then DISPLAY_DEVICE="qxl-vga" else @@ -775,8 +773,15 @@ function vm_boot() { VIDEO="${VIDEO},max_outputs=${max_outputs}" fi + # Run QEMU with '-vga none' to avoid having two scanouts, one for VGA and + # another for virtio-vga-gl. This works around a GTK assertion failure and + # allows seamless mouse in macOS when using the qxl-vga device. + # https://www.collabora.com/news-and-blog/blog/2021/11/26/venus-on-qemu-enabling-new-virtual-vulkan-driver/ + # https://github.com/quickemu-project/quickemu/issues/222 + VGA="-vga none" + # Add fullscreen options - VIDEO="${VIDEO} ${FULLSCREEN}" + VIDEO="${VGA} ${VIDEO} ${FULLSCREEN}" # Set the hostname of the VM local NET="user,hostname=${VMNAME}" From d0a59e161df730e4f395e616d88b879ca9677277 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 17:35:08 +0100 Subject: [PATCH 74/92] Configure audio device to best match the display --- quickemu | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/quickemu b/quickemu index 7030280..b99aa90 100755 --- a/quickemu +++ b/quickemu @@ -662,8 +662,9 @@ function vm_boot() { # Setup the appropriate audio device based on the display output case ${OUTPUT} in - spice|spice-app|none) AUDIO_DEV="spice,id=audio0";; - *) AUDIO_DEV="pa,id=audio0,out.mixing-engine=off,out.stream-name=${LAUNCHER}-${VMNAME},in.stream-name=${LAUNCHER}-${VMNAME}";; + none|spice|spice-app) AUDIO_DEV="spice,id=audio0";; + sdl) AUDIO_DEV="sdl,id=audio0";; + *) AUDIO_DEV="pa,id=audio0";; esac # Determine a sane resolution for Linux guests. From d94f0403c2e9912ca533964c2a5c5ed22c6c7b60 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 17:39:13 +0100 Subject: [PATCH 75/92] Consolidate macOS BOARD_IDs and MLBs --- quickget | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/quickget b/quickget index ea21f06..d1cb7d5 100755 --- a/quickget +++ b/quickget @@ -1163,7 +1163,7 @@ function get_macos() { local BOARD_ID="" local CWD="" local MACRECOVERY="" - local MLB="" + local MLB="00000000000000000" local OS_TYPE="default" case ${RELEASE} in @@ -1174,11 +1174,10 @@ function get_macos() { BOARD_ID="Mac-7BA5B2DFE22DDD8C" MLB="00000000000KXPG00";; catalina) - BOARD_ID="Mac-CFF7D910A743CAAF" + BOARD_ID="Mac-C3EC7CD22292981F" MLB="00000000000PHCD00";; big-sur) - BOARD_ID="Mac-35C1E88140C3E6CF" - MLB="00000000000000000";; + BOARD_ID="Mac-3CBD00234E554E41";; monterey) BOARD_ID="Mac-06F11F11946D27C5" MLB="00000000000000000";; From 55384b70b76efd37c970652b4279854db3c46133 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 17:40:22 +0100 Subject: [PATCH 76/92] White space and comments --- quickemu | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/quickemu b/quickemu index b99aa90..f0b1e8c 100755 --- a/quickemu +++ b/quickemu @@ -928,7 +928,6 @@ function vm_boot() { -device ccid-card-passthru,chardev=ccid ) - # setup usb-controller [ -z "${USB_CONTROLLER}" ] && USB_CONTROLLER="$usb_controller" if [ "${USB_CONTROLLER}" == "ehci" ]; then @@ -1014,8 +1013,8 @@ function vm_boot() { args+=(-drive media=cdrom,index=2,file="${iso}") iso="" elif [ -n "${iso}" ] && [ "${guest_os}" == "reactos" ]; then - # shellcheck disable=SC2054 # https://reactos.org/wiki/QEMU + # shellcheck disable=SC2054 args+=(-boot order=d -drive if=ide,index=2,media=cdrom,file="${iso}") iso="" @@ -1069,8 +1068,8 @@ function vm_boot() { -drive id=SystemDisk,if=none,format=qcow2,file="${disk_img}" ${STATUS_QUO}) elif [ "${guest_os}" == "reactos" ]; then - # shellcheck disable=SC2054,SC2206 # https://reactos.org/wiki/QEMU + # shellcheck disable=SC2054,SC2206 args+=(-drive if=ide,index=0,media=disk,file="${disk_img}") else From 92f3466d08378d2e1447a1d8ba1174c440d7d967 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 17:40:57 +0100 Subject: [PATCH 77/92] Make shellcheck happy --- quickemu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickemu b/quickemu index f0b1e8c..238a0d9 100755 --- a/quickemu +++ b/quickemu @@ -789,7 +789,7 @@ function vm_boot() { echo -n "" > "${VMDIR}/${VMNAME}.ports" - if [ -z "$SSH_PORT" ]; then + if [ -z "${SSH_PORT}" ]; then # Find a free port to expose ssh to the guest SSH_PORT=$(get_port 22220 9) fi From c22d0355b927296bc43be26299f94d184e446c29 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 17:42:58 +0100 Subject: [PATCH 78/92] Refactor Display: status message --- quickemu | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/quickemu b/quickemu index 238a0d9..f6c5270 100755 --- a/quickemu +++ b/quickemu @@ -718,8 +718,6 @@ function vm_boot() { DISPLAY_DEVICE="qxl-vga" fi - echo -n " - Display: ${OUTPUT^^}, ${DISPLAY_DEVICE}" - # Map Quickemu OUTPUT to QEMU -display case ${OUTPUT} in gtk) @@ -749,9 +747,9 @@ function vm_boot() { else DISPLAY_DEVICE="${DISPLAY_DEVICE},virgl=on" fi - echo ", GL (${gl}), VirGL (on)" + echo " - Display: ${OUTPUT^^}, ${DISPLAY_DEVICE}, GL (${gl}), VirGL (on)" else - echo ", GL (${gl}), VirGL (off)" + echo " - Display: ${OUTPUT^^}, ${DISPLAY_DEVICE}, GL (${gl}), VirGL (off)" fi # Build the video configuration From b6dbfcbc3534b71a7cd578298261631c05796d1f Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 17:48:26 +0100 Subject: [PATCH 79/92] Optimise GPU acceleration for Linux guests --- quickemu | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/quickemu b/quickemu index f6c5270..3092ebb 100755 --- a/quickemu +++ b/quickemu @@ -705,8 +705,10 @@ function vm_boot() { # https://www.kraxel.org/blog/2019/09/display-devices-in-qemu/ if [ "${guest_os}" == "linux" ]; then case ${OUTPUT} in - none|spice) DISPLAY_DEVICE="qxl-vga";; - *) DISPLAY_DEVICE="virtio-vga";; + none|spice|spice-app) + DISPLAY_DEVICE="virtio-gpu";; + *) + DISPLAY_DEVICE="virtio-vga";; esac elif [ "${guest_os}" == "macos" ]; then # qxl-vga supports seamless mouse and sane resolutions if only one scanout @@ -741,7 +743,8 @@ function vm_boot() { DISPLAY_RENDER="${OUTPUT},gl=${gl}";; esac - if [ "${gl}" == "on" ] && [[ "${DISPLAY_DEVICE}" == *"virtio"* ]]; then + # https://www.kraxel.org/blog/2021/05/virtio-gpu-qemu-graphics-update/ + if [ "${gl}" == "on" ] && [ "${DISPLAY_DEVICE}" == "virtio-vga" ]; then if [ "${QEMU_VER_SHORT}" -ge 61 ]; then DISPLAY_DEVICE="${DISPLAY_DEVICE}-gl" else From eba2d52ba026fa2e69f904cd27e223bdcc4b3de2 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 17:49:08 +0100 Subject: [PATCH 80/92] Optimise GPU acceleration for Windows guests --- quickemu | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/quickemu b/quickemu index 3092ebb..7a259be 100755 --- a/quickemu +++ b/quickemu @@ -715,7 +715,12 @@ function vm_boot() { # is used. Which is whay '-vga none' is added to the QEMU command line. DISPLAY_DEVICE="qxl-vga" elif [ "${guest_os}" == "windows" ]; then - DISPLAY_DEVICE="qxl-vga" + case ${OUTPUT} in + # virtio-gpu "works" with gtk but is limited to 1024x1024 and exhibits other issues. + # https://kevinlocke.name/bits/2021/12/10/windows-11-guest-virtio-libvirt/#video + gtk|none|spice) DISPLAY_DEVICE="qxl-vga";; + sdl|spice-app) DISPLAY_DEVICE="virtio-vga";; + esac else DISPLAY_DEVICE="qxl-vga" fi From 1b151955b0bc467452445c5b9acf528fb3c359bd Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 17:49:59 +0100 Subject: [PATCH 81/92] Refactor DISPLAY_RENDERER configuration --- quickemu | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/quickemu b/quickemu index 7a259be..4a4a9bd 100755 --- a/quickemu +++ b/quickemu @@ -727,25 +727,11 @@ function vm_boot() { # Map Quickemu OUTPUT to QEMU -display case ${OUTPUT} in - gtk) - DISPLAY_RENDER="${OUTPUT},grab-on-hover=on,zoom-to-fit=off" - # GL is not working with GTK and virtio-vga - if [ "${DISPLAY_DEVICE}" == "virtio-vga" ]; then - gl="off" - fi - ;; - none|spice) - DISPLAY_RENDER="none";; - # spice-app has a bug where using spice-app,gl=off seems to enable gl, but - # if the gl param is omitted it works fine. - spice-app) - DISPLAY_RENDER="${OUTPUT}" - if [[ "${gl}" == "on" ]]; then - DISPLAY_RENDER+=",gl=on" - fi - ;; - *) - DISPLAY_RENDER="${OUTPUT},gl=${gl}";; + gtk) DISPLAY_RENDER="${OUTPUT},grab-on-hover=on,zoom-to-fit=off,gl=${gl}";; + none|spice) DISPLAY_RENDER="none";; + sdl) DISPLAY_RENDER="${OUTPUT},gl=${gl}";; + spice-app) DISPLAY_RENDER="${OUTPUT},gl=${gl}";; + *) DISPLAY_RENDER="${OUTPUT}";; esac # https://www.kraxel.org/blog/2021/05/virtio-gpu-qemu-graphics-update/ From 0ee102dc4badeb02046495cdd44a6b6f298cd4a5 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 17:56:39 +0100 Subject: [PATCH 82/92] Do not enable SPICE when GTK or SDL are the selected display. Fixes #466 QEMU 7.0 introduces a change/regression where it is not possible to use GL accerlation via GTK/SDL displays and also bring up SPICE: https://gitlab.com/qemu-project/qemu/-/issues/1036 This patch prevents Quickemu from bringing up SPICE when GTK or SDK are selected as the display. --- quickemu | 97 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 56 insertions(+), 41 deletions(-) diff --git a/quickemu b/quickemu index 4a4a9bd..cc2ab7e 100755 --- a/quickemu +++ b/quickemu @@ -806,42 +806,52 @@ function vm_boot() { done fi - local SPICE="disable-ticketing=on" - if [ -z "${SPICE_PORT}" ]; then - # Find a free port for spice - SPICE_PORT=$(get_port 5930 9) + if [ "${OUTPUT}" == "none" ] || [ "${OUTPUT}" == "spice" ] || [ "${OUTPUT}" == "spice-app" ]; then + local SPICE="disable-ticketing=on" + # gl=on can be use with 'spice' too, but only over local connections (not tcp ports) + if [ "${OUTPUT}" == "spice-app" ]; then + SPICE+=",gl=${gl}" + fi + + # TODO: Don't use ports so local-only connections can be used with gl=on + if [ -z "${SPICE_PORT}" ]; then + # Find a free port for spice + SPICE_PORT=$(get_port 5930 9) + fi + + if [ -z "${SPICE_PORT}" ]; then + echo " - SPICE: All SPICE ports have been exhausted." + if [ "${OUTPUT}" == "none" ] || [ "${OUTPUT}" == "spice" ] || [ "${OUTPUT}" == "spice-app" ]; then + echo " ERROR! Requested SPICE display, but no SPICE ports are free." + exit 1 + fi + else + if [ "${OUTPUT}" == "spice-app" ]; then + echo " - SPICE: Enabled" + else + echo "spice,${SPICE_PORT}" >> "${VMDIR}/${VMNAME}.ports" + echo -n " - SPICE: On host: spicy --title \"${VMNAME}\" --port ${SPICE_PORT}" + if [ "${guest_os}" != "macos" ] && [ -n "${PUBLIC}" ]; then + echo -n " --spice-shared-dir ${PUBLIC}" + fi + echo "${FULLSPICY}" + SPICE="${SPICE},port=${SPICE_PORT},addr=127.0.0.1" + fi + fi fi - if [ -z "${SPICE_PORT}" ]; then - echo " - SPICE: All SPICE ports have been exhausted." - if [ "${OUTPUT}" == "none" ] || [ "${OUTPUT}" == "spice" ] || [ "${OUTPUT}" == "spice-app" ]; then - echo " ERROR! Requested SPICE display, but no SPICE ports are free." - exit 1 - fi - else - if [ "${OUTPUT}" == "spice-app" ]; then - echo " - SPICE: Enabled" - else - echo "spice,${SPICE_PORT}" >> "${VMDIR}/${VMNAME}.ports" - echo -n " - SPICE: On host: spicy --title \"${VMNAME}\" --port ${SPICE_PORT}" - if [ "${guest_os}" != "macos" ] && [ -n "${PUBLIC}" ]; then - echo -n " --spice-shared-dir ${PUBLIC}" - fi - echo "${FULLSPICY}" - SPICE="${SPICE},port=${SPICE_PORT},addr=127.0.0.1" - fi - - if [ -n "${PUBLIC}" ]; then - case ${guest_os} in - macos) + if [ -n "${PUBLIC}" ]; then + case ${guest_os} in + macos) + if [ "${OUTPUT}" == "none" ] || [ "${OUTPUT}" == "spice" ] || [ "${OUTPUT}" == "spice-app" ]; then # Reference: https://gitlab.gnome.org/GNOME/phodav/-/issues/5 echo " - WebDAV: On guest: build spice-webdavd (https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24)" echo " - WebDAV: On guest: Finder -> Connect to Server -> http://localhost:9843/" - ;; - *) - echo " - WebDAV: On guest: dav://localhost:9843/";; - esac - fi + fi + ;; + *) + echo " - WebDAV: On guest: dav://localhost:9843/";; + esac fi if [ "${guest_os}" != "windows" ] && [ -n "${PUBLIC}" ]; then @@ -896,16 +906,21 @@ function vm_boot() { ${VIDEO} -display ${DISPLAY_RENDER} -audiodev ${AUDIO_DEV} -device intel-hda -device hda-duplex,audiodev=audio0 - -rtc base=localtime,clock=host,driftfix=slew - -spice ${SPICE} - -device virtio-serial-pci - -chardev socket,id=agent0,path="${VMDIR}/${VMNAME}-agent.sock",server=on,wait=off - -device virtserialport,chardev=agent0,name=org.qemu.guest_agent.0 - -chardev spicevmc,id=vdagent0,name=vdagent - -device virtserialport,chardev=vdagent0,name=com.redhat.spice.0 - -chardev spiceport,id=webdav0,name=org.spice-space.webdav.0 - -device virtserialport,chardev=webdav0,name=org.spice-space.webdav.0 - -device virtio-rng-pci,rng=rng0 + -rtc base=localtime,clock=host,driftfix=slew) + + # Only enable SPICE is using SPICE display + if [ "${OUTPUT}" == "none" ] || [ "${OUTPUT}" == "spice" ] || [ "${OUTPUT}" == "spice-app" ]; then + args+=(-spice ${SPICE} + -device virtio-serial-pci + -chardev socket,id=agent0,path="${VMDIR}/${VMNAME}-agent.sock",server=on,wait=off + -device virtserialport,chardev=agent0,name=org.qemu.guest_agent.0 + -chardev spicevmc,id=vdagent0,name=vdagent + -device virtserialport,chardev=vdagent0,name=com.redhat.spice.0 + -chardev spiceport,id=webdav0,name=org.spice-space.webdav.0 + -device virtserialport,chardev=webdav0,name=org.spice-space.webdav.0) + fi + + args+=(-device virtio-rng-pci,rng=rng0 -object rng-random,id=rng0,filename=/dev/urandom -device ${USB_HOST_PASSTHROUGH_CONTROLLER},id=spicepass -chardev spicevmc,id=usbredirchardev1,name=usbredir From c1c9aacaa8875f16ce232c0c25d4b6a0093db866 Mon Sep 17 00:00:00 2001 From: Robin Edser <75099866+fossrob@users.noreply.github.com> Date: Fri, 19 Aug 2022 07:14:22 +0100 Subject: [PATCH 83/92] Small README Typo in first example Very subtle but important typo. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 11cb154..0542395 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ way to do it for you. For example: ``` bash quickget ubuntu-mate 22.04 -quickemu --vm ubuntu-mate-22.04-.conf +quickemu --vm ubuntu-mate-22.04.conf ``` The original objective of the project was to enable quick testing of From ae57996d54f61024bd9f1ec53ec718d5d53f8a3f Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 18:47:38 +0100 Subject: [PATCH 84/92] Configure network via VM configuration file. Fixes #478 #418 --- README.md | 20 +++++++++++++++++++- quickemu | 21 ++++++++++++++++++--- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0542395..b3c7254 100644 --- a/README.md +++ b/README.md @@ -603,12 +603,30 @@ In the example above: - Port 8123 on the host is forwarded to port 8123 on the guest. - Port 8888 on the host is forwarded to port 80 on the guest. +# Disable networking + +To completely disable all network interfaces in a guest VM add this additional +line to your virtual machine configuration: + +- `network="none"` + +# Restricted networking + +You can isolate the guest from the host (and broader network) using the restrict +option, which will restrict networking to just the guest and any virtual devices. + +This can be used to prevent software running inside the guest from phoning home +while still providing a network inside the guest. Add this additional line to +your virtual machine configuration: + +- `network="restrict"` + # Bridged networking Connect your virtual machine to a preconfigured network bridge. Add an additional line to your virtual machine configuration -- `bridge="br0"` +- `network="br0"` # USB redirection diff --git a/quickemu b/quickemu index cc2ab7e..aa91577 100755 --- a/quickemu +++ b/quickemu @@ -992,11 +992,26 @@ function vm_boot() { echo "WARNING! Unknown mouse value: '${MOUSE}; Fallback to ps2'" fi + # $bridge backwards compatibility for Quickemu <= 4.0 if [ -n "${bridge}" ]; then - # Enable bridge mode networking + network="${bridge}" + fi + + if [ "${network}" == "none" ]; then + # Disbale all networking + echo " - Network: Disabled" + args+=(-nic none) + elif [ "${network}" == "restrict" ]; then + echo " - Network: Restricted (${NET_DEVICE})" # shellcheck disable=SC2054,SC2206 - args+=(-nic bridge,br=${bridge},model=virtio-net-pci) + args+=(-device ${NET_DEVICE},netdev=nic -netdev ${NET},restrict=y,id=nic) + elif [ -n "${network}" ]; then + # Enable bridge mode networking + echo " - Network: Bridged (${network})" + # shellcheck disable=SC2054,SC2206 + args+=(-nic bridge,br=${network},model=virtio-net-pci) else + echo " - Network: User (${NET_DEVICE})" # shellcheck disable=SC2054,SC2206 args+=(-device ${NET_DEVICE},netdev=nic -netdev ${NET},id=nic) fi @@ -1394,7 +1409,6 @@ function monitor_send_cmd { # Lowercase variables are used in the VM config file only boot="efi" -bridge="" cpu_cores="" disk_img="" disk_size="" @@ -1405,6 +1419,7 @@ guest_os="linux" img="" iso="" macos_release="" +network="" port_forwards=() preallocation="off" ram="" From d669c4ca2ab8b3da552d72f073b0d2580c9945c1 Mon Sep 17 00:00:00 2001 From: Phil Clifford <philip.clifford@gmail.com> Date: Tue, 22 Feb 2022 01:51:34 +0000 Subject: [PATCH 85/92] parent ef4ca6b6768c0ae4bc19055b7c59f23816510be3 author Phil Clifford <philip.clifford@gmail.com> 1645494694 +0000 committer Phil Clifford <philip.clifford@gmail.com> 1645926095 +0000 rebasing upstream while trying to keep up --- README.md | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index b3c7254..b7899c1 100644 --- a/README.md +++ b/README.md @@ -31,17 +31,13 @@ Windows**. - **macOS** Monterey, Big Sur, Catalina, Mojave & High Sierra - **Windows** 8.1, 10 and 11 including TPM 2.0 -- [Ubuntu](https://ubuntu.com/desktop) and all the **[official Ubuntu - flavours](https://ubuntu.com/download/flavours)** +- [Ubuntu](https://ubuntu.com/desktop) and all the **[official Ubuntu flavours](https://ubuntu.com/download/flavours)** - **Over 360 operating system editions are supported!** - Full SPICE support including host/guest clipboard sharing - VirtIO-webdavd file sharing for Linux and Windows guests - VirtIO-9p file sharing for Linux and macOS guests -- [QEMU Guest Agent - support](https://wiki.qemu.org/Features/GuestAgent); provides access - to a system-level agent via standard QMP commands -- Samba file sharing for Linux, macOS and Windows guests (*if `smbd` - is installed on the host*) +- [QEMU Guest Agent support](https://wiki.qemu.org/Features/GuestAgent); provides access to a system-level agent via standard QMP commands +- Samba file sharing for Linux, macOS and Windows guests (*if `smbd` is installed on the host*) - VirGL acceleration - USB device pass-through - Smartcard pass-through @@ -67,8 +63,7 @@ QEMU](https://img.youtube.com/vi/AOTYWEgw0hI/0.jpg)](https://www.youtube.com/wat ## Requirements -- [QEMU](https://www.qemu.org/) (*6.0.0 or newer*) **with GTK, SDL, - SPICE & VirtFS support** +- [QEMU](https://www.qemu.org/) (*6.0.0 or newer*) **with GTK, SDL, SPICE & VirtFS support** - [bash](https://www.gnu.org/software/bash/) (*4.0 or newer*) - [Coreutils](https://www.gnu.org/software/coreutils/) - [EDK II](https://github.com/tianocore/edk2) @@ -272,7 +267,7 @@ with your preferred flavour. - `popos` (Pop!\_OS) - `regolith` (Regolith Linux) - `rockylinux` (Rocky Linux) -- `slackware` (Slackware) +- `slackware` (Slackware Linux) - `solus` (Solus) - `tails` (Tails) - `void` (Void Linux) From 8bb24f69c0f795d41fe46f6e31ddde692aa1d4f5 Mon Sep 17 00:00:00 2001 From: Phil Clifford <philip.clifford@gmail.com> Date: Fri, 19 Aug 2022 20:10:21 +0100 Subject: [PATCH 86/92] Updated for commits direct to README --- README.md | 125 ++++++++++++++++++++++------------------ build-docs | 2 +- docs/quickemu.1 | 43 +++++++++++--- docs/quickemu.1.md | 37 +++++++++--- docs/quickemu_conf.1 | 23 +++++++- docs/quickemu_conf.1.md | 23 +++++++- docs/quickget.1 | 37 ++++++++++-- docs/quickget.1.md | 28 ++++++++- 8 files changed, 228 insertions(+), 90 deletions(-) diff --git a/README.md b/README.md index b7899c1..798b281 100644 --- a/README.md +++ b/README.md @@ -31,13 +31,17 @@ Windows**. - **macOS** Monterey, Big Sur, Catalina, Mojave & High Sierra - **Windows** 8.1, 10 and 11 including TPM 2.0 -- [Ubuntu](https://ubuntu.com/desktop) and all the **[official Ubuntu flavours](https://ubuntu.com/download/flavours)** +- [Ubuntu](https://ubuntu.com/desktop) and all the **[official Ubuntu + flavours](https://ubuntu.com/download/flavours)** - **Over 360 operating system editions are supported!** - Full SPICE support including host/guest clipboard sharing - VirtIO-webdavd file sharing for Linux and Windows guests - VirtIO-9p file sharing for Linux and macOS guests -- [QEMU Guest Agent support](https://wiki.qemu.org/Features/GuestAgent); provides access to a system-level agent via standard QMP commands -- Samba file sharing for Linux, macOS and Windows guests (*if `smbd` is installed on the host*) +- [QEMU Guest Agent + support](https://wiki.qemu.org/Features/GuestAgent); provides access + to a system-level agent via standard QMP commands +- Samba file sharing for Linux, macOS and Windows guests (*if `smbd` + is installed on the host*) - VirGL acceleration - USB device pass-through - Smartcard pass-through @@ -63,7 +67,8 @@ QEMU](https://img.youtube.com/vi/AOTYWEgw0hI/0.jpg)](https://www.youtube.com/wat ## Requirements -- [QEMU](https://www.qemu.org/) (*6.0.0 or newer*) **with GTK, SDL, SPICE & VirtFS support** +- [QEMU](https://www.qemu.org/) (*6.0.0 or newer*) **with GTK, SDL, + SPICE & VirtFS support** - [bash](https://www.gnu.org/software/bash/) (*4.0 or newer*) - [Coreutils](https://www.gnu.org/software/coreutils/) - [EDK II](https://github.com/tianocore/edk2) @@ -265,9 +270,10 @@ with your preferred flavour. - `opensuse` (openSUSE) - `oraclelinux` (Oracle Linux) - `popos` (Pop!\_OS) +- `reactos` (ReactOS) - `regolith` (Regolith Linux) - `rockylinux` (Rocky Linux) -- `slackware` (Slackware Linux) +- `slackware` (Slackware) - `solus` (Solus) - `tails` (Tails) - `void` (Void Linux) @@ -377,8 +383,13 @@ There are some considerations when running macOS via Quickemu. - UHCI (USB 2.0) on macOS Catalina and earlier. - XHCI (USB 3.0) on macOS Big Sur and newer. - Display resolution can only be changed via macOS System Preferences. -- **Full Duplex audio requires [VoodooHDA OC](https://github.com/chris1111/VoodooHDA-OC) or pass-through a USB audio-device to the macOS guest VM**. - - NOTE! [Gatekeeper](https://disable-gatekeeper.github.io/) and [System Integrity Protection (SIP)](https://developer.apple.com/documentation/security/disabling_and_enabling_system_integrity_protection) need to be disabled to install VoodooHDA OC +- **Full Duplex audio requires [VoodooHDA + OC](https://github.com/chris1111/VoodooHDA-OC) or pass-through a USB + audio-device to the macOS guest VM**. +- NOTE! [Gatekeeper](https://disable-gatekeeper.github.io/) and + [System Integrity Protection + (SIP)](https://developer.apple.com/documentation/security/disabling_and_enabling_system_integrity_protection) + need to be disabled to install VoodooHDA OC - File sharing between guest and host is available via [virtio-9p](https://wiki.qemu.org/Documentation/9psetup) and [SPICE webdavd](https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24). @@ -386,15 +397,15 @@ There are some considerations when running macOS via Quickemu. ### macOS App Store -If you see *"Your device or computer could not be verified"* when you try to -login to the App Store, make sure that your wired ethernet device is `en0`. Use -`ifconfig` in a terminal to verify this. +If you see *"Your device or computer could not be verified"* when you +try to login to the App Store, make sure that your wired ethernet device +is `en0`. Use `ifconfig` in a terminal to verify this. -If the wired ethernet device is not `en0`, then then go to *System Preferences* -> *Network*, -delete all the network devices and apply the changes. Next, open a terminal and -run the following: +If the wired ethernet device is not `en0`, then then go to *System +Preferences* -\> *Network*, delete all the network devices and apply the +changes. Next, open a terminal and run the following: -```bash +``` bash sudo rm /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist ``` @@ -600,19 +611,20 @@ In the example above: # Disable networking -To completely disable all network interfaces in a guest VM add this additional -line to your virtual machine configuration: +To completely disable all network interfaces in a guest VM add this +additional line to your virtual machine configuration: - `network="none"` # Restricted networking -You can isolate the guest from the host (and broader network) using the restrict -option, which will restrict networking to just the guest and any virtual devices. +You can isolate the guest from the host (and broader network) using the +restrict option, which will restrict networking to just the guest and +any virtual devices. -This can be used to prevent software running inside the guest from phoning home -while still providing a network inside the guest. Add this additional line to -your virtual machine configuration: +This can be used to prevent software running inside the guest from +phoning home while still providing a network inside the guest. Add this +additional line to your virtual machine configuration: - `network="restrict"` @@ -680,46 +692,45 @@ import cog # cannot use check_result() because of non-zero return result=subprocess.run(["./quickemu", "--help"], capture_output=True, text=True) help=result.stdout -cog.out(f"```\n\n{help}\n\n```\n\n") +cog.out(f"\n```\n{help}\n```\n") ]]] --> + ``` +Usage + quickemu --vm ubuntu.conf - Usage - quickemu --vm ubuntu.conf - - You can also pass optional parameters - --braille : Enable braille support. Requires SDL. - --delete-disk : Delete the disk image and EFI variables - --delete-vm : Delete the entire VM and it's configuration - --display : Select display backend. 'sdl' (default), 'gtk', 'none', 'spice' or 'spice-app' - --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit) - --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers - --screen <screen> : Use specified screen to determine the window size. - --shortcut : Create a desktop shortcut - --snapshot apply <tag> : Apply/restore a snapshot. - --snapshot create <tag> : Create a snapshot. - --snapshot delete <tag> : Delete a snapshot. - --snapshot info : Show disk/snapshot info. - --status-quo : Do not commit any changes to disk/snapshot. - --viewer <viewer> : Choose an alternative viewer. @Options: 'spicy' (default), 'remote-viewer', 'none' - --ssh-port <port> : Set ssh-port manually - --spice-port <port> : Set spice-port manually - --public-dir <path> : expose share directory. @Options: '' (default: xdg-user-dir PUBLICSHARE), '<directory>', 'none' - --monitor <type> : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none' - --monitor-telnet-host <ip/host> : Set telnet host for monitor. (default: 'localhost') - --monitor-telnet-port <port> : Set telnet port for monitor. (default: '4440') - --monitor-cmd <cmd> : Send command to monitor if available. (Example: system_powerdown) - --serial <type> : Set serial connection type. @Options: 'socket' (default), 'telnet', 'none' - --serial-telnet-host <ip/host> : Set telnet host for serial. (default: 'localhost') - --serial-telnet-port <port> : Set telnet port for serial. (default: '6660') - --keyboard <type> : Set keyboard. @Options: 'usb' (default), 'ps2', 'virtio' - --keyboard_layout <layout> : Set keyboard layout. - --mouse <type> : Set mouse. @Options: 'tablet' (default), 'ps2', 'usb', 'virtio' - --usb-controller <type> : Set usb-controller. @Options: 'ehci' (default), 'xhci', 'none' - --extra_args <arguments> : Pass additional arguments to qemu - --version : Print version - +You can also pass optional parameters + --braille : Enable braille support. Requires SDL. + --delete-disk : Delete the disk image and EFI variables + --delete-vm : Delete the entire VM and it's configuration + --display : Select display backend. 'sdl' (default), 'gtk', 'none', 'spice' or 'spice-app' + --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit) + --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers + --screen <screen> : Use specified screen to determine the window size. + --shortcut : Create a desktop shortcut + --snapshot apply <tag> : Apply/restore a snapshot. + --snapshot create <tag> : Create a snapshot. + --snapshot delete <tag> : Delete a snapshot. + --snapshot info : Show disk/snapshot info. + --status-quo : Do not commit any changes to disk/snapshot. + --viewer <viewer> : Choose an alternative viewer. @Options: 'spicy' (default), 'remote-viewer', 'none' + --ssh-port <port> : Set ssh-port manually + --spice-port <port> : Set spice-port manually + --public-dir <path> : expose share directory. @Options: '' (default: xdg-user-dir PUBLICSHARE), '<directory>', 'none' + --monitor <type> : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none' + --monitor-telnet-host <ip/host> : Set telnet host for monitor. (default: 'localhost') + --monitor-telnet-port <port> : Set telnet port for monitor. (default: '4440') + --monitor-cmd <cmd> : Send command to monitor if available. (Example: system_powerdown) + --serial <type> : Set serial connection type. @Options: 'socket' (default), 'telnet', 'none' + --serial-telnet-host <ip/host> : Set telnet host for serial. (default: 'localhost') + --serial-telnet-port <port> : Set telnet port for serial. (default: '6660') + --keyboard <type> : Set keyboard. @Options: 'usb' (default), 'ps2', 'virtio' + --keyboard_layout <layout> : Set keyboard layout. + --mouse <type> : Set mouse. @Options: 'tablet' (default), 'ps2', 'usb', 'virtio' + --usb-controller <type> : Set usb-controller. @Options: 'ehci' (default), 'xhci', 'none' + --extra_args <arguments> : Pass additional arguments to qemu + --version : Print version ``` <!-- [[[end]]] --> diff --git a/build-docs b/build-docs index c881d8e..aa63963 160000 --- a/build-docs +++ b/build-docs @@ -1 +1 @@ -Subproject commit c881d8e4862a5810a4793f34626181667fde8f89 +Subproject commit aa63963073cda6f776dbbefc60b784a5425be6a9 diff --git a/docs/quickemu.1 b/docs/quickemu.1 index 98a04c0..8cb668d 100644 --- a/docs/quickemu.1 +++ b/docs/quickemu.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pandoc 2.18 +.\" Automatically generated by Pandoc 2.19 .\" .\" Define V font for inline verbatim, using C font in formats .\" that render this, and otherwise B font. @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "QUICKEMU" "1" "August 1, 2022" "quickemu" "Quickemu User Manual" +.TH "QUICKEMU" "1" "August 19, 2022" "quickemu" "Quickemu User Manual" .hy .SH NAME .PP @@ -75,8 +75,8 @@ Do not commit any changes to disk/snapshot. Print version .SH EXAMPLES .TP -\f[B]quickemu \[en]vm ubuntu-mate-22.04-.conf\f[R] -Launches the VM specified in the file \f[I]ubuntu-mate-22.04-.conf\f[R] +\f[B]quickemu \[en]vm ubuntu-mate-22.04.conf\f[R] +Launches the VM specified in the file \f[I]ubuntu-mate-22.04.conf\f[R] .SS Introduction .PP Quickly create and run highly optimised desktop virtual machines for @@ -88,7 +88,7 @@ For example: .nf \f[C] quickget ubuntu-mate 22.04 -quickemu --vm ubuntu-mate-22.04-.conf +quickemu --vm ubuntu-mate-22.04.conf \f[R] .fi .PP @@ -400,6 +400,8 @@ All the official Ubuntu flavours are supported, just replace .IP \[bu] 2 \f[V]popos\f[R] (Pop!_OS) .IP \[bu] 2 +\f[V]reactos\f[R] (ReactOS) +.IP \[bu] 2 \f[V]regolith\f[R] (Regolith Linux) .IP \[bu] 2 \f[V]rockylinux\f[R] (Rocky Linux) @@ -585,17 +587,40 @@ XHCI (USB 3.0) on macOS Big Sur and newer. .IP \[bu] 2 Display resolution can only be changed via macOS System Preferences. .IP \[bu] 2 -Full Duplex audio works on macOS High Sierra, Mojave and Catalina. -.RS 2 +\f[B]Full Duplex audio requires VoodooHDA +OC (https://github.com/chris1111/VoodooHDA-OC) or pass-through a USB +audio-device to the macOS guest VM\f[R]. .IP \[bu] 2 -\f[B]macOS Big Sur and Monterey have no audio at all\f[R]. -.RE +NOTE! +Gatekeeper (https://disable-gatekeeper.github.io/) and System Integrity +Protection +(SIP) (https://developer.apple.com/documentation/security/disabling_and_enabling_system_integrity_protection) +need to be disabled to install VoodooHDA OC .IP \[bu] 2 File sharing between guest and host is available via virtio-9p (https://wiki.qemu.org/Documentation/9psetup) and SPICE webdavd (https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24). .IP \[bu] 2 Copy/paste via SPICE agent is \f[B]not available on macOS\f[R]. +.SS macOS App Store +.PP +If you see \f[I]\[lq]Your device or computer could not be +verified\[rq]\f[R] when you try to login to the App Store, make sure +that your wired ethernet device is \f[V]en0\f[R]. +Use \f[V]ifconfig\f[R] in a terminal to verify this. +.PP +If the wired ethernet device is not \f[V]en0\f[R], then then go to +\f[I]System Preferences\f[R] -> \f[I]Network\f[R], delete all the +network devices and apply the changes. +Next, open a terminal and run the following: +.IP +.nf +\f[C] +sudo rm /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist +\f[R] +.fi +.PP +Now reboot, and the App Store should work. .SS Windows 8.1, 10 & 11 Guests .PP \f[V]quickget\f[R] can automatically download Windows 8.1, Windows diff --git a/docs/quickemu.1.md b/docs/quickemu.1.md index 61582a9..04d1ae4 100644 --- a/docs/quickemu.1.md +++ b/docs/quickemu.1.md @@ -1,6 +1,6 @@ --- author: Martin Wimpress -date: August 1, 2022 +date: August 19, 2022 footer: quickemu header: Quickemu User Manual section: 1 @@ -68,8 +68,8 @@ You can also pass optional parameters # EXAMPLES -**quickemu --vm ubuntu-mate-22.04-.conf** -: Launches the VM specified in the file *ubuntu-mate-22.04-.conf* +**quickemu --vm ubuntu-mate-22.04.conf** +: Launches the VM specified in the file *ubuntu-mate-22.04.conf* ## Introduction @@ -80,7 +80,7 @@ way to do it for you. For example: ``` bash quickget ubuntu-mate 22.04 -quickemu --vm ubuntu-mate-22.04-.conf +quickemu --vm ubuntu-mate-22.04.conf ``` The original objective of the project was to enable quick testing of @@ -294,6 +294,7 @@ with your preferred flavour. - `opensuse` (openSUSE) - `oraclelinux` (Oracle Linux) - `popos` (Pop!\_OS) +- `reactos` (ReactOS) - `regolith` (Regolith Linux) - `rockylinux` (Rocky Linux) - `slackware` (Slackware) @@ -406,13 +407,34 @@ There are some considerations when running macOS via Quickemu. - UHCI (USB 2.0) on macOS Catalina and earlier. - XHCI (USB 3.0) on macOS Big Sur and newer. - Display resolution can only be changed via macOS System Preferences. -- Full Duplex audio works on macOS High Sierra, Mojave and Catalina. - - **macOS Big Sur and Monterey have no audio at all**. +- **Full Duplex audio requires [VoodooHDA + OC](https://github.com/chris1111/VoodooHDA-OC) or pass-through a USB + audio-device to the macOS guest VM**. +- NOTE! [Gatekeeper](https://disable-gatekeeper.github.io/) and + [System Integrity Protection + (SIP)](https://developer.apple.com/documentation/security/disabling_and_enabling_system_integrity_protection) + need to be disabled to install VoodooHDA OC - File sharing between guest and host is available via [virtio-9p](https://wiki.qemu.org/Documentation/9psetup) and [SPICE webdavd](https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24). - Copy/paste via SPICE agent is **not available on macOS**. +### macOS App Store + +If you see *"Your device or computer could not be verified"* when you +try to login to the App Store, make sure that your wired ethernet device +is `en0`. Use `ifconfig` in a terminal to verify this. + +If the wired ethernet device is not `en0`, then then go to *System +Preferences* -\> *Network*, delete all the network devices and apply the +changes. Next, open a terminal and run the following: + +``` bash +sudo rm /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist +``` + +Now reboot, and the App Store should work. + ## Windows 8.1, 10 & 11 Guests `quickget` can automatically download Windows 8.1, [Windows @@ -466,7 +488,6 @@ secureboot="on" Here are the usage instructions: - Usage quickemu --vm ubuntu.conf @@ -502,8 +523,6 @@ Here are the usage instructions: --extra_args <arguments> : Pass additional arguments to qemu --version : Print version - - ## Desktop shortcuts Desktop shortcuts can be created for a VM, the shortcuts are saved in diff --git a/docs/quickemu_conf.1 b/docs/quickemu_conf.1 index d0f9480..63471eb 100644 --- a/docs/quickemu_conf.1 +++ b/docs/quickemu_conf.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pandoc 2.18 +.\" Automatically generated by Pandoc 2.19 .\" .\" Define V font for inline verbatim, using C font in formats .\" that render this, and otherwise B font. @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "QUICKEMU_CONF" "1" "August 1, 2022" "quickemu_conf" "Quickemu Configuration Manual" +.TH "QUICKEMU_CONF" "1" "August 19, 2022" "quickemu_conf" "Quickemu Configuration Manual" .hy .SH NAME .PP @@ -207,12 +207,29 @@ In the example above: Port 8123 on the host is forwarded to port 8123 on the guest. .IP \[bu] 2 Port 8888 on the host is forwarded to port 80 on the guest. +.SH Disable networking +.PP +To completely disable all network interfaces in a guest VM add this +additional line to your virtual machine configuration: +.IP \[bu] 2 +\f[V]network=\[dq]none\[dq]\f[R] +.SH Restricted networking +.PP +You can isolate the guest from the host (and broader network) using the +restrict option, which will restrict networking to just the guest and +any virtual devices. +.PP +This can be used to prevent software running inside the guest from +phoning home while still providing a network inside the guest. +Add this additional line to your virtual machine configuration: +.IP \[bu] 2 +\f[V]network=\[dq]restrict\[dq]\f[R] .SH Bridged networking .PP Connect your virtual machine to a preconfigured network bridge. Add an additional line to your virtual machine configuration .IP \[bu] 2 -\f[V]bridge=\[dq]br0\[dq]\f[R] +\f[V]network=\[dq]br0\[dq]\f[R] .SH USB redirection .PP Quickemu supports USB redirection via SPICE pass-through and host diff --git a/docs/quickemu_conf.1.md b/docs/quickemu_conf.1.md index e533f00..84ce1ad 100644 --- a/docs/quickemu_conf.1.md +++ b/docs/quickemu_conf.1.md @@ -1,6 +1,6 @@ --- author: Martin Wimpress -date: August 1, 2022 +date: August 19, 2022 footer: quickemu_conf header: Quickemu Configuration Manual section: 1 @@ -180,12 +180,31 @@ In the example above: - Port 8123 on the host is forwarded to port 8123 on the guest. - Port 8888 on the host is forwarded to port 80 on the guest. +# Disable networking + +To completely disable all network interfaces in a guest VM add this +additional line to your virtual machine configuration: + +- `network="none"` + +# Restricted networking + +You can isolate the guest from the host (and broader network) using the +restrict option, which will restrict networking to just the guest and +any virtual devices. + +This can be used to prevent software running inside the guest from +phoning home while still providing a network inside the guest. Add this +additional line to your virtual machine configuration: + +- `network="restrict"` + # Bridged networking Connect your virtual machine to a preconfigured network bridge. Add an additional line to your virtual machine configuration -- `bridge="br0"` +- `network="br0"` # USB redirection diff --git a/docs/quickget.1 b/docs/quickget.1 index 8d19e83..2e85efe 100644 --- a/docs/quickget.1 +++ b/docs/quickget.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pandoc 2.18 +.\" Automatically generated by Pandoc 2.19 .\" .\" Define V font for inline verbatim, using C font in formats .\" that render this, and otherwise B font. @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "QUICKGET" "1" "August 1, 2022" "quickget" "Quickget User Manual" +.TH "QUICKGET" "1" "August 19, 2022" "quickget" "Quickget User Manual" .hy .SH NAME .PP @@ -184,6 +184,8 @@ All the official Ubuntu flavours are supported, just replace .IP \[bu] 2 \f[V]popos\f[R] (Pop!_OS) .IP \[bu] 2 +\f[V]reactos\f[R] (ReactOS) +.IP \[bu] 2 \f[V]regolith\f[R] (Regolith Linux) .IP \[bu] 2 \f[V]rockylinux\f[R] (Rocky Linux) @@ -369,17 +371,40 @@ XHCI (USB 3.0) on macOS Big Sur and newer. .IP \[bu] 2 Display resolution can only be changed via macOS System Preferences. .IP \[bu] 2 -Full Duplex audio works on macOS High Sierra, Mojave and Catalina. -.RS 2 +\f[B]Full Duplex audio requires VoodooHDA +OC (https://github.com/chris1111/VoodooHDA-OC) or pass-through a USB +audio-device to the macOS guest VM\f[R]. .IP \[bu] 2 -\f[B]macOS Big Sur and Monterey have no audio at all\f[R]. -.RE +NOTE! +Gatekeeper (https://disable-gatekeeper.github.io/) and System Integrity +Protection +(SIP) (https://developer.apple.com/documentation/security/disabling_and_enabling_system_integrity_protection) +need to be disabled to install VoodooHDA OC .IP \[bu] 2 File sharing between guest and host is available via virtio-9p (https://wiki.qemu.org/Documentation/9psetup) and SPICE webdavd (https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24). .IP \[bu] 2 Copy/paste via SPICE agent is \f[B]not available on macOS\f[R]. +.SS macOS App Store +.PP +If you see \f[I]\[lq]Your device or computer could not be +verified\[rq]\f[R] when you try to login to the App Store, make sure +that your wired ethernet device is \f[V]en0\f[R]. +Use \f[V]ifconfig\f[R] in a terminal to verify this. +.PP +If the wired ethernet device is not \f[V]en0\f[R], then then go to +\f[I]System Preferences\f[R] -> \f[I]Network\f[R], delete all the +network devices and apply the changes. +Next, open a terminal and run the following: +.IP +.nf +\f[C] +sudo rm /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist +\f[R] +.fi +.PP +Now reboot, and the App Store should work. .SS Windows 8.1, 10 & 11 Guests .PP \f[V]quickget\f[R] can automatically download Windows 8.1, Windows diff --git a/docs/quickget.1.md b/docs/quickget.1.md index 20cef24..ce09197 100644 --- a/docs/quickget.1.md +++ b/docs/quickget.1.md @@ -1,6 +1,6 @@ --- author: Martin Wimpress -date: August 1, 2022 +date: August 19, 2022 footer: quickget header: Quickget User Manual section: 1 @@ -127,6 +127,7 @@ with your preferred flavour. - `opensuse` (openSUSE) - `oraclelinux` (Oracle Linux) - `popos` (Pop!\_OS) +- `reactos` (ReactOS) - `regolith` (Regolith Linux) - `rockylinux` (Rocky Linux) - `slackware` (Slackware) @@ -239,13 +240,34 @@ There are some considerations when running macOS via Quickemu. - UHCI (USB 2.0) on macOS Catalina and earlier. - XHCI (USB 3.0) on macOS Big Sur and newer. - Display resolution can only be changed via macOS System Preferences. -- Full Duplex audio works on macOS High Sierra, Mojave and Catalina. - - **macOS Big Sur and Monterey have no audio at all**. +- **Full Duplex audio requires [VoodooHDA + OC](https://github.com/chris1111/VoodooHDA-OC) or pass-through a USB + audio-device to the macOS guest VM**. +- NOTE! [Gatekeeper](https://disable-gatekeeper.github.io/) and + [System Integrity Protection + (SIP)](https://developer.apple.com/documentation/security/disabling_and_enabling_system_integrity_protection) + need to be disabled to install VoodooHDA OC - File sharing between guest and host is available via [virtio-9p](https://wiki.qemu.org/Documentation/9psetup) and [SPICE webdavd](https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24). - Copy/paste via SPICE agent is **not available on macOS**. +### macOS App Store + +If you see *"Your device or computer could not be verified"* when you +try to login to the App Store, make sure that your wired ethernet device +is `en0`. Use `ifconfig` in a terminal to verify this. + +If the wired ethernet device is not `en0`, then then go to *System +Preferences* -\> *Network*, delete all the network devices and apply the +changes. Next, open a terminal and run the following: + +``` bash +sudo rm /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist +``` + +Now reboot, and the App Store should work. + ## Windows 8.1, 10 & 11 Guests `quickget` can automatically download Windows 8.1, [Windows From 2e15b1219fc64ecd6256fd9567066712d8deb1e2 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 21:15:36 +0100 Subject: [PATCH 87/92] Allow persist MAC addresses for bridged interfaces. Fixes #287 --- README.md | 10 +++++++++- docs/quickemu_conf.1.md | 14 ++++++++++++-- quickemu | 10 +++++++++- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 798b281..b44f342 100644 --- a/README.md +++ b/README.md @@ -631,10 +631,18 @@ additional line to your virtual machine configuration: # Bridged networking Connect your virtual machine to a preconfigured network bridge. Add an -additional line to your virtual machine configuration +additional line to your virtual machine configuration: - `network="br0"` +If you want to have a persistent MAC address for your bridged network interface +in the gust VM you can add `macaddr` to the virtual machine configuration. QEMU +requires that the MAC address is in the range: **52:54:00:AB:00:00 - 52:54:00:AB:FF:FF** + +So you can generate your own MAC addresses with: + +- `macaddr="52:54:00:AB:51:AE"` + # USB redirection Quickemu supports USB redirection via SPICE pass-through and host diff --git a/docs/quickemu_conf.1.md b/docs/quickemu_conf.1.md index 84ce1ad..45feee7 100644 --- a/docs/quickemu_conf.1.md +++ b/docs/quickemu_conf.1.md @@ -26,7 +26,6 @@ These are the options and defaults for the \<vm\>.conf file ``` bash # Lowercase variables are used in the VM config file only boot="efi" -bridge="" cpu_cores="" disk_img="" disk_size="" @@ -35,7 +34,9 @@ floppy="" guest_os="linux" img="" iso="" +macaddr="" macos_release="" +network="" port_forwards=() preallocation="off" ram="" @@ -77,6 +78,7 @@ disk_img="windows-11/disk.qcow2" iso="windows-11/Win11_EnglishInternational_x64.iso" fixed_iso="windows-11/virtio-win.iso" tpm="on" +secureboot="on" ``` - `guest_os="windows"` instructs `quickemu` to optimise for Windows. @@ -202,10 +204,18 @@ additional line to your virtual machine configuration: # Bridged networking Connect your virtual machine to a preconfigured network bridge. Add an -additional line to your virtual machine configuration +additional line to your virtual machine configuration: - `network="br0"` +If you want to have a persistent MAC address for your bridged network interface +in the gust VM you can add `macaddr` to the virtual machine configuration. QEMU +requires that the MAC address is in the range: **52:54:00:AB:00:00 - 52:54:00:AB:FF:FF** + +So you can generate your own MAC addresses with: + +- `macaddr="52:54:00:AB:51:AE"` + # USB redirection Quickemu supports USB redirection via SPICE pass-through and host diff --git a/quickemu b/quickemu index aa91577..e096602 100755 --- a/quickemu +++ b/quickemu @@ -1008,8 +1008,15 @@ function vm_boot() { elif [ -n "${network}" ]; then # Enable bridge mode networking echo " - Network: Bridged (${network})" + + # If a persistent MAC address is provided, use it. + local MAC="" + if [ -n "${macaddr}" ]; then + MAC=",mac=${macaddr}" + fi + # shellcheck disable=SC2054,SC2206 - args+=(-nic bridge,br=${network},model=virtio-net-pci) + args+=(-nic bridge,br=${network},model=virtio-net-pci${MAC}) else echo " - Network: User (${NET_DEVICE})" # shellcheck disable=SC2054,SC2206 @@ -1418,6 +1425,7 @@ floppy="" guest_os="linux" img="" iso="" +macaddr="" macos_release="" network="" port_forwards=() From b05208c8920c7c68c9506caa6e30fbf50884b963 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 22:39:43 +0100 Subject: [PATCH 88/92] Catch reconfigured USB devices for pass-through. Close #433 --- quickemu | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/quickemu b/quickemu index e096602..35e98d8 100755 --- a/quickemu +++ b/quickemu @@ -162,7 +162,10 @@ function enable_usb_passthrough() { USB_BUS=$(lsusb -d "${VENDOR_ID}:${PRODUCT_ID}" | cut -d' ' -f2) USB_DEV=$(lsusb -d "${VENDOR_ID}:${PRODUCT_ID}" | cut -d' ' -f4 | cut -d':' -f1) USB_NAME=$(lsusb -d "${VENDOR_ID}:${PRODUCT_ID}" | cut -d' ' -f7-) - if [ -w "/dev/bus/usb/${USB_BUS}/${USB_DEV}" ]; then + if [ -z "${USB_NAME}" ]; then + echo " ! USB device ${VENDOR_ID}:${PRODUCT_ID} not found. Check your configuration" + continue + elif [ -w "/dev/bus/usb/${USB_BUS}/${USB_DEV}" ]; then echo " o ${USB_NAME} on bus ${USB_BUS} device ${USB_DEV} is accessible." else echo " x ${USB_NAME} on bus ${USB_BUS} device ${USB_DEV} needs permission changes:" From b19188c2ddca3553bbb08f254e445e7d3e3c654f Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 23:46:31 +0100 Subject: [PATCH 89/92] Update comment --- quickemu | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/quickemu b/quickemu index 35e98d8..00cc27e 100755 --- a/quickemu +++ b/quickemu @@ -1680,8 +1680,7 @@ if [ -n "${VM}" ] && [ -e "${VM}" ]; then fi viewer_param_check - # Set the default 3d acceleration. Will be overridden to "off" if - # DISPLAY_DEVICE is determined to be virtio-vga since it doesn't work there. + # Set the default 3D acceleration. if [ -z "${gl}" ]; then gl="on" fi From d1d7920f0a7a7cf1670f9879e0b49dd877cf7060 Mon Sep 17 00:00:00 2001 From: Martin Wimpress <code@flexion.org> Date: Fri, 19 Aug 2022 23:46:51 +0100 Subject: [PATCH 90/92] Bump version to 4.1 --- quickemu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickemu b/quickemu index 00cc27e..144d8de 100755 --- a/quickemu +++ b/quickemu @@ -1496,7 +1496,7 @@ EXTRA_ARGS="" # shellcheck disable=SC2155 readonly LAUNCHER=$(basename "${0}") readonly DISK_MIN_SIZE=$((197632 * 8)) -readonly VERSION="4.0" +readonly VERSION="4.1" # TODO: Make this run the native architecture binary QEMU=$(command -v qemu-system-x86_64) From cc62b5ac78833e204fcb306656b358f42d22edc7 Mon Sep 17 00:00:00 2001 From: Phil Clifford <philip.clifford@gmail.com> Date: Fri, 19 Aug 2022 22:36:32 +0100 Subject: [PATCH 91/92] Incorporate additional changes into generation --- README.md | 7 ++++--- build-docs | 2 +- docs/quickemu_conf.1 | 16 ++++++++++++++-- docs/quickemu_conf.1.md | 7 ++++--- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index b44f342..10fd614 100644 --- a/README.md +++ b/README.md @@ -635,9 +635,10 @@ additional line to your virtual machine configuration: - `network="br0"` -If you want to have a persistent MAC address for your bridged network interface -in the gust VM you can add `macaddr` to the virtual machine configuration. QEMU -requires that the MAC address is in the range: **52:54:00:AB:00:00 - 52:54:00:AB:FF:FF** +If you want to have a persistent MAC address for your bridged network +interface in the guest VM you can add `macaddr` to the virtual machine +configuration. QEMU requires that the MAC address is in the range: +**52:54:00:AB:00:00 - 52:54:00:AB:FF:FF** So you can generate your own MAC addresses with: diff --git a/build-docs b/build-docs index aa63963..767adf6 160000 --- a/build-docs +++ b/build-docs @@ -1 +1 @@ -Subproject commit aa63963073cda6f776dbbefc60b784a5425be6a9 +Subproject commit 767adf6ba0d7c69af481cc3a87c31bd17d484cdd diff --git a/docs/quickemu_conf.1 b/docs/quickemu_conf.1 index 63471eb..497318d 100644 --- a/docs/quickemu_conf.1 +++ b/docs/quickemu_conf.1 @@ -35,7 +35,6 @@ These are the options and defaults for the <vm>.conf file \f[C] # Lowercase variables are used in the VM config file only boot=\[dq]efi\[dq] -bridge=\[dq]\[dq] cpu_cores=\[dq]\[dq] disk_img=\[dq]\[dq] disk_size=\[dq]\[dq] @@ -44,7 +43,9 @@ floppy=\[dq]\[dq] guest_os=\[dq]linux\[dq] img=\[dq]\[dq] iso=\[dq]\[dq] +macaddr=\[dq]\[dq] macos_release=\[dq]\[dq] +network=\[dq]\[dq] port_forwards=() preallocation=\[dq]off\[dq] ram=\[dq]\[dq] @@ -97,6 +98,7 @@ disk_img=\[dq]windows-11/disk.qcow2\[dq] iso=\[dq]windows-11/Win11_EnglishInternational_x64.iso\[dq] fixed_iso=\[dq]windows-11/virtio-win.iso\[dq] tpm=\[dq]on\[dq] +secureboot=\[dq]on\[dq] \f[R] .fi .IP \[bu] 2 @@ -227,9 +229,19 @@ Add this additional line to your virtual machine configuration: .SH Bridged networking .PP Connect your virtual machine to a preconfigured network bridge. -Add an additional line to your virtual machine configuration +Add an additional line to your virtual machine configuration: .IP \[bu] 2 \f[V]network=\[dq]br0\[dq]\f[R] +.PP +If you want to have a persistent MAC address for your bridged network +interface in the guest VM you can add \f[V]macaddr\f[R] to the virtual +machine configuration. +QEMU requires that the MAC address is in the range: +\f[B]52:54:00:AB:00:00 - 52:54:00:AB:FF:FF\f[R] +.PP +So you can generate your own MAC addresses with: +.IP \[bu] 2 +\f[V]macaddr=\[dq]52:54:00:AB:51:AE\[dq]\f[R] .SH USB redirection .PP Quickemu supports USB redirection via SPICE pass-through and host diff --git a/docs/quickemu_conf.1.md b/docs/quickemu_conf.1.md index 45feee7..c165ab7 100644 --- a/docs/quickemu_conf.1.md +++ b/docs/quickemu_conf.1.md @@ -208,9 +208,10 @@ additional line to your virtual machine configuration: - `network="br0"` -If you want to have a persistent MAC address for your bridged network interface -in the gust VM you can add `macaddr` to the virtual machine configuration. QEMU -requires that the MAC address is in the range: **52:54:00:AB:00:00 - 52:54:00:AB:FF:FF** +If you want to have a persistent MAC address for your bridged network +interface in the guest VM you can add `macaddr` to the virtual machine +configuration. QEMU requires that the MAC address is in the range: +**52:54:00:AB:00:00 - 52:54:00:AB:FF:FF** So you can generate your own MAC addresses with: From 0185369632bad472b6a208036a3c29d1f4b63533 Mon Sep 17 00:00:00 2001 From: Phil Clifford <philip.clifford@gmail.com> Date: Thu, 1 Sep 2022 01:01:49 +0100 Subject: [PATCH 92/92] Removed spurious duplication from documentation Co-authored-by: mk3z <mk3z@users.noreply.github.com> --- README.md | 5 +---- build-docs | 2 +- docs/quickemu.1 | 7 ++----- docs/quickemu.1.md | 6 +----- docs/quickemu_conf.1 | 4 ++-- docs/quickemu_conf.1.md | 2 +- docs/quickget.1 | 7 ++----- docs/quickget.1.md | 6 +----- 8 files changed, 11 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 10fd614..981e5dd 100644 --- a/README.md +++ b/README.md @@ -231,10 +231,6 @@ with your preferred flavour. `quickget` also supports: -## Other Operating Systems - -`quickget` also supports: - - `alma` (Alma Linux) - `alpine` (Alpine Linux) - `android` (Android x86) @@ -742,6 +738,7 @@ You can also pass optional parameters --version : Print version ``` + <!-- [[[end]]] --> ## Desktop shortcuts diff --git a/build-docs b/build-docs index 767adf6..da4705f 160000 --- a/build-docs +++ b/build-docs @@ -1 +1 @@ -Subproject commit 767adf6ba0d7c69af481cc3a87c31bd17d484cdd +Subproject commit da4705f350bb95c08dfd7e31627285ffc8019045 diff --git a/docs/quickemu.1 b/docs/quickemu.1 index 8cb668d..19493ed 100644 --- a/docs/quickemu.1 +++ b/docs/quickemu.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pandoc 2.19 +.\" Automatically generated by Pandoc 2.19.2 .\" .\" Define V font for inline verbatim, using C font in formats .\" that render this, and otherwise B font. @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "QUICKEMU" "1" "August 19, 2022" "quickemu" "Quickemu User Manual" +.TH "QUICKEMU" "1" "September 1, 2022" "quickemu" "Quickemu User Manual" .hy .SH NAME .PP @@ -326,9 +326,6 @@ All the official Ubuntu flavours are supported, just replace .SS Other Operating Systems .PP \f[V]quickget\f[R] also supports: -.SS Other Operating Systems -.PP -\f[V]quickget\f[R] also supports: .IP \[bu] 2 \f[V]alma\f[R] (Alma Linux) .IP \[bu] 2 diff --git a/docs/quickemu.1.md b/docs/quickemu.1.md index 04d1ae4..3279bed 100644 --- a/docs/quickemu.1.md +++ b/docs/quickemu.1.md @@ -1,6 +1,6 @@ --- author: Martin Wimpress -date: August 19, 2022 +date: September 1, 2022 footer: quickemu header: Quickemu User Manual section: 1 @@ -255,10 +255,6 @@ with your preferred flavour. `quickget` also supports: -## Other Operating Systems - -`quickget` also supports: - - `alma` (Alma Linux) - `alpine` (Alpine Linux) - `android` (Android x86) diff --git a/docs/quickemu_conf.1 b/docs/quickemu_conf.1 index 497318d..c012bdd 100644 --- a/docs/quickemu_conf.1 +++ b/docs/quickemu_conf.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pandoc 2.19 +.\" Automatically generated by Pandoc 2.19.2 .\" .\" Define V font for inline verbatim, using C font in formats .\" that render this, and otherwise B font. @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "QUICKEMU_CONF" "1" "August 19, 2022" "quickemu_conf" "Quickemu Configuration Manual" +.TH "QUICKEMU_CONF" "1" "September 1, 2022" "quickemu_conf" "Quickemu Configuration Manual" .hy .SH NAME .PP diff --git a/docs/quickemu_conf.1.md b/docs/quickemu_conf.1.md index c165ab7..6c52fed 100644 --- a/docs/quickemu_conf.1.md +++ b/docs/quickemu_conf.1.md @@ -1,6 +1,6 @@ --- author: Martin Wimpress -date: August 19, 2022 +date: September 1, 2022 footer: quickemu_conf header: Quickemu Configuration Manual section: 1 diff --git a/docs/quickget.1 b/docs/quickget.1 index 2e85efe..911c807 100644 --- a/docs/quickget.1 +++ b/docs/quickget.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pandoc 2.19 +.\" Automatically generated by Pandoc 2.19.2 .\" .\" Define V font for inline verbatim, using C font in formats .\" that render this, and otherwise B font. @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "QUICKGET" "1" "August 19, 2022" "quickget" "Quickget User Manual" +.TH "QUICKGET" "1" "September 1, 2022" "quickget" "Quickget User Manual" .hy .SH NAME .PP @@ -110,9 +110,6 @@ All the official Ubuntu flavours are supported, just replace .SS Other Operating Systems .PP \f[V]quickget\f[R] also supports: -.SS Other Operating Systems -.PP -\f[V]quickget\f[R] also supports: .IP \[bu] 2 \f[V]alma\f[R] (Alma Linux) .IP \[bu] 2 diff --git a/docs/quickget.1.md b/docs/quickget.1.md index ce09197..a3693f9 100644 --- a/docs/quickget.1.md +++ b/docs/quickget.1.md @@ -1,6 +1,6 @@ --- author: Martin Wimpress -date: August 19, 2022 +date: September 1, 2022 footer: quickget header: Quickget User Manual section: 1 @@ -88,10 +88,6 @@ with your preferred flavour. `quickget` also supports: -## Other Operating Systems - -`quickget` also supports: - - `alma` (Alma Linux) - `alpine` (Alpine Linux) - `android` (Android x86)