Virt-manager: Difference between revisions
Added an explanation on how to config Virt-manager to be able to share folders with guest VM. |
SummerTime (talk | contribs) Unable to find 'efi' firmware |
||
| (4 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
[https://virt-manager.org/ Virt-manager] (a.k.a. Virtual Machine Manager) is a GUI application for managing local and remote virtual machines through [[libvirt]]. It primarily targets KVM VMs, but also manages Xen and LXC (Linux Containers). | |||
== | == Prequisites == | ||
Though Virt-manager (using the KVM hypervisor) is able to take advantage of virtualisation capabilities without any UEFI/BIOS configuration, best performance demands that the host have Vt-x and Vt-d (Intel) or AMD-V and AMD-Vi (AMD) enabled. | |||
These settings can usually be found under the UEFI/BIOS settings. | |||
== Installation == | == Installation == | ||
In your configuration file add: | |||
{{File|3=virtualisation.libvirtd.enable = true; | |||
programs.virt-manager.enable = true;|name=/etc/nixos/configuration.nix|lang=nix}}{{Note|<br/><br /><code>authentication unavailable: no polkit agent available to authenticate action 'org.libvirt.unix.manage'</code> | |||
To resolve, add your user to the libvirtd group: | |||
{{File|3={ | |||
{ | |||
users.users.<myuser>.extraGroups = [ "libvirtd" ]; | users.users.<myuser>.extraGroups = [ "libvirtd" ]; | ||
} | }|name=/etc/nixos/configuration.nix|lang=nix}}|leading=After rebuild, you may get the following error:}} | ||
=== Networking === | === Networking === | ||
To use the default libvirt network, you will need to install the <code>dnsmasq</code> package. This is required for DNS and DCHP functionality within the network: | |||
This | |||
{{File|3=environment.systemPackages = with pkgs; [ | |||
dnsmasq | |||
];|name=/etc/nixos/configuration.nix|lang=nix}} | |||
The default network starts off inactive, you must enable it before it is accessible. This can be done by running the following command: <syntaxhighlight lang="console"># virsh net-start default</syntaxhighlight>And if you would like to enable it automatically at boot:<syntaxhighlight lang="console"> | |||
# virsh net-autostart default | |||
</syntaxhighlight>By default, this will enable a virtual network bridge under the name <code>virbr0</code>. You may need to allow it through your firewall filter like so: | |||
{{File|3=networking.firewall.trustedInterfaces = [ "virbr0" ];|name=/etc/nixos/configuration.nix|lang=nix}} | |||
=== Display === | |||
The default video may not allow different resolutions and is limited. It is recommended to use Virtio instead. | |||
For information on how to use Virtio with your VM's, [https://wiki.libvirt.org/Virtio.html you can read up on Virtio on the libvirt wiki]. | |||
=== Shared folders === | === Shared folders === | ||
| Line 72: | Line 66: | ||
name = "Vanilla-DMZ"; | name = "Vanilla-DMZ"; | ||
}; | }; | ||
== Troubleshooting == | |||
=== Unable to find 'efi' firmware === | |||
The following guide is to fix the following error which will occur when starting a virtual machine after NixOS upgrade: | |||
<code>Error: Error starting domain: operation failed: Unable to find 'efi' firmware that is compatible with the current configuration</code> | |||
Solution: | |||
# Delete old generations: <code>nix-collect-garbage -d</code> | |||
# Find where the EFI boot loaded file is located: <code>find /nix/store/ -maxdepth 1 -type d -name "*qemu*" | xargs -I {} find "{}" -type f -name "edk2-x86_64-secure-code.fd"</code> Find the dir holding the latest qemu. The directory should be something like: <code>xbfjilai721rzd9rf9dhhpv03xza4xp4-qemu-9.1.3</code>. Take a note of this directory name. | |||
# Open VM in virt-manager, go to XML and within the <code><os ...></code> tag: | |||
## Edit <code><loader ...></code> with the above directory name | |||
## Edit <code><nvram ...></code> with the above directory name. | |||
[[Category:Virtualization]] | [[Category:Virtualization]] | ||