Ну это-то никто тебе не мешает делать и так. Без GUI. Берешь запускаешь qemu/kvm с -monitor tcp -video vnc (там потребуетcя еще после tcp и vnc кое-какие параметры указать, см в мане), и после этого передаешь ему команды посредством
echo command |nc localhost $monitorport
А можно сделать не tcp, а unix-domain сокет. Тогда вместо неудобопонятного имени порта можно будет использовать имя файла в каком-нибудь специальном каталоге, совпадающее с именем машины. Правда, вместо хорошо знакомого netcat придется использовать socat.
И при необходимости к консоли vncviewer-ом коннектишься.
Тут сразу возникает вопрос -- а зачем нужна GUI-запускалка без GUI-создателя образов и launch commandline. Поскольку по-моему, если человек можэт это делать в cli, то и с shutdown он как-нибудь разберётся.
Ну и, разумеется, надо будет непосредственно commandline монитора выдать. Ну, ты в любом случае не всё продумаешь.
Так-то можно накидать вещей, которые периодически нужны, но, думаю, что будет нужно -- допилят, а не допилят -- значит не было нужно.
PS А события system_suspend нет потому, что нет такой кнопки в типичном компьютэре. poweroff есть, RESET возможэн независимо от, а вот suspend -- нету. Есть только state в APM/ACPI.
Образы жестких дисков создаются раз в несколько лет. Для такого случая можно и qemu-img руками запустить. Там все просто. А вот подключать-отключать removable устройства нужно каждый день.
И набирать 8 шестнацатиричных цифр USB-шного vendor_id:product_id в мониторе лениво, хочется устройство из меню выбрать.
Задача не "сделать за пользователя то, в чем он разобраться не может", а "сделать удобно и минимумом телодвижений и достаточно удобочитаемой визуализацией (достаточно удобочитаемая - это не максимальная, это словам тесно, а информации просторно) то, что пользователю надо делать наиболее часто.
Кнопка suspend в типичном компьютере как раз есть. На ноутбуке это обычно Fn+какая-то функциональная клавиша, а на десктопах уже лет десять как специальную клавишу с изображением луны на клавиатуру лепят.
Вопрос в том, а зачем тогда команда wakeup, если у команды suspen нет.
Издеваисси! Пользователь по хорошему счету вообще не должен видеть таких вещей как IP-адреса, USB-id и прочей цифровой абракадабры. Поэтому нужна менюшка: "вот у нас есть такие девайсы: Integrated Camera, StoreJet Transcend и BCM43142A0 - который из них подключаем?"
Пользователь будет все равно путаться, потому что воткнул две одинаковых флэшки - пойди разбери какая там какая. Но USB-id у них тоже будет одинаковый. (кстати, надо предусмотреть такую фишку - если имеются два устройства с одинаковым usb_id, поключать их по bus/address/port)
Это совсем другая задача. Под нее есть virt-manager и Proxmos.
Хотя virt-manager и для этой задачи плох, потому что там решили поставить себе амбициозную цель поддержать все возможные системы виртуализации. И получилось что каждую из них поддержали плохо.
Мне - не нужен web-интерфейс, при крайней необходимости клиента я могу через ssh X forwarding запустить.
>при крайней необходимости клиента я могу через ssh X forwarding запустить Есть мнение, что в этом случае если между машинами интернет, как правило будет наблюдаться слайд-шоу. VNC в этом смысле несколько лучше.
А как он работает? Какой нужно взять spice-viewer, чтобы у него не было зависимости от libvirt, как именно его встраивать в приложения и какие возможности там будут?
Будет там проброс USB-устройств с рабочего места пользователя на удаленный сервер с vm? А шейринг клипборда с хостом?
И не потребуется ли писать офигенно толстый демон, который будет менеджить коннекты клиентов к QEMU?
Вопрос: а зависимости самого libvirt'а тоже несносные? В принципе, делать управление через libvirt (как альтернативу virt-manager) - имхо хорошая идея.
Штука к qemu тоже интересная, но проблема в том, что qemu, если утрировать, то это просто такой хитрый процесс в системе, который "сам по себе" и ничего не знает ни о сети, ни о дисках, ни о концепции "виртуальной машины". Этакая сильно перенизкоуровневая jvm, перепиленная под другие архитектуры, и умеющая kvm.
qemu знает про диски только пока запущен. Как только виртуалка остановилась, "состав" виртуалки исчезает, остаётся только файл диска /lv и всё. libvirt же при этом помнит, какой диск к какой виртуалке относится, в какой бридж должна быть воткнута виртуалка (и может этот бридж поднять).
У меня по продакшену к libvirt'у одна претензия - xml в определении домена. был бы yaml, был бы душка.
Comments 39
Reply
Берешь запускаешь qemu/kvm с -monitor tcp -video vnc
(там потребуетcя еще после tcp и vnc кое-какие параметры указать, см в мане), и после этого
передаешь ему команды посредством
echo command |nc localhost $monitorport
А можно сделать не tcp, а unix-domain сокет. Тогда вместо неудобопонятного имени порта можно будет использовать имя файла в каком-нибудь специальном каталоге, совпадающее с именем машины. Правда, вместо хорошо знакомого netcat придется использовать socat.
И при необходимости к консоли vncviewer-ом коннектишься.
Reply
>В управление сетевыми устройствами
Тут сразу возникает вопрос -- а зачем нужна GUI-запускалка без GUI-создателя образов и launch commandline. Поскольку по-моему, если человек можэт это делать в cli, то и с shutdown он как-нибудь разберётся.
Ну и, разумеется, надо будет непосредственно commandline монитора выдать. Ну, ты в любом случае не всё продумаешь.
Так-то можно накидать вещей, которые периодически нужны, но, думаю, что будет нужно -- допилят, а не допилят -- значит не было нужно.
PS А события system_suspend нет потому, что нет такой кнопки в типичном компьютэре. poweroff есть, RESET возможэн независимо от, а вот suspend -- нету. Есть только state в APM/ACPI.
Reply
И набирать 8 шестнацатиричных цифр USB-шного vendor_id:product_id в мониторе лениво, хочется устройство из меню выбрать.
Задача не "сделать за пользователя то, в чем он разобраться не может", а "сделать удобно и минимумом телодвижений и достаточно удобочитаемой визуализацией (достаточно удобочитаемая - это не максимальная, это словам тесно, а информации просторно) то, что пользователю надо делать наиболее часто.
Кнопка suspend в типичном компьютере как раз есть. На ноутбуке это обычно Fn+какая-то функциональная клавиша, а на десктопах уже лет десять как специальную клавишу с изображением луны на клавиатуру лепят.
Вопрос в том, а зачем тогда команда wakeup, если у команды suspen нет.
Reply
>набирать 8 шестнацатиричных цифр USB-шного vendor_id:product_id в мониторе лениво
Допишы нормальный compmletion в qemu cli.
Reply
Integrated Camera, StoreJet Transcend и BCM43142A0 - который из них подключаем?"
Пользователь будет все равно путаться, потому что воткнул две одинаковых флэшки - пойди разбери какая там какая. Но USB-id у них тоже будет одинаковый. (кстати, надо предусмотреть такую фишку - если имеются два устройства с одинаковым usb_id, поключать их по bus/address/port)
Reply
Reply
Хотя virt-manager и для этой задачи плох, потому что там решили поставить себе амбициозную цель поддержать все возможные системы виртуализации. И получилось что каждую из них поддержали плохо.
Мне - не нужен web-интерфейс, при крайней необходимости клиента я могу через ssh X forwarding запустить.
Reply
Есть мнение, что в этом случае если между машинами интернет, как правило будет наблюдаться слайд-шоу. VNC в этом смысле несколько лучше.
Reply
Reply
Reply
Будет там проброс USB-устройств с рабочего места пользователя на удаленный сервер с vm?
А шейринг клипборда с хостом?
И не потребуется ли писать офигенно толстый демон, который будет менеджить коннекты клиентов к QEMU?
Reply
Штука к qemu тоже интересная, но проблема в том, что qemu, если утрировать, то это просто такой хитрый процесс в системе, который "сам по себе" и ничего не знает ни о сети, ни о дисках, ни о концепции "виртуальной машины". Этакая сильно перенизкоуровневая jvm, перепиленная под другие архитектуры, и умеющая kvm.
Reply
Reply
У меня по продакшену к libvirt'у одна претензия - xml в определении домена. был бы yaml, был бы душка.
Reply
Но городить для этого охрененную библиотеку с демонами - это явный overengineering.
Типичный unix-way для сохранения набора команд для какой-то программы, написать скрипт, интерпретатором которого будет эта программа
Скрипт выглядит примерно так:
#!/usr/bin/qemu-system-x86_64 -readconfig
# qemu config file
[drive]
file = "/home/virtual/images/Asta.qcow2"
if = "ide"
media = "disk"
[chardev "vdagent"]
backend = "spicevmc"
name = "vdagent"
[device]
driver = "virtio-serial"
...
Этот формат современный qemu вполне умеет.
Reply
Leave a comment