-
Notifications
You must be signed in to change notification settings - Fork 8
LibVirt
LibVirt is universal virtualization layer - it supports several hypervisors (QEMU+KVM, Xen, ...) and even containers (called LXC however it uses different toolset for these).
Note: because libvirt started as wrapper on Xen it uses (sometimes confusing) Xen terms - for example 'destroy'
normally means "stop" or "shutdown" but Not delete... Similarly create
means start
(fortunately there is now
also start
command)
Installation under Fedora 40:
$ sudo dnf install libvirt-daemon-kvm libvirt-daemon-config-network libvirt-client-qemu
$ sudo dnf install virt-manager # pouplar GUI for LibVirt
# ensure that creepyware geoclue2 is masked:
$ sudo systemctl mask --now geoclue
$ sudo rm -f /etc/xdg/autostart/geoclue-demo-agent.desktop
If you plan to use virt-manager
remotely via SSH X11 Forwarding
you have to install
these packages on Server (with virt-manager
):
# required
$ sudo dnf install xorg-x11-xauth
# optional - for testing
$ sudo dnf install xclock xterm
Also on your SSHd server enable X11 forwarding, for example, create /etc/ssh/sshd_config.d/99-local.conf
with contents:
X11Forwarding yes
And restart SSHd with systemctl restart sshd
Also ensure that your SSH client requests X11 forwarding, here is excerpt from my ~/.ssh/config
Host f40lvm-s350
HostName 192.168.0.X
User USERNAME
IdentityFile ~/.ssh/MY_SSH_KEY
IdentitiesOnly yes
HostKeyAlias f40lvm-s350
ForwardX11 yes
Now try ssh connection from your client using alias, in my example: ssh f40lvm-s350
And try some X11 application, for example xclock
(use Ctrl-C in terminal to quit)
But before running virt-manager
please read following chapter:
By default when you run any libvirt command it will use your private User connection (called "session"). So all
networks and disks and VMs will be available to you only (and data stored under $HOME/.local
)
To use always shared global (called system
) connection you have to:
- Add yourself to
libvirt
group using:sudo /usr/sbin/usermod -G libvirt -a $USER
- Create file
~/.config/libvirt/libvirt.conf
with following content:# see https://listman.redhat.com/archives/libvirt-users/2018-October/msg00067.html uri_default = "qemu:///system"
On Fedora I have to enable and start "libvirtd legacy service" with:
$ sudo systemctl enable --now libvirtd
To avoid virsh
client error:
Failed to connect socket to '/var/run/libvirt/virtqemud-sock': No such file or directory
Remember that you should logout and login to ensure that you are member of group libvirt
.
Then you can for example try listing networks or pools:
$ virsh net-list
Name State Autostart Persistent
--------------------------------------------
default active yes yes
$ virsh pool-list
Name State Autostart
---------------------------
If there is no pool you can follow guide from Ubuntu MAAS KVM. Run as you (non-privileged user)
virsh pool-define-as default dir - - - - "/var/lib/libvirt/images"
virsh pool-autostart default
virsh pool-start default
virsh pool-list
Name State Autostart
-------------------------------
default active yes
virsh pool-dumpxml default
...
At least when using NAT network we can pass option log-queries
to dnsmasq
that is used to
provide both DHCP and DNS server for NAT network.
I followed various sources including: https://serverfault.com/a/1017645
Here is diff of default
network - using virsh net-edit default
or using virsh net-dumpxml default
:
diff -u default.xml default-log-queries.xml
--- default.xml 2024-07-01 19:15:27.965334382 +0200
+++ default-log-queries.xml 2024-07-01 19:28:14.214143882 +0200
@@ -1,4 +1,4 @@
-<network connections='1'>
+<network xmlns:dnsmasq='http://libvirt.org/schemas/network/dnsmasq/1.0'>
<name>default</name>
<uuid>2c9b8477-9b7c-4ca5-8c20-f1fbcc7df3c3</uuid>
<forward mode='nat'>
@@ -14,5 +14,8 @@
<range start='192.168.100.128' end='192.168.100.254'/>
</dhcp>
</ip>
+ <dnsmasq:options>
+ <dnsmasq:option value='log-queries'/>
+ </dnsmasq:options>
</network>
And then you have to restart network using (scary) destroy and start:
virsh net-destroy default
virsh net-start default
You can also peek content of /var/lib/libvirt/dnsmasq/default.conf
if there is
your option (log-queries
in our case).
After restart you can try on Host:
journalctl -u libvirtd -f
And boot any VM that uses NAT network under LibVirt.
Copyright © Henryk Paluch. All rights reserved.
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License