Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Создание ВМ в libvirt с qemu:///session и доступом к bridge сети в Ubuntu 18.04  (Прочитано 330 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн RockBomber

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Всем привет!

С помощью libvirt можно создать виртуальную машину из под обычного пользователя с использованием qemu:///session с доступом к bridge сети (как если бы создавали ВМ с qemu:///system).
Для этого libvirt использует qemu-bidge-helper
По многочисленным инструкциям настройка этого дела сводится к тому, что нужно создать файл /etc/qemu/bridge.conf с указанием доступа к bridge интерфейсу. В Ubuntu по умолчанию он называется virbr0, и содержимое файла /etc/qemu/bridge.conf должно выглядеть так: allow virbr0
Второй нюанс - выставить бит SUID файлу /usr/lib/qemu/qemu-bridge-helper: sudo chmod 4755 /usr/lib/qemu/qemu-bridge-helper

После этого виртуалке можно указывать режим сети bridge и машина должна быть доступна в этой сети.
Я запускаю установку на Ubuntu 18.04 следующим образом:
virt-install --disk none --boot kernel=kernel,initrd=initrd.lz --name test --connect qemu:///session --network bridge=virbr0 --ram 1024
Но процесс падает с ошибкой:
ERROR    internal error: /usr/lib/qemu/qemu-bridge-helper --br=virbr0 --fd=25: failed to communicate with bridge helper: Transport endpoint is not connected
stderr=failed to write fd to unix socket: Socket operation on non-socket

При варианте запуска с qemu:///system или из под sudo с qemu:///session, виртуалка создается успешно, но эти варианты не интересны.

Если запускать отдельно команду /usr/lib/qemu/qemu-bridge-helper --br=virbr0 --fd=25 , то выдается ошибка:
$ /usr/lib/qemu/qemu-bridge-helper --br=virbr0 --fd=25
failed to write fd to unix socket: Bad file descriptor

Если запускать qemu-bridge-helper  из под strace, то будет такой вывод:
$ strace /usr/lib/qemu/qemu-bridge-helper --br=virbr0 --fd=25     
execve("/usr/lib/qemu/qemu-bridge-helper", ["/usr/lib/qemu/qemu-bridge-helper", "--br=virbr0", "--fd=25"], 0x7ffde87b6b30 /* 68 vars */) = 0
access("/etc/suid-debug", F_OK)         = -1 ENOENT (No such file or directory)
brk(NULL)                               = 0x555818691000
fcntl(0, F_GETFD)                       = 0
fcntl(1, F_GETFD)                       = 0
fcntl(2, F_GETFD)                       = 0
access("/etc/suid-debug", F_OK)         = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=138525, ...}) = 0
mmap(NULL, 138525, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f2740f27000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300\257\1\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=1133872, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2740f25000
mmap(NULL, 3232136, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f2740a0c000
mprotect(0x7f2740b1f000, 2097152, PROT_NONE) = 0
mmap(0x7f2740d1f000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x113000) = 0x7f2740d1f000
mmap(0x7f2740d21000, 392, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f2740d21000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libcap-ng.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240\23\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=18712, ...}) = 0
mmap(NULL, 2113848, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f2740807000
mprotect(0x7f274080b000, 2093056, PROT_NONE) = 0
mmap(0x7f2740a0a000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7f2740a0a000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000b\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=144976, ...}) = 0
mmap(NULL, 2221184, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f27405e8000
mprotect(0x7f2740602000, 2093056, PROT_NONE) = 0
mmap(0x7f2740801000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19000) = 0x7f2740801000
mmap(0x7f2740803000, 13440, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f2740803000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\34\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2030544, ...}) = 0
mmap(NULL, 4131552, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f27401f7000
mprotect(0x7f27403de000, 2097152, PROT_NONE) = 0
mmap(0x7f27405de000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7f27405de000
mmap(0x7f27405e4000, 15072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f27405e4000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpcre.so.3", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \25\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=464824, ...}) = 0
mmap(NULL, 2560264, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f273ff85000
mprotect(0x7f273fff5000, 2097152, PROT_NONE) = 0
mmap(0x7f27401f5000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x70000) = 0x7f27401f5000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2740f23000
arch_prctl(ARCH_SET_FS, 0x7f2740f23fc0) = 0
mprotect(0x7f27405de000, 16384, PROT_READ) = 0
mprotect(0x7f2740801000, 4096, PROT_READ) = 0
mprotect(0x7f27401f5000, 4096, PROT_READ) = 0
mprotect(0x7f2740a0a000, 4096, PROT_READ) = 0
mprotect(0x7f2740d1f000, 4096, PROT_READ) = 0
mprotect(0x555817490000, 4096, PROT_READ) = 0
mprotect(0x7f2740f49000, 4096, PROT_READ) = 0
munmap(0x7f2740f27000, 138525)          = 0
set_tid_address(0x7f2740f24290)         = 9555
set_robust_list(0x7f2740f242a0, 24)     = 0
rt_sigaction(SIGRTMIN, {sa_handler=0x7f27405edcb0, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7f27405fa890}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {sa_handler=0x7f27405edd50, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f27405fa890}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
brk(NULL)                               = 0x555818691000
brk(0x5558186b2000)                     = 0x5558186b2000
geteuid()                               = 1000
openat(AT_FDCWD, "/etc/qemu/bridge.conf", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0664, st_size=42, ...}) = 0
read(3, "allow virbr0\ninclude /etc/qemu/a"..., 4096) = 42
openat(AT_FDCWD, "/etc/qemu/asdef.conf", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0640, st_size=10, ...}) = 0
read(4, "allow all\n", 4096)            = 10
read(4, "", 4096)                       = 0
close(4)                                = 0
read(3, "", 4096)                       = 0
close(3)                                = 0
socket(AF_INET, SOCK_STREAM, IPPROTO_IP) = 3
openat(AT_FDCWD, "/dev/net/tun", O_RDWR) = 4
ioctl(4, TUNSETIFF, 0x7ffee6743dd0)     = -1 EPERM (Operation not permitted)
write(2, "failed to create tun device: Ope"..., 53failed to create tun device: Operation not permitted
) = 53
close(4)                                = 0
close(3)                                = 0
exit_group(1)                           = ?
+++ exited with 1 +++

Какая-то ошибка обращения к /dev/net/tun
Если выполняю команду cat /dev/net/tun, то получаю ошибку
$ cat /dev/net/tun
cat: /dev/net/tun: Дескриптор файла в плохом состоянии

При этом на прошлом LTS выпуске Ubuntu 16.04 всё проходит успешно и таких ошибок не наблюдается, нужно только создать симлинк /usr/libexec/qemu-bridge-helper на /usr/lib/qemu/qemu-bridge-helper

Ни кто с таким не сталкивался? Или может кому-то удавалось на Ubuntu 18.04 заставить виртуалку с qemu:///session работать с bridge сетью?

Оффлайн Morisson

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 3147
    • Просмотр профиля
Используйте virt-manager лучше..
Acer E5-571G; Intel Corei5; GPU: IntelHD 4400 + Nvidia 820M; SSD 250 Гб + HDD 500 Гб; RAM 12 Гб, UEFI без загрузчика.
Arch Linux; WM: Xmonad ;ядро: linux-zen

Оффлайн RockBomber

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
virt-manager - это, на сколько я понимаю, просто графическая оболочка над этими же утилитами, по этому поведение будет таким же.

А для моих целей нужно использовать именно утилиты командной строки.

На двух разных инсталляциях Ubuntu 18.04 поведение одинаковое, может исправят в Ubuntu 18.10, хотя хотелось конечно иметь рабочее решение в LTS версии.

 

Страница сгенерирована за 0.147 секунд. Запросов: 23.