blob: f52b45ce08cffd5316ab19b17d2b17c37e421602 (
plain) (
tree)
|
|
#!/bin/sh
data_dir="${XDG_DATA_HOME:-${HOME}/.local/share}/vm"
storage="${data_dir}/livevm.qcow2"
# allocate half of available memory and cores to vm
mem="$(($(grep MemAvailable /proc/meminfo | grep -o '[0-9]*')/2))"
cores="$(($(nproc)/2))"
cmd="qemu-system-x86_64 -boot menu=on -enable-kvm -device intel-hda \
-device hda-duplex -m ${mem}k -cpu host -smp $cores -drive file=$storage"
[ ! -d "${data_dir}" ] &&
mkdir -p "${data_dir}"
[ ! -f "$storage" ] &&
qemu-img create -f qcow2 "$storage" 30G
if [ "$#" -eq 1 ] && [ -f "$1" ]
then
cmd="${cmd} -cdrom ${1}"
shift
fi
while getopts "wehc:d:u:q:r:" f
do
case "$f" in
w)
cmd="${cmd} -device qxl -display gtk,show-menubar=off"
;;
e)
[ ! -f "/usr/share/edk2-ovmf/x64/OVMF_CODE.fd" ] &&
die "ovmf not found, install it"
[ ! -f "${data_dir}/OVMF_VARS.fd" ] &&
cp "/usr/share/edk2-ovmf/x64/OVMF_CODE.fd" "${data_dir}/OVMF_VARS.fd"
cmd="${cmd} -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2-ovmf/x64/OVMF_CODE.fd"
cmd="${cmd} -drive if=pflash,format=raw,file=${data_dir}/OVMF_VARS.fd"
;;
c)
cmd="${cmd} -cdrom ${OPTARG}"
;;
d)
cmd="${cmd} -drive file=${OPTARG}"
;;
u)
cmd="${cmd} -device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/${OPTARG}"
;;
q)
cmd="${cmd} -drive file=${OPTARG}"
;;
r)
cmd="${cmd} -drive format=raw,file=${OPTARG}"
;;
h)
cat <<- EOF
Usage: ${0##*/} command
a wrapper for qemu
Commands:
-e use efi
-w run wangblows
-c [cdrom]
-d [drive]
-u [host_bus/host_addr]
-q [img.qcow2]
-r [img.raw]
EOF
exit
;;
?)
printf "%s%s\n" "usage: ${0##*/} [ -weh ] [ -c cdrom ] [ -d drive ]" \
"[ -u host_bus/host_addr ] [ -q img.qcow2 ] [ -r img.raw ]" 1>&2
exit 1
;;
esac
done
# use virgl by default if wangblows is not set
[ -n "${cmd##*device qxl*}" ] &&
cmd="${cmd} -device virtio-vga-gl -display gtk,gl=on,show-menubar=off"
eval "$cmd"
|