Server
The following commands should be executed as the root
user. This is going to be a headless system so no graphical components are necessary; --no-install-recommends
will prevent them from being installed and lead to a lighter OS.
apt install --no-install-recommends qemu-kvm qemu-utils libvirt-clients libvirt-daemon-system netcat-openbsd dnsmasq
After installing these, the libvirt
processes will start automatically so we can connect to it locally.
We also want a nonroot user for managing these VMs.
useradd -m <name> -s /bin/bash -G libvirt
mkdir /home/<name>/.ssh
cp ~/.ssh/authorized_keys /home/<name>/.ssh
chown -R <name>: /home/<name>
The next line is only necessary if you use kitty as your terminal.
cp -r ~/.terminfo /home/<name>/
cp ~/.bashrc /home/<name>/
chown -R <name>: /home/<name>
Before setting your local machine up for managing VMs, download an image or two. I always recommend Debian of course. Depending on what application it'll be used for, you may want to consider Debian Testing as it will have more up-to-date packages. I also recommend Alpine Linux if you want something more lightweight. Keep in mind, however, that this will require more setup. Unfortunately, some applications have a hard requirement for Ubuntu so you may want to download that as well. All of these images should be stored in /var/lib/libvirt/images
Local
Wikipedia>Virt manager will be used to manage these VMs and it can be installed on virtually (heh) any Linux system.
apt-get install virt-manager (Debian/Ubuntu)
pacman -S virt-manager (Arch)
yum install virt-manager (Fedora)
emerge virt-manager (Gentoo)
pkg_add virt-manager (OpenBSD)
Open the Virtual Machine Manager application then go to File
-> Add connection
. Set the first field to QEMU/KVM
, check the SSH box, fill in Username
with what you used above for <name>
, and your hostname is whatever you have set in your SSH config. I also recommend checking Autoconnect
but it's not absolutely necessary.
VM creation is very specific to the service you'll be running in it. However, here is a general overview. To create a new VM, click the button in the top left then choose Local install media
then click Browse
. You'll be able to choose your .iso
there. After making your selection, clear the text in the Choose the operating system . . .
field then start typing the name of whatever the OS. In the case of debian-10.4.0-amd64-netinst.iso
, you'd want to type Debian
then select Debian 10
. Continue and allocate whatever RAM/CPU you want to give the server; The defaults will generally be adequate but you may want to bump them up a little. Storage is even more specific to the service but 30 GB will typically do well unless you're running a storage or media server. In those cases, you'll want a lot more. Continuing, name the volume whatever you'd like (nc1
for Wikipedia>Nextcloud, ws1
for a webserver, something along those lines), and optionally tick the box to Customise configuration before install
. I do recommend this as you'll be able to delete some extraneous features like a virtual sound card.
VM config
-
Boot Options
-
✅ Start virtual machine on host boot up
-
-
Right-click and remove
Sound <card>
Unless you know you want to change something else, leave the rest as it is for now and click ✅ Begin Installation
at the top of that window. Once it's finished, you'll be dropped to the OS's installer screen. See the related guides for Debian, Alpine, and Ubuntu.