Libvirt notes

Created at 2024-10-06 09:45
Last edited at 2024-10-14 19:45

Packages on Arch Linux

sudo pacman -S libvirt virt-install virt-viewer qemu-full iptables-nft dnsmasq edk2-ovmf libosinfo

Libvirt system level vs session level

By default the virsh and virt-* commands will use the qemu:///session connection, which launches an unprivileged libvirtd instance (the process name is virtqemud on Arch) running as the current user. There is a system level libvirtd instance launched by systemd.

Differences

Session level virtual machines use qemu user networking, which might have worse performance than the system level networking. The system libvirtd instance has the necessary permissions to use proper networking via bridges or virtual networks. VM autostart on host boot only works for the system level VMs.

The graphical frontend virt-manager uses qemu:///system by default and virtual machines running in unprivileged sessions won’t show up on the GUI.

Use the system level instance

To use the systemwide libvirtd instance --connect qemu:///system has to be specified in the commands. The user has to be a member of the libvirt group.

Get OS variants

osinfo-query os

or

virt-install --osinfo list

Create a VM with virt-install

From an iso file

virt-install \
    --name archvm \
    --memory 2048 \
    --vcpus 2 \
    --disk size=8 \
    --cdrom archlinux-2024.10.01-x86_64.iso \
    --boot uefi \
    --os-variant archlinux

From a qcow2 image

virt-install \
    --name archvm \
    --memory 2048 \
    --vcpus 2 \
    --disk Arch-Linux-x86_64-basic-20241001.267073.qcow2 \
    --boot uefi \
    --import \
    --os-variant archlinux

List VMs

virsh list

Access a running VM with GUI

virt-viewer archvm

Delete VM

virsh destroy archvm
virsh undefine archvm