Building a VM with virt-install

Introduction

This assumes that the network will be used in macvtap mode. This is the preferred method, as it is faster than a regular bridge and does not need any additional network configuration on the host.

The disadvantage of macvtap is that host-to-vm and vm-to-host communication is blocked. This can be worked around with an internal switch, or by having the macvtap connection bind to a second interface.

Creating the VM

The following command assumes the machine type is linux2020 and the network card is eno1. It should be run as the root user or with sudo, and should be run inside tmux for safety.

virt-install --name rhel9                                        \
   --osinfo linux2020                                            \
   --boot uefi                                                   \
   --cdrom /var/lib/libvirt/isos/rhel-baseos-9.1-x86_64-dvd.iso  \
   --disk /var/lib/libvirt/images/rhel9.qcow2,size=20            \
   --network type=direct,source=enp2s0,source_mode=bridge        \
   --graphics vnc                                                \
   --console pty,target.type=virtio                              \
   --autoconsole none

Highlighted paths and names should be changed as appropriate. The VNC port can be found for this example by running virsh vncdisplay rhel9.

Alternative install options

Import a template image by copying the template into place and replacing --cdrom /path/to/disc.iso with --import. The file size is not needed in the --disk option in this case.

PXE-boot a VM by replacing the --cdrom /path/to/disc.iso option with --pxe.

Tips

For a virtio network card on Windows machines, add model=virtio to the --network option.

Other useful options are --memory 4096 for 4 GB RAM, and --vcpus 2 for a dual-CPU guest.

A list of supported operating systems can be found by running virt-install --osinfo list.

If the host hypervisor has a bridged network set up already, such as br0, replace the --network option with --network bridge=br0.