mirror of
				https://github.com/oSoWoSo/DistroHopper.git
				synced 2024-08-14 22:46:53 +00:00 
			
		
		
		
	Add distro, kernel and CPU details to start up messages. Close #96
This commit is contained in:
		
							parent
							
								
									c3b3f4ee86
								
							
						
					
					
						commit
						d785c89a38
					
				
					 2 changed files with 100 additions and 84 deletions
				
			
		|  | @ -64,6 +64,7 @@ See this (old) video where I explain some of my motivations for creating Quickem | |||
|   * [Coreutils](https://www.gnu.org/software/coreutils/) | ||||
|   * [grep](https://www.gnu.org/software/grep/) | ||||
|   * [jq](https://stedolan.github.io/jq/) | ||||
|   * [LSB](https://wiki.linuxfoundation.org/lsb/start) | ||||
|   * [procps](https://gitlab.com/procps-ng/procps) | ||||
|   * [python3](https://www.python.org/) | ||||
|   * [macrecovery](https://github.com/acidanthera/OpenCorePkg/tree/master/Utilities/macrecovery) | ||||
|  |  | |||
							
								
								
									
										183
									
								
								quickemu
									
										
									
									
									
								
							
							
						
						
									
										183
									
								
								quickemu
									
										
									
									
									
								
							|  | @ -143,6 +143,7 @@ function vm_boot() { | |||
|   local BALLOON="-device virtio-balloon" | ||||
|   local CPU="" | ||||
|   local DISK_USED="" | ||||
|   local DISPLAY_DEVICE="" | ||||
|   local EFI_CODE="" | ||||
|   local EFI_VARS="" | ||||
|   local GUEST_CPU_CORES="" | ||||
|  | @ -152,9 +153,12 @@ function vm_boot() { | |||
|   local HOST_CPU_SMT="" | ||||
|   local HOST_CPU_SOCKETS="" | ||||
|   local HOST_CPU_VENDOR="" | ||||
|   local DISPLAY_DEVICE="" | ||||
|   local GL="on" | ||||
|   local GUEST_TWEAKS="" | ||||
|   local KERNEL_NAME="Unknown" | ||||
|   local KERNEL_NODE="" | ||||
|   local KERNEL_VER="?" | ||||
|   local LSB_DESCRIPTION="" | ||||
|   local MAC_BOOTLOADER="" | ||||
|   local MAC_MISSING="" | ||||
|   local MAC_DISK_DEV="ide-hd,bus=ahci.2" | ||||
|  | @ -164,9 +168,101 @@ function vm_boot() { | |||
|   local QEMU_VER="" | ||||
|   local USB_HOST_PASSTHROUGH_CONTROLLER="qemu-xhci" | ||||
|   local VIDEO="" | ||||
| 
 | ||||
|   KERNEL_NAME=$(uname --kernel-name) | ||||
|   KERNEL_NODE="($(uname --nodename))" | ||||
|   KERNEL_VER=$(uname --kernel-release | cut -d'.' -f1-2) | ||||
| 
 | ||||
|   if command -v lsb_release &>/dev/null; then | ||||
|     LSB_DESCRIPTION=$(lsb_release --description --short) | ||||
|   fi | ||||
| 
 | ||||
|   QEMU_VER=$(${QEMU} -version | head -n1 | cut -d' ' -f4 | cut -d'(' -f1) | ||||
|   echo "Quickemu ${VERSION} starting ${VM}" | ||||
|   echo " - QEMU:     ${QEMU} v${QEMU_VER}" | ||||
|   echo "Quickemu ${VERSION} starting ${VM} on ${LSB_DESCRIPTION} ${KERNEL_NODE}" | ||||
|   echo " - QEMU:     ${QEMU} v${QEMU_VER} on ${KERNEL_NAME} ${KERNEL_VER}" | ||||
| 
 | ||||
|   HOST_CPU_CORES=$(nproc --all) | ||||
|   HOST_CPU_MODEL=$(lscpu | grep '^Model name:' | cut -d':' -f2 | sed 's/  //g') | ||||
|   HOST_CPU_SOCKETS=$(lscpu | grep -E 'Socket' | cut -d':' -f2 | sed 's/ //g') | ||||
|   HOST_CPU_VENDOR=$(lscpu | grep -E 'Vendor' | cut -d':' -f2 | sed 's/ //g') | ||||
| 
 | ||||
|   # A CPU with Intel VT-x / AMD SVM support is required | ||||
|   if [ "${HOST_CPU_VENDOR}" == "AuthenticIntel" ]; then | ||||
|     if ! check_cpu_flag vmx; then | ||||
|       echo "ERROR! Intel VT-x support is required." | ||||
|       exit 1 | ||||
|     fi | ||||
|   elif [ "${HOST_CPU_VENDOR}" == "AuthenticAMD" ]; then | ||||
|     if ! check_cpu_flag svm; then | ||||
|       echo "ERROR! AMD SVM support is required." | ||||
|       exit 1 | ||||
|     fi | ||||
|   fi | ||||
| 
 | ||||
|   if [ -z "${cpu_cores}" ]; then | ||||
|       if [ "${HOST_CPU_CORES}" -ge 32 ]; then | ||||
|         GUEST_CPU_CORES="16" | ||||
|       elif [ "${HOST_CPU_CORES}" -ge 16 ]; then | ||||
|         GUEST_CPU_CORES="8" | ||||
|       elif [ "${HOST_CPU_CORES}" -ge 8 ]; then | ||||
|         GUEST_CPU_CORES="4" | ||||
|       elif [ "${HOST_CPU_CORES}" -ge 4 ]; then | ||||
|         GUEST_CPU_CORES="2" | ||||
|       else | ||||
|         GUEST_CPU_CORES="1" | ||||
|       fi | ||||
|   else | ||||
|       GUEST_CPU_CORES="${cpu_cores}" | ||||
|   fi | ||||
| 
 | ||||
|   # Account for Hyperthreading/SMT. | ||||
|   if [ -e /sys/devices/system/cpu/smt/control ] && [ "${GUEST_CPU_CORES}" -ge 2 ]; then | ||||
|     HOST_CPU_SMT=$(cat /sys/devices/system/cpu/smt/control) | ||||
|     case ${HOST_CPU_SMT} in | ||||
|       on) | ||||
|         GUEST_CPU_THREADS=2 | ||||
|         GUEST_CPU_LOGICAL_CORES=$(( GUEST_CPU_CORES / GUEST_CPU_THREADS )) | ||||
|         ;; | ||||
|       *) | ||||
|         GUEST_CPU_THREADS=1 | ||||
|         GUEST_CPU_LOGICAL_CORES=${GUEST_CPU_CORES} | ||||
|         ;; | ||||
|     esac | ||||
|   else | ||||
|     GUEST_CPU_THREADS=1 | ||||
|     GUEST_CPU_LOGICAL_CORES=${GUEST_CPU_CORES} | ||||
|   fi | ||||
| 
 | ||||
|   local SMP="-smp cores=${GUEST_CPU_LOGICAL_CORES},threads=${GUEST_CPU_THREADS},sockets=${HOST_CPU_SOCKETS}" | ||||
|   echo " - CPU:      ${HOST_CPU_MODEL}" | ||||
|   echo -n " - CPU VM:   ${HOST_CPU_SOCKETS} Socket(s), ${GUEST_CPU_LOGICAL_CORES} Core(s), ${GUEST_CPU_THREADS} Thread(s)" | ||||
| 
 | ||||
|   local RAM_VM="2G" | ||||
|   if [ -z "${ram}" ]; then | ||||
|       local RAM_HOST="" | ||||
|       RAM_HOST=$(free --mega -h | grep Mem | cut -d':' -f2 | cut -d'G' -f1 | sed 's/ //g') | ||||
|       #Round up - https://github.com/wimpysworld/quickemu/issues/11 | ||||
|       RAM_HOST=$(printf '%.*f\n' 0 "${RAM_HOST}") | ||||
|       if [ "${RAM_HOST}" -ge 128 ]; then | ||||
|         RAM_VM="32G" | ||||
|       elif [ "${RAM_HOST}" -ge 64 ]; then | ||||
|         RAM_VM="16G" | ||||
|       elif [ "${RAM_HOST}" -ge 16 ]; then | ||||
|         RAM_VM="8G" | ||||
|       elif [ "${RAM_HOST}" -ge 8 ]; then | ||||
|         RAM_VM="4G" | ||||
|       fi | ||||
|   else | ||||
|       RAM_VM="${ram}" | ||||
|   fi | ||||
|   echo ", ${RAM_VM} RAM" | ||||
| 
 | ||||
|   if [ ${RAM_VM//G/} -lt 4 ]; then | ||||
|     if [ "${guest_os}" == "macos" ] || [ "${guest_os}" == "windows" ]; then | ||||
|         echo "ERROR! You have insufficient RAM to run ${guest_os} in a VM" | ||||
|         exit 1 | ||||
|     fi | ||||
|   fi | ||||
| 
 | ||||
|   # Force to lowercase. | ||||
|   boot=${boot,,} | ||||
|  | @ -237,87 +333,6 @@ function vm_boot() { | |||
|     echo " - BOOT:     Legacy BIOS (${guest_os})" | ||||
|   fi | ||||
| 
 | ||||
|   HOST_CPU_CORES=$(nproc --all) | ||||
|   HOST_CPU_VENDOR=$(lscpu | grep -E 'Vendor' | cut -d':' -f2 | sed 's/ //g') | ||||
|   HOST_CPU_SOCKETS=$(lscpu | grep -E 'Socket' | cut -d':' -f2 | sed 's/ //g') | ||||
| 
 | ||||
|   # A CPU with Intel VT-x / AMD SVM support is required | ||||
|   if [ "${HOST_CPU_VENDOR}" == "AuthenticIntel" ]; then | ||||
|     if ! check_cpu_flag vmx; then | ||||
|       echo "ERROR! Intel VT-x support is required." | ||||
|       exit 1 | ||||
|     fi | ||||
|   elif [ "${HOST_CPU_VENDOR}" == "AuthenticAMD" ]; then | ||||
|     if ! check_cpu_flag svm; then | ||||
|       echo "ERROR! AMD SVM support is required." | ||||
|       exit 1 | ||||
|     fi | ||||
|   fi | ||||
| 
 | ||||
|   if [ -z "${cpu_cores}" ]; then | ||||
|       if [ "${HOST_CPU_CORES}" -ge 32 ]; then | ||||
|         GUEST_CPU_CORES="16" | ||||
|       elif [ "${HOST_CPU_CORES}" -ge 16 ]; then | ||||
|         GUEST_CPU_CORES="8" | ||||
|       elif [ "${HOST_CPU_CORES}" -ge 8 ]; then | ||||
|         GUEST_CPU_CORES="4" | ||||
|       elif [ "${HOST_CPU_CORES}" -ge 4 ]; then | ||||
|         GUEST_CPU_CORES="2" | ||||
|       else | ||||
|         GUEST_CPU_CORES="1" | ||||
|       fi | ||||
|   else | ||||
|       GUEST_CPU_CORES="${cpu_cores}" | ||||
|   fi | ||||
| 
 | ||||
|   # Account for Hyperthreading/SMT. | ||||
|   if [ -e /sys/devices/system/cpu/smt/control ] && [ "${GUEST_CPU_CORES}" -ge 2 ]; then | ||||
|     HOST_CPU_SMT=$(cat /sys/devices/system/cpu/smt/control) | ||||
|     case ${HOST_CPU_SMT} in | ||||
|       on) | ||||
|         GUEST_CPU_THREADS=2 | ||||
|         GUEST_CPU_LOGICAL_CORES=$(( GUEST_CPU_CORES / GUEST_CPU_THREADS )) | ||||
|         ;; | ||||
|       *) | ||||
|         GUEST_CPU_THREADS=1 | ||||
|         GUEST_CPU_LOGICAL_CORES=${GUEST_CPU_CORES} | ||||
|         ;; | ||||
|     esac | ||||
|   else | ||||
|     GUEST_CPU_THREADS=1 | ||||
|     GUEST_CPU_LOGICAL_CORES=${GUEST_CPU_CORES} | ||||
|   fi | ||||
| 
 | ||||
|   local SMP="-smp cores=${GUEST_CPU_LOGICAL_CORES},threads=${GUEST_CPU_THREADS},sockets=${HOST_CPU_SOCKETS}" | ||||
|   echo -n " - CPU:      ${HOST_CPU_SOCKETS} Socket(s), ${GUEST_CPU_LOGICAL_CORES} Core(s), ${GUEST_CPU_THREADS} Thread(s)" | ||||
| 
 | ||||
|   local RAM_VM="2G" | ||||
|   if [ -z "${ram}" ]; then | ||||
|       local RAM_HOST="" | ||||
|       RAM_HOST=$(free --mega -h | grep Mem | cut -d':' -f2 | cut -d'G' -f1 | sed 's/ //g') | ||||
|       #Round up - https://github.com/wimpysworld/quickemu/issues/11 | ||||
|       RAM_HOST=$(printf '%.*f\n' 0 "${RAM_HOST}") | ||||
|       if [ "${RAM_HOST}" -ge 128 ]; then | ||||
|         RAM_VM="32G" | ||||
|       elif [ "${RAM_HOST}" -ge 64 ]; then | ||||
|         RAM_VM="16G" | ||||
|       elif [ "${RAM_HOST}" -ge 16 ]; then | ||||
|         RAM_VM="8G" | ||||
|       elif [ "${RAM_HOST}" -ge 8 ]; then | ||||
|         RAM_VM="4G" | ||||
|       fi | ||||
|   else | ||||
|       RAM_VM="${ram}" | ||||
|   fi | ||||
|   echo ", ${RAM_VM} RAM" | ||||
| 
 | ||||
|   if [ ${RAM_VM//G/} -lt 4 ]; then | ||||
|     if [ "${guest_os}" == "macos" ] || [ "${guest_os}" == "windows" ]; then | ||||
|         echo "ERROR! You have insufficient RAM to run ${guest_os} in a VM" | ||||
|         exit 1 | ||||
|     fi | ||||
|   fi | ||||
| 
 | ||||
|   # Make any OS specific adjustments | ||||
|   case ${guest_os} in | ||||
|     freebsd|linux) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue