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.
frnmst/Franco Masotti 5f50745eb5 Typo. 5 years ago
.gitignore Added decent functions and options. Cleanup. Updated readme. 6 years ago
LICENSE Added files. 6 years ago Typo. 5 years ago
configvmrc Added VNC options. 5 years ago
qvm Added VNC options. 5 years ago


Trivial management of 64 bit virtual machines with qemu.

What this script will do

It can handle:

  • Virtual hard disk creation, backup and deletion.
  • Basic network management: two ports are exposed to the host machine (but you can add as many as you want). One of these two ports is SSH (so admin gets simpler).
  • Connection via SSH.
  • Shared directory between host and guest.
  • Last, but not least, running the virtual machine with all these options.

Setup information and usage

  • You need a 64 bit machine with virtualization technology and more than 4 GB of RAM.

  • Modify configvmrc based on your needs. Variables are self-explanatory and I have kept mine as an example.

  • Install the following dependencies

    • GNU Bash
      • Scipting language interpreter
    • GNU Core Utilities
      • Basic software like ls, cat, etc...
    • QEMU
      • The machine emulator
    • TigerVNC
      • If you need to use the vm remotely from a coumputer which does not support virtualization.
  • Create a new VHD and complete the OS installation:

      $ ./qvm -c
      $ ./qvm -i
  • Optionally enable the SSH daemon on the guest machine.

  • Optionally create a new backup VHD:

      $ ./qvm -b
  • Now you can run the virtual machine either using the original or the backup VHD. By deault if you run ./qvm the virtual machine will run in graphics mode using the backup hard disk.

  • Optionally add the following in the gues machine's /etc/fstab, to enable the shared directory automatically (no mount commands of any sort).

      host_share   /home/vm/shared    9p      noauto,x-systemd.automount,trans=virtio,version=9p2000.L   0 0

VNC options

The VNC options in this script allow you to connect to a remote instance of QEMU. This is particularly useful, for example, if your local machine processor does not support virtualization. The only thing to do is to make the server's port (5900) reachable from the clients.

You must then run QVM with one of the VNC options on the server side. On the client side you must simply edit the host_ip_address and host_username variables in the configuration file.

For example, on the server side we could install the virtual machine remotely like this:

$ ./qvm --install-vnc

And on the client side:

$ ./qvm -r

At this point you should see your virtual machine running in a TigerVNC window.

Note: the VNC traffic goes through SSH TCP forwarding, so it is encrypted.


Usage: qvm [OPTION]
Trivial management of 64 bit virtual machines with qemu.

    -a, --attach                connect via SSH
    -b, --backup                backup vhd
    -c, --create                create new vhd
    -d, --delete                delete vhd backup
        --delete-orig           delete original vhd
    -h, --help                  print this help
    -i, --install               install img on vhd
        --install-vnc           install img on vhd via vnc
    -n, --run-nox               run vm without opening a graphical window
                                (useful for background jobs like SSH)
        --run-nox-orig          run-orig and run-nox combined
    -s, --mkdir-shared          create shared directory
    -r, --remote                connect to a vnc instance via ssh
    -x, --run                   run vm
        --run-vnc               run vm with vnc
        --run-orig              run from original vhd
        --run-orig-vnc          run from original vhd with vnc

Only a single option is accepted.
By default, the backup vhd is run.

Written in 2016 by Franco Masotti/frnmst <>