4.6 KiB
qemush
- A suckless QEMU wrapper written in shell
How does it work
qemush
allows to run commands as Unix user qemu
to manage virtual machines and their disks associated.
Why
qemush
is daemonless: no bloaty long running process is needed for qemush
to work.
qemush
is lightweight: it only consists in a shell script to automate repeated tasks and force good practices.
qemush
needs few dependencies: see section Dependencies for details.
qemush
is hackable: you can write your own launching scripts to make it work as intended.
qemush
is easy to setup: you can make it work in a few steps, see section Installation instructions.
Good practices?
Here is a list of good practices forced by qemush
.
- Processes running as user
qemu
: members of groupqemu
can manage the same virtual machines - Modularization:
qemush
launching scripts are intended to be stackable to reuse commonqemu
parameters in all virtual machines needing them keep track of them - Copy-on-write: images are formatted using
qcow2
to use less space on disk - Process detachment: you can log out and have your virtual machines still running, control them via Unix sockets
Is it better than libvirt
?
No. qemush
and libvirt
are for different use cases. qemush
will allow you to spin up virtual machines really fast and with as little setup as possible, and aims to be nothing more than a QEMU wrapper, while libvirt
will offer better out-of-the-box experience, with already existing pre-configurations, associated tools like the virt-manager
GUI and a friendlier process supervision. You should use qemush
if you care about controlling every aspect of your virtual machines, and are already used to using bare QEMU without an abstraction layer.
Dependencies
From version 0.9.0, qemush
is written in pure POSIX shell! The previous dependency on bash
was removed in consequence.
All dependencies are common packages for a distribution, you'll be able to grab them from your favorite packages sources.
qemu
- this is literally a QEMU wrapper so there's a chance you'll need itcoreutils
- used for basic OS operationssudo
- execute commands asqemu
socat
- monitor machines via Unix sockets
Installation instructions
QEMU user and group
qemush
acts as Unix user qemu
to manage virtual machines. You need to create a system user qemu
that cannot login, with any home directory, in an Unix group of the same name. Example:
# Example if the qemu user doesn't exist
# Make sure /etc/shells contains /bin/nologin
useradd -r -s /bin/nologin qemu
For ease of use, you need to grant every user in the qemu
group via sudo
the right to execute commands as qemu
. You can find an example sudoers
rule in this repo's etc/sudoers.d
folder.
Via Makefile
(recommended)
Just run the following command at the root of this repository to install qemush
(previous step is mandatory) :
make
And what if I don't want to bindly run this obscure
Makefile
???
You'd be right. The next section is the exhaustive list of steps handled by the Makefile
for the installation process.
Manual installation (what does the Makefile
do)
- Create
disks
,launchers
,shared
,sockets/monitors
,socket/spice
andbin
directories in~qemu
- Copy
qemush
scripts parts fromqemu/bin
in~qemu/bin
with mode740
- Compile C programs from
src
in~qemu/bin
with mode740
- Copy the default launching scripts to
~qemu/launchers
with mode740
; this is optional but the one calledkvm
is the referenceqemush
launching script! - Copy
bin/qemush
to/usr/local/bin/qemush
with mode755
Usage
Writing a launching script
The default text editor used by qemush
is vi
, but it can be overriden by the EDITOR
environment variable.
Run the following command to start editing a launching script by the name of your choice:
qemush edit "$name"
Example scripts are available in this repo's qemu/launchers
folder.
Launching a virtual machine
Virtual machines are identified by the name of their launching scripts. You can launch any machine with the following command:
qemush start "$name"
You can also list all available virtual machines by running this command:
qemush ls
Other uses
You can show the full list of possible actions by running this command:
qemush help