frnmst-archives
/
qvm
Archived
1
0
Fork 0
Trivial management of 64 bit virtual machines with qemu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
qvm/qvm

117 lines
2.7 KiB

6 years ago
#!/usr/bin/env sh
# qvm - Trivial management of 64 bit virtual machines with qemu.
#
# Written in 2016 by Franco Masotti/frnmst <franco.masotti@student.unife.it>
#
# To the extent possible under law, the author(s) have dedicated all
# copyright and related and neighboring rights to this software to the public
# domain worldwide. This software is distributed without any warranty.
#
# You should have received a copy of the CC0 Public Domain Dedication along
# with this software. If not, see
# <http://creativecommons.org/publicdomain/zero/1.0/>.
check_dependencies()
6 years ago
{
which \
qemu-system-x86_64 \
ssh \
vncviewer
}
6 years ago
attach()
{
local place="${1}"
local address=''
[ "${place}" = 'locally' ] && address='127.0.0.1' || address="${HOST_IP_ADDRESS}"
ssh -p "${SSH_HOST_PORT}" -l "${SSH_GUEST_USERNAME}" "${address}"
}
backup()
{
qemu-img create -f qcow2 -b "${VHD_NAME}" "${VHD_NAME}".mod
}
create()
{
qemu-img create -f qcow2 "${VHD_NAME}" "${VHD_SIZE}"
}
6 years ago
delete()
{
local vhd_type="${1}"
local vhd=''
[ "${vhd_type}" = 'orig' ] && vhd="${VHD_NAME}" || vhd=""${VHD_NAME}".mod"
rm "${vhd}"
}
6 years ago
installs()
{
local display="${1}"
local enable_vnc=''
[ "${display}" = 'vnc' ] && enable_vnc='-monitor pty -vnc 127.0.0.1:0'
qemu-system-x86_64 -m "${VM_MEMORY}" \
-device e1000,netdev=user.0 \
-netdev user,\
id=user.0,hostfwd=tcp::"${SSH_HOST_PORT}"-:"${SSH_GUEST_PORT}" \
-enable-kvm \
${enable_vnc} \
-cdrom "${IMG_NAME}" \
-boot order=d \
"${VHD_NAME}" &
}
6 years ago
shared()
{
mkdir -p "${SHARED_DATA_PATH}"
}
run()
{
local display="${1}"
local vhd_type="${2}"
local vhd=''
local display=''
local enable_vnc=''
[ "${display}" = 'vnc' ] \
&& display='none' \
&& enable_vnc="-monitor pty -vnc 127.0.0.1:0"
[ "${vhd_type}" = 'orig' ] && vhd="${VHD_NAME}" || vhd=""${VHD_NAME}".mod"
# Adds ALSA audio support.
export QEMU_AUDIO_DRV=alsa
# No spaces between the parameters of each option.
qemu-system-x86_64 \
-m "${VM_MEMORY}" \
-enable-kvm \
${enable_vnc} \
-device e1000,netdev=user.0 \
-netdev user,id=user.0,\
hostfwd=tcp::"${HOST_PORT_1}"-:"${GUEST_PORT_1}",\
hostfwd=tcp::"${HOST_PORT_2}"-:"${GUEST_PORT_2}",\
hostfwd=tcp::"${SSH_HOST_PORT}"-:"${SSH_GUEST_PORT}" \
-virtfs local,path="$SHARED_DATA_PATH",security_model=none,mount_tag="${MOUNT_TAG}" \
-smp ${NUMBER_OF_CORES} \
-soundhw ac97 \
-display "${display}" \
-drive file="${vhd}" &
}
remote()
{
ssh -N -f -L 5901:127.0.0.1:5900 "${HOST_USERNAME}"@"${HOST_IP_ADDRESS}"
vncviewer 127.0.0.1:1
}
4 years ago
program_name="${0}"
local_path="${program_name%/qvm}"
. "${local_path}"/fbopt