diff options
| author | root <root@linux-mj9j.amd.com> | 2018-07-31 15:55:54 -0500 |
|---|---|---|
| committer | root <root@linux-mj9j.amd.com> | 2018-07-31 15:55:54 -0500 |
| commit | 88463265889d4b4fa26fa3dc38dba6f0b888b76a (patch) | |
| tree | de4fd1ae67f634a9a97ec99ed93ce956d6246baf /launch-qemu.sh | |
| parent | 0ef924c0d3c21be9d657e091574a737abc7a91e4 (diff) | |
| download | cachepc-amdsev-88463265889d4b4fa26fa3dc38dba6f0b888b76a.tar.gz cachepc-amdsev-88463265889d4b4fa26fa3dc38dba6f0b888b76a.zip | |
Multiple updates
* update README
* add distro specific builds
Diffstat (limited to 'launch-qemu.sh')
| -rwxr-xr-x | launch-qemu.sh | 281 |
1 files changed, 0 insertions, 281 deletions
diff --git a/launch-qemu.sh b/launch-qemu.sh deleted file mode 100755 index 5174365..0000000 --- a/launch-qemu.sh +++ /dev/null @@ -1,281 +0,0 @@ -#!/bin/bash - -# -# user changeable parameters -# -HDA_FILE="${HOME}/ubuntu-16.04-desktop.qcow2" -GUEST_SIZE_IN_MB="2048" -SEV_GUEST="1" -SMP_NCPUS="4" -CONSOLE="serial" -QEMU_INSTALL_DIR=`pwd`/bin/ -UEFI_BIOS_CODE="`pwd`/share/qemu/OVMF_CODE.fd" -UEFI_BIOS_VARS="`pwd`/OVMF_VARS.fd" -#VNC_PORT="" -AUTOSTART="1" -ALLOW_DEBUG="0" -USE_VIRTIO="0" - -usage() { - echo "$0 [options]" - echo "Available <commands>:" - echo " -hda hard disk ($HDA_FILE)" - echo " -nosev disable sev support" - echo " -mem guest memory" - echo " -smp number of cpus" - echo " -console display console to use (serial or graphics)" - echo " -vnc VNC port to use" - echo " -bios bios to use (default $UEFI_BIOS_CODE)" - echo " -kernel kernel to use" - echo " -initrd initrd to use" - echo " -noauto do not autostart the guest" - echo " -cdrom CDROM image" - echo " -hugetlb use hugetlbfs" - echo " -allow-debug allow debugging the VM" - echo " -virtio use virtio devices" - echo " -gdb start gdbserver" - exit 1 -} - -add_opts() { - echo -n "$* " >> ${QEMU_CMDLINE} -} - -stop_network() { - if [ "$GUEST_TAP_NAME" = "" ]; then - return - fi - run_cmd "ip tuntap del ${GUEST_TAP_NAME} mode tap" -} - -exit_from_int() { - stop_network - - rm -rf ${QEMU_CMDLINE} - # restore the mapping - stty intr ^c - exit 1 -} - -run_cmd () { - $* - if [ $? -ne 0 ]; then - echo "command $* failed" - exit 1 - fi -} - -setup_hugetlbfs() { - HUGETLBFS=`mount | grep hugetlbfs | awk {'print $3'}` - if [ "${HUGETLBFS}" = "" ]; then - HUGETLBFS="/hugetlbfs" - run_cmd "mkdir -p $HUGETLBFS" - echo "Mounting $HUGETLBFS..." - run_cmd "mount -t hugetlbfs nodev $HUGETLBFS" - fi - # calculate number of hugepage we need for the guest - HPAGES=$((($GUEST_SIZE_IN_MB / 2) + 50)) - echo -n "Setting hugepage count " - echo $HPAGES | sudo tee /proc/sys/vm/nr_hugepages - - add_opts "-mem-path ${HUGETLBFS}" -} - -setup_bridge_network() { - # Get last tap device on host - TAP_NUM=`ifconfig | grep tap | tail -1 | cut -c4- | cut -f1 -d ' ' | cut -f1 -d:` - if [ "$TAP_NUM" = "" ]; then - TAP_NUM="1" - fi - TAP_NUM=`echo $(( TAP_NUM + 1 ))` - GUEST_TAP_NAME="tap${TAP_NUM}" - GUEST_MAC_ADDR=$(printf '00:60:2F:%02X:%02X:%02X\n' $[RANDOM%256] $[RANDOM%256] $[RANDOM%256]) - - echo "Starting network adapter '${GUEST_TAP_NAME}' MAC=$GUEST_MAC_ADDR" - run_cmd "ip tuntap add $GUEST_TAP_NAME mode tap user `whoami`" - run_cmd "ip link set $GUEST_TAP_NAME up" - run_cmd "ip link set $GUEST_TAP_NAME master br0" - - if [ "$USE_VIRTIO" = "1" ]; then - add_opts "-netdev type=tap,script=no,downscript=no,id=net0,ifname=$GUEST_TAP_NAME" - add_opts "-device virtio-net-pci,netdev=net0,disable-legacy=on,iommu_platform=true,romfile=" - else - add_opts "-device e1000,mac=${GUEST_MAC_ADDR},netdev=net0" - add_opts "-netdev tap,id=net0,ifname=$GUEST_TAP_NAME,script=no,downscript=no" - fi -} - -trap exit_from_int SIGINT - -if [ `id -u` -ne 0 ]; then - echo "Must be run as root!" - exit 1 -fi - -while [[ $1 != "" ]]; do - case "$1" in - -hda) HDA_FILE="${2}" - shift - ;; - -nosev) SEV_GUEST="0" - ;; - -mem) GUEST_SIZE_IN_MB=${2} - shift - ;; - -console) CONSOLE=${2} - shift - ;; - -smp) SMP_NCPUS=$2 - shift - ;; - -vnc) VNC_PORT=$2 - shift - if [ "${VNC_PORT}" = "" ]; then - usage - fi - ;; - -bios) UEFI_BIOS_CODE="`readlink -f $2`" - shift - ;; - -netconsole) NETCONSOLE_PORT=$2 - shift - ;; - -initrd) INITRD_FILE=$2 - shift - ;; - -kernel) KERNEL_FILE=$2 - shift - ;; - -cdrom) CDROM_FILE=$2 - shift - ;; - -noauto) AUTOSTART="0" - ;; - -hugetlb) USE_HUGETLBFS="1" - ;; - -allow-debug) ALLOW_DEBUG="1" - ;; - -virtio) USE_VIRTIO="1" - ;; - -gdb) USE_GDB="1" - ;; - *) usage;; - esac - shift -done - -# we add all the qemu command line options into a file -QEMU_CMDLINE=/tmp/cmdline.$$ -rm -rf ${QEMU_CMDLINE} - -add_opts "${QEMU_INSTALL_DIR}qemu-system-x86_64" - -# Basic virtual machine property -add_opts "-enable-kvm -cpu EPYC" - -# add number of VCPUs -[ ! -z ${SMP_NCPUS} ] && add_opts "-smp ${SMP_NCPUS},maxcpus=64" - -# define guest memory -add_opts "-m ${GUEST_SIZE_IN_MB}M,slots=5,maxmem=30G" - -# The OVMF binary, including the non-volatile variable store, appears as a -# "normal" qemu drive on the host side, and it is exposed to the guest as a -# persistent flash device. -add_opts "-drive if=pflash,format=raw,unit=0,file=${UEFI_BIOS_CODE},readonly" -add_opts "-drive if=pflash,format=raw,unit=1,file=${UEFI_BIOS_VARS}" - -# add CDROM if specified -[ ! -z ${CDROM_FILE} ] && add_opts "-drive file=${CDROM_FILE},media=cdrom,index=0" - -# If harddisk file is specified then add the HDD drive -if [ ! -z ${HDA_FILE} ]; then - if [ "$USE_VIRTIO" = "1" ]; then - if [[ ${HDA_FILE} = *"qcow2" ]]; then - add_opts "-drive file=${HDA_FILE},if=none,id=disk0,format=qcow2" - else - add_opts "-drive file=${HDA_FILE},if=none,id=disk0,format=raw" - fi - add_opts "-device virtio-scsi-pci,id=scsi,disable-legacy=on,iommu_platform=true" - add_opts "-device scsi-hd,drive=disk0" - # virtio-blk - # add_opts "-device virtio-blk-pci,drive=disk0,disable-legacy=on,iommu_platform=true" - else - if [[ ${HDA_FILE} = *"qcow2" ]]; then - add_opts "-drive file=${HDA_FILE},format=qcow2" - else - add_opts "-drive file=${HDA_FILE},format=raw" - fi - fi -fi - -# If this is SEV guest then add the encryption device objects to enable support -if [ ${SEV_GUEST} = "1" ]; then - if [ "${ALLOW_DEBUG}" = "1" ]; then - SEV_DEBUG_POLICY=",policy=0x0" - fi - add_opts "-object sev-guest,id=sev0${SEV_DEBUG_POLICY},cbitpos=47,reduced-phys-bits=1" - add_opts "-machine memory-encryption=sev0" -fi - -# if we are asked to use hugetlbfs -[ ! -z ${USE_HUGETLBFS} ] && setup_hugetlbfs - -# if console is serial then disable graphical interface -if [ "${CONSOLE}" = "serial" ]; then - add_opts "-nographic" -fi - -# if -kernel arg is specified then use the kernel provided in command line for boot -if [ "${KERNEL_FILE}" != "" ]; then - add_opts "-kernel $KERNEL_FILE" - add_opts "-append \"console=ttyS0 earlyprintk=serial root=/dev/sda2\"" - [ ! -z ${INITRD_FILE} ] && add_opts "-initrd ${INITRD_FILE}" -fi - -# start vnc server -[ ! -z ${VNC_PORT} ] && add_opts "-vnc :${VNC_PORT}" && echo "Starting VNC on port ${VNC_PORT}" - -# start monitor on pty and named socket 'monitor' -add_opts "-monitor pty -monitor unix:monitor,server,nowait" - -# do we do not need to autostart the guest -if [ "${AUTOSTART}" = "0" ]; then - echo "Disabling autostart" - add_opts "-S" -fi - -# check if host has bridge network -BR0_STATUS="`ifconfig | grep br0`" -if [ "$BR0_STATUS" != "" ]; then - setup_bridge_network -fi - -# start gdbserver -[ ! -z ${USE_GDB} ] && add_opts "-s" - -# add virtio ring -if [ "$USE_VIRTIO" = "1" ]; then - add_opts "-device virtio-rng-pci,disable-legacy=on,iommu_platform=true" -fi - -# log the console output in stdout.log -QEMU_CONSOLE_LOG=`pwd`/stdout.log - -# save the command line args into log file -cat $QEMU_CMDLINE | tee ${QEMU_CONSOLE_LOG} -echo | tee -a ${QEMU_CONSOLE_LOG} - - -# map CTRL-C to CTRL ] -echo "Mapping CTRL-C to CTRL-]" -stty intr ^] - -echo "Launching VM ..." -bash ${QEMU_CMDLINE} 2>&1 | tee -a ${QEMU_CONSOLE_LOG} - -# restore the mapping -stty intr ^c - -rm -rf ${QEMU_CMDLINE} -stop_network |
