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 OS is "rhel9.1" 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 rhel9.1 \ --boot uefi \ --cdrom /var/lib/libvirt/isos/rhel-baseos-9.1-x86_64-dvd.iso \ --disk /var/lib/libvirt/rhel9.qcow2,size=20 \ --network type=direct,source=enp2s0,source_mode=bridge \ --graphics vnc \ --console pty,target.type=virtio \ --autoconsole none 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