- Project Overview
- Dev Message
- Features
- Installation Guide
- Requirements
- Usage
- Configuration
- Contributing
- License
This project implements a Type 2 hypervisor for Linux-based x86_64
systems using QEMU (Quick Emulator)
written in Bash
. QVM
is designed to facilitate the effecient use of QEMU which is a generic and open-source machine emulator and virtualizer that allows guest operating systems to run as an application on top of an existing operating system. This implementation focuses on providing a user-friendly, efficient, and flexible virtualization solution for various guest operating systems.
As a long-time Linux user and VM enthusiast, I've encountered numerous challenges in running virtual machines on Linux. These experiences inspired me to create QVM, a new virtualization solution that addresses common pain points. Over the years, I've experimented with various hypervisors and virtualization software on Linux systems. While Windows users have Hyper-V and VMware Workstation, and macOS users have Parallels and VMware Fusion, Linux users have traditionally relied on VirtualBox, Gnome Boxes and Virt-Manager, with the latter two being my go to virtualisation tools, each used for a specific aspect of managing VM's as I generally avoid using VirtualBox.
In autumn 2024, I discovered that virt-manager was deprecated, which explained some recent frustrations. This realization, coupled with the lack of a suitable alternative, motivated me to develop QVM. My goal was to combine the best features of virt-manager and GNOME Boxes to create a compelling alternative for Linux virtualization needs. Interestingly, after creating QVM, I came across a 2018 paper by Dr. Emmanuel Ogunshile, who had proposed a similar concept called "qvm: A command line tool for the provisioning of virtual machines". While Ogunshile's qvm was developed in Python and utilized YAML for configuration, the QVM I unknowingly created was implemented in Bash. This coincidental parallel development highlights the ongoing need for efficient virtualization tools in the Linux community.
- Core Technology: QVM is built on QEMU and is supported by KVM, providing powerful, hardware-assisted virtualization.
- Streamlined Interface: Unlike libvirt, QVM interfaces directly with QEMU for a more efficient experience.
- User-Friendly: QVM offers both a lightweight CLI and a user-friendly GUI for managing virtual machines.
As my first truly open-source software development project, developing QVM has been an enlightening experience. Overcoming various challenges has deepened my understanding of the emulation processes and boosted my confidence in tackling complex projects.
I hope QVM will become a valuable tool for the virtualization community. Your feedback and contributions are welcome as I continue to improve and expand its capabilities.
Happy virtualizing!
QVM Developer
- Multiple OS Support: Run various Linux-based guest operating systems, including Debian, ArchLinux, Kali Linux, Ubuntu, RaspiOS, and other specialized systems.
- Lightweight & Effecient:
QVM
is a sleek & efficientType 2 hypervisor
that leaves minimal footprint while maximising performance with seamless integration across platforms. - Hardware Emulation: Emulate a wide range of hardware devices, including CPUs, network cards, and storage devices.
- Disk Image Management: Utilizes the
qcow2
format for efficient disk space usage and snapshot capabilities.raw
,vdi
,vmdk
&vhd
formats can also be used. - VM Templating: Create and manage VM templates for quick and efficient replication of virtual machines.
- Memory Management: Configure and optimize VM memory usage with various backend options.
- NUMA Support: Enable
Non-Uniform Memory Access (NUMA)
for improved performance in multi-processor systems. - KVM & VGA Support: Enable
Kernel-based Virtual Machine
support and use KVM virtualization features to further enhance performance.VGA
graphics display drivers can be used instead of default QEMU graphics drivers for specialised use-cases.
Note:QVM (QEMU Virtual Machine Manager) - v1.0.3
is currently in a testing phase, with confirmed functionality on Kali Linux
systems. While the tool itself operates stably once properly configured, users should be aware that the installation process can be sensitive to different environments. The primary challenge lies in the interpretation of bash scripts by various shell environments
. As a result, QVM
may not function correctly outside of a bash shell environment
. Users attempting to install or run QVM on other systems or in other shell environments may encounter unexpected issues or failures.
Therefore, I recommend using a bash shell
when running QVM
for the best experience. I am actively working to improve compatibility across different platforms and shells and hope for this to be resolved in the official v1.0.4
release. For more information see the QVM Issues page. If you experience any issues while running QVM inside a bash environment, please do raise an issue about it as it will allow me to make the code more robust.
This application is primarily developed and tested on a Kali Linux system.
See here for more information about which systems QVM has been tested on.
First, make sure that your system is up-to-date & that git
& curl
are installed & also up-to-date:
Using apt
:
sudo apt update && sudo apt upgrade -y
sudo apt install git curl -y
Using pacman
:
sudo pacman -Syu --noconfirm
sudo pacman -S git curl --noconfirm
To install QVM-Manager
, use the following command:
curl -fsSL https://raw.githubusercontent.com/RoyalHighgrass/QVM-Manager/main/QVM/config.sh | bash
Not using apt
or pacman
?
Note: If you are not using apt
or pacman
as your package manager, you will have to install all required packages mannually before running the ./QVM/config.sh
command which should ask you if you have done so and are ready to proceed.
Proceeding without manually installing all necessary packages will cause the installation to fail.
Note: Once the installation is complete, the QVM
icon should automatically appear in your systems application menu and application search results. In the event that this does not happen, you will most likely need to either; run the 'sudo update-desktop-database
' command or restart your system, possibly both.
To uninstall QVM-Manager
, you can use the following command:
qvm-manager --uninstall
All packages listed below are essential minimum requirements for QVM to function properly and (except for YAD) are all available through the Debian, Ubuntu and Kali Linux repositories via apt
. Arch Linux users can install them or any alternative versions and YAD
using pacman
. If you're using a package manager other than apt
or pacman
, you'll need to manually install all the required packages and will most likely have to find suitable alternatives if the exact package isn't available via your preferred package manager.
Additional packages of your choosing can be added as needed for enhanced functionality.
Note: A required package may simply be a component of another package, meaning that you'll need to install the parent package to access its components.
wget
tree
cut
original-awk
mawk
gawk
find
locate
zenity
wmctrl
make
cpu-checker
intltool
autoconf
gtk-layer-shell-doc
gtk4-layer-shell-doc
libgtk-3-common
libgtk-4-common
libgtk-3-0t64
libgtk-3-dev
yad (pacman/github)
acpi
bc
cgroup-tools
libvirt-clients
libvirt-daemon-system
bridge-utils
virtinst
libvirt-daemon
libvirt-clients-qemu
qemu-kvm
qemu-system-common
qemu-system-arm
qemu-system-x86
qemu-efi-aarch64
qemu-system-modules-opengl
qemu-utils
grub-firmware-qemu
mgba-sdl
libsdl2-2.0-0
libsdl2-net-2.0-0
mednafen
Start QVM's CLI interface:
qvm-manager
Launch GUI interface:
qvm-manager --gui
Get version info:
qvm-manager --version
Show help message:
qvm-manager --help
Save a VM snapshot:
qvm-manager --snap <vm_name> --tag <snapshot_name>
Roll back a VM to a previous state:
qvm-manager --revert <vm_name> --tag <snapshot_name>
For more advanced usage and configuration options, please refer to the User Manual documentation.
The hypervisor VM specifications can easily be configured using command-line application interface, and templating can be implemented via the graphical user interface. Some key configuration areas include:
- Memory allocation
- CPU cores used
- Network interfaces
- Display drivers
- Audio interfaces
- KVM & VGA intergration
- Virtual hardware
- Storage devices
- Shared memory
- Host keyboard sharing
Contributions to the project are welcome! Please read the CONTRIBUTING.md file for guidelines on how to submit pull requests, report issues, and suggest improvements.
This project is licensed under the GNU General Public License v3.0. See the LICENSE file for more details.