LINUX.ORG.RU

Создание вручную виртуальных машин libvirt

 ,


0

2

Создал образ:

qemu-img create -f qcow2 /home/user/media/libvrt/images/nixos/nixos.qcow2 1024G

Далее в virt-manager создал виртуальную машину, взял ее xml и подсунул в /home/user/media/libvrt/images/nixos/vm.xml

Далее я изменил путь до образа qcow2 и делаю

virsh define /home/user/media/libvrt/images/nixos/vm.xml
Domain 'nixos-25.06' defined from /home/user/media/libvrt/images/nixos/vm.xml
virsh start 'nixos-25.06'

out:

error: Failed to start domain 'nixos-25.06'
error: Requested operation is not valid: network 'default' is not active

Далее смотрю:

virsh net-list --all

out:

 Name      State      Autostart   Persistent
----------------------------------------------
 default   inactive   yes         yes

А как мне ее сделать active?

★★★★

Последнее исправление: bryak (всего исправлений: 1)
Ответ на: комментарий от Dimez
sudo virsh net-start default
error: Failed to start network default
error: internal error: Child process (VIR_BRIDGE_NAME=virbr0 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib/libvirt/libvirt_leaseshelper) unexpected exit status 2:
dnsmasq: failed to create listening socket for 192.168.122.1: Address already in use
┌[x]─[user@debian-home]─[]─[ /mnt/home ]
└──╼ sudo netstat -tulpn | grep 192.168.122.1:53
┌[x]─[user@debian-home]─[]─[ /home/user ]
└──╼ sudo ss -lp -n | grep 192.168.122.1:53
┌[x]─[user@debian-home]─[]─[ /home/user ]
└──╼

Никто не сидит на 122.1

bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 2)
Ответ на: комментарий от Dimez

Ну там-то dnsmasq :)

sudo ss -lp -n | grep 0.0.0.0:53
udp   UNCONN 0      0                                                   0.0.0.0:53               0.0.0.0:*    users:(("dnsmasq",pid=2059,fd=4))
udp   UNCONN 0      0                                                   0.0.0.0:5353             0.0.0.0:*    users:(("avahi-daemon",pid=1269,fd=12))
tcp   LISTEN 0      32                                                  0.0.0.0:53               0.0.0.0:*    users:(("dnsmasq",pid=2059,fd=5))

bryak ★★★★
() автор топика
Ответ на: комментарий от Dimez

Да, перевесил dnsmask на 5354 порт, сделал редирект в iptables. Теперь пробую создать сеть и активировать ее

$virsh net-list –all

 Name   State   Autostart   Persistent
----------------------------------------

$virsh net-define /usr/share/libvirt/networks/default.xml

Network default defined from /usr/share/libvirt/networks/default.xml

$virsh net-list –all

 Name      State      Autostart   Persistent
----------------------------------------------
 default   inactive   no          yes

$virsh net-start default

error: Failed to start network default
error: error creating bridge interface virbr0: Operation not permitted

Всякие llm предлагают мне сделать

$sudo virsh net-start default

Но тогда получается следующее:

┌─[user@debian-home]─[]─[ /home/user/media/libvrt/images/nixos ]
└──╼ sudo virsh net-define /usr/share/libvirt/networks/default.xml
Network default defined from /usr/share/libvirt/networks/default.xml

┌─[user@debian-home]─[]─[ /home/user/media/libvrt/images/nixos ]
└──╼ virsh net-list --all
 Name   State   Autostart   Persistent
----------------------------------------

┌─[user@debian-home]─[]─[ /home/user/media/libvrt/images/nixos ]
└──╼ sudo virsh net-list --all
 Name      State      Autostart   Persistent
----------------------------------------------
 default   inactive   no          yes

┌─[user@debian-home]─[]─[ /home/user/media/libvrt/images/nixos ]
└──╼ sudo virsh net-start default
Network default started

┌─[user@debian-home]─[]─[ /home/user/media/libvrt/images/nixos ]
└──╼ sudo virsh net-list --all
 Name      State    Autostart   Persistent
--------------------------------------------
 default   active   no          yes

┌─[user@debian-home]─[]─[ /home/user/media/libvrt/images/nixos ]
└──╼ virsh define /home/user/media/libvrt/images/nixos/vm.xml
Domain 'nixos-25.06' defined from /home/user/media/libvrt/images/nixos/vm.xml

┌─[user@debian-home]─[]─[ /home/user/media/libvrt/images/nixos ]
└──╼ virsh list --all
 Id   Name          State
------------------------------
 -    nixos-25.06   shut off

┌─[user@debian-home]─[]─[ /home/user/media/libvrt/images/nixos ]
└──╼ virsh start nixos-25.06
error: Failed to start domain 'nixos-25.06'
error: Network not found: no network with matching name 'default'

Ну так и правильно, когда я через судо создаю сеть, без судо не видит эту сеть. Не запускать же виртуалки через судо

$cat /etc/group |grep libvirt

libvirt:x:120:user
libvirt-qemu:x:64055:libvirt-qemu,user

$virsh -c qemu:///system list

 Id   Name   State
--------------------
bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 2)
Ответ на: комментарий от bryak

Не запускать же виртуалки через судо

Управление от простого пользователя через virsh -c qemu:///session list не даст возможности управлять сетью - это принципиальное ограничение https://libvirt.org/drvqemu.html#driver-instances

Для работы от простого пользователя надо его добавить в группу libvirt и при проблемах с доступом к qcow2 файлам, в группу libvirt-qemu. Запускать виртуальную машину через (system) virsh -c qemu:///system list --all. После добавления пользователя в группу, polkit будет предоставлять права на выполнение всех необходимых действий.

Для теста можно в /etc/libvirt/libvirtd.conf отключить проверку доступа unix_rw_auth=«none», но это только для теста

Jurik_Phys ★★★★★
()
Последнее исправление: Jurik_Phys (всего исправлений: 1)
Ответ на: комментарий от Jurik_Phys
#gpasswd -a user libvirt
#gpasswd -a user libvirt-qemu
$virsh net-list --all
 Name    State      Autostart   Persistent
--------------------------------------------
 mynet   inactive   no          yes
$virsh net-start mynet
error: Failed to start network mynet
error: error creating bridge interface virbr1: Operation not permitted
/etc/libvirt/libvirtd.conf
#auth_unix_rw = "polkit" --> auth_unix_rw = "none"
#systemctl restart libvirtd
$virsh net-start mynet
error: Failed to start network mynet
error: error creating bridge interface virbr1: Operation not permitted
bryak ★★★★
() автор топика
Ответ на: комментарий от bryak

Я понимаю, но operation not permitted. очевидно, что в правах дело. если на сокет маска прав в три топора не спасает, то попробуй посмотреть кто его создаёт. возможно дебиан специфика и какая-то своя группа ментайнерами заведена.

anonymous
()
Ответ на: комментарий от bryak

Я бы попробовал запускать с указанием --connect=qemu:///system, чтобы быть уверенным в подключении к системному сервису.

По умолчанию подключается к --connect=qemu:///session, где работа с сетью ограничена

Jurik_Phys ★★★★★
()
Последнее исправление: Jurik_Phys (всего исправлений: 1)
Ответ на: комментарий от anonymous
#ls -l /var/run/libvirt
total 0
drwx------ 2 root         root          60 Dec 17 11:16 common
drwxr-xr-x 2 root         root          40 Dec 17 11:16 hostdevmgr
drwx------ 2 root         root          40 Dec 17 14:36 interface
srw------- 1 root         root           0 Dec 17 14:31 libvirt-admin-sock
srw-rw-rw- 1 root         root           0 Dec 17 14:31 libvirt-sock
srw-rw-rw- 1 root         root           0 Dec 17 14:31 libvirt-sock-ro
drwxr-xr-x 2 root         root          80 Dec 17 14:36 network
drwx------ 2 root         root          40 Dec 17 14:36 nodedev
drwx------ 2 root         root          40 Dec 17 14:36 nwfilter
drwx------ 2 root         root          40 Dec 17 11:16 nwfilter-binding
drwxr-xr-x 7 libvirt-qemu libvirt-qemu 160 Dec 17 14:36 qemu
drwx------ 2 root         root          40 Dec 17 14:36 secrets
drwxr-xr-x 2 root         root          60 Dec 17 14:36 storage
srw------- 1 root         root           0 Dec 17 11:16 virtlockd-admin-sock
srw------- 1 root         root           0 Dec 17 11:16 virtlockd-sock
srw------- 1 root         root           0 Dec 17 11:16 virtlogd-admin-sock
srw------- 1 root         root           0 Dec 17 11:16 virtlogd-sock
bryak ★★★★
() автор топика

По ману дебиана https://wiki.archlinux.org/title/Libvirt

sudo cat /etc/polkit-1/rules.d/50-libvirt.rules
/* Allow users in mykvm group to manage the libvirt
daemon without authentication */
polkit.addRule(function(action, subject) {
    if (action.id == "org.libvirt.unix.manage" &&
        subject.isInGroup("libvirt")) {
            return polkit.Result.YES;
    }
});
git diff libvirt/libvirtd.conf
diff --git a/libvirt/libvirtd.conf b/libvirt/libvirtd.conf
index d8bb42b..057f6f0 100644
--- a/libvirt/libvirtd.conf
+++ b/libvirt/libvirtd.conf
@@ -83,6 +83,7 @@
 #
 # This is restricted to 'root' by default.
 #unix_sock_group = "libvirt"
+unix_sock_group = "libvirt"

 # Set the UNIX socket permissions for the R/O socket. This is used
 # for monitoring VM status only
@@ -93,6 +94,7 @@
 # Default allows any user. If setting group ownership, you may want to
 # restrict this too.
 #unix_sock_ro_perms = "0777"
+unix_sock_ro_perms = "0777"

 # Set the UNIX socket permissions for the R/W socket. This is used
 # for full management of VMs
@@ -106,6 +108,7 @@
 # If not using PolicyKit and setting group ownership for access
 # control, then you may want to relax this too.
 #unix_sock_rw_perms = "0770"
+unix_sock_rw_perms = "0777"

 # Set the UNIX socket permissions for the admin interface socket.
 #
@@ -165,6 +168,7 @@
 # To restrict monitoring of domains you may wish to either
 # enable 'sasl' here, or change the polkit policy definition.
 #auth_unix_ro = "polkit"
+auth_unix_ro = "none"

 # Set an authentication scheme for UNIX read-write sockets.
 #
@@ -181,6 +185,7 @@
 # back to 0600, to avoid an insecure configuration.
 #
 #auth_unix_rw = "polkit"
+auth_unix_rw = "none"

 # Change the authentication scheme for TCP sockets.
 #
virsh net-start mynet
error: Failed to start network mynet
error: error creating bridge interface virbr1: Operation not permitted
bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 1)
Ответ на: комментарий от bryak

И ещё раз

virsh --connect=qemu:///system ...

qemu:///session has a serious drawback: since the libvirtd instance does not have sufficient privileges, the only out of the box network option is qemu's usermode networking, which has non-obvious limitations, so its usage is discouraged (more info on qemu networking options)

Jurik_Phys ★★★★★
()
Ответ на: комментарий от bryak

Всё отлично, подключение к системному сервису проходит. Теперь можно в интерактивном режиме смотреть список машин, запускать их (машины из qemu:///session видны не будут), рулить сетью и т.д.

П.С. из первого поста команды будут

virsh --connect=qemu:///system define /home/user/media/libvrt/images/nixos/vm.xml
Domain 'nixos-25.06' defined from /home/user/media/libvrt/images/nixos/vm.xml
virsh --connect=qemu:///system start 'nixos-25.06'
Jurik_Phys ★★★★★
()
Последнее исправление: Jurik_Phys (всего исправлений: 1)

Создание вручную виртуальных машин libvirt

virt-install

DESCRIPTION
       virt-install  is a command line tool for creating new KVM, Xen, or Linux container
       guests using the libvirt hypervisor management library.  See the EXAMPLES  section
       at the end of this document to quickly get started.

       virt-install  tool  supports  graphical  installations  using (for example) VNC or
       SPICE, as well as text mode installs over serial console. The guest can be config‐
       ured to use one or more virtual disks, network interfaces, audio devices, physical
       USB or PCI devices, among others.
futurama ★★★★★
()