А я так изгаляюсь
в QEMU/KVM например без
GUI (
Менеджер виртуальных машин).
Правильно устанавливаем сего зверя:(в коде всё же есть пакет
GUI -
virt-manager на всяк. случай, если захотите в графическом режиме работать. В
Программы обзывается -
Менеджер виртуальных машин)
sudo apt install qemu-kvm libvirt-daemon-system virt-manager bridge-utils ovmf -y
Далее, везде, ниже, где в кодах будет написано
ваше_имя_Пользователя, не забываем вписать его - ваше
Имя Пользователя в системе, например:
vasyapupkin!!!
Имя
ВМ в данном примере её создания из
ubuntu-22.04-desktop-amd64.iso-файла будет
ubuntu (вы можете использовать любой образ, любой
ОС).
Вы можете обозвать, как вам угодно...
Сразу же, чтобы в дальнейшем при создании/старте ВМ не было ошибки Permission denied (отказано в доступе) к созданному ниже каталогу и подпапки в нём libvirt/images, устанавливаем правильные ACL-права доступа для пользователя libvirt-qemu в Домашнем каталоге:(вы спросите: -
А для чего?! А, для того, чтобы была возможность создавать сколько угодно
ВМ и любого размера, что нельзя сделать в каталоге по умолчанию
/var/lib/libvirt/images)
sudo setfacl -m u:libvirt-qemu:rx /home/ваше_имя_Пользователя/
Создание в Домашнем каталоге папки (каталога) libvirt и подпапки images (или с др. названиями, удобными вам):(по умолчанию аналогичный каталог с папкой находится в корне ФС
/, а именно в
/var/lib/libvirt/images и ограничен размером корня и, как правило, у продвинутых пользователей
Домашний каталог
/home отдельно от него и всегда намного больше корневого)
mkdir -p libvirt/images
Создаём pool с именем default в созданном выше в Домашнем каталоге папки (каталога) libvirt и подпапки images:(имя пула
default условное. Вы можете задать любое, удобное вам, но тогда далее в кодах ниже его и надо будет прописывать
вместо default)
virsh pool-define-as --name default --type dir --target /home/ваше_имя_Пользователя/libvirt/images
Запускаем созданный pool default:virsh pool-start default
Помещаем созданный pool default в автозагрузку, чтобы после перезагрузки системы от стартовал вместе с ней:virsh pool-autostart default
Создание VM в режиме UEFI:(расписывать роль каждого префикса не буду,
virt-install --help в помощь. В коде
size=30 - это размер в
Гб самой
ВМ,
--ram=2048 - это размер оперативки,
--vcpus=2 - это виртуальное количество ядер процессора. Вы можете изменять эти значения на свой вкус и цвет)
Пути папочек (каталогов) у вас могут быть свои и отличаться от кода здесь...
a)virt-install --virt-type=kvm --name ubuntu --ram=2048 --vcpus=2 --cpu host --hvm --disk path=/home/ваше_имя_Пользователя/libvirt/images/ubuntu,size=30,format=raw --cdrom /home/ваше_имя_Пользователя/Загрузки/ubuntu-22.04-desktop-amd64.iso --graphics spice --boot uefi
b) - если при старте создания ВМ (например с
mini.iso), при варианте
a) выдаст
ошибку, что название
ОС не опрделено:
ERROR
--os-variant/--osinfo OS name is required, but no value was
set or detected.
This is now a fatal error. Specifying an OS name is required
for modern, performant, and secure virtual machine defaults.
If you expected virt-install to detect an OS name from the
install media, you can set a fallback OS name with:
--osinfo detect=on,name=OSNAME
You can see a full list of possible OS name values with:
virt-install --osinfo list
If your Linux distro is not listed, try one of generic values
such as: linux2020, linux2018, linux2016
If you just need to get the old behavior back, you can use:
--osinfo detect=on,require=off
Or export VIRTINSTALL_OSINFO_DISABLE_REQUIRE=1
virt-install --virt-type=kvm --name ubuntu --ram=2048 --vcpus=2 --cpu host --hvm --disk path=/home/ваше_имя_Пользователя/libvirt/images/ubuntu,size=30,format=raw --cdrom /home/ваше_имя_Пользователя/Загрузки/mini.iso --osinfo detect=on,require=off --graphics spice --boot uefi
Запуск/старт VM:(сразу скажу, что опперанд & в конце команд даёт возможность далее пользоваться этим же окном Терминала, например, для коннекта/дисконекта флешки, создания скриншотов ВМ. Просто жмёте в активном этом окне Терминала Ctrl+C, ВМ продолжает работать, а вы продолжаете в Терминале делать, всё что угодно...)
virsh start ubuntu
или с флешкой (см ниже в разделе подключение флешки)
virsh start ubuntu; virsh attach-device ubuntu usb.xml
virt-viewer --connect qemu:///system -w -d ubuntu &
или одной командой:
virsh start ubuntu; virt-viewer --connect qemu:///system -w -d ubuntu &
Выключение VMa.)
virsh shutdown ubuntu
или, когда бывает, что не выключается, то изящно-принудительно
virsh destroy ubuntu --graceful
b.)
virsh detach-device ubuntu usb.xml; virsh shutdown ubuntu
(с отключением флешки)
Подключение/выключение флешкиОпределение номера флешки (
Device):
lsusb
Создание
xml-файла в
Домашнем каталоге хоста:
(не забываем вместо
номер_флешки в коде вставить её
номер из вывыда выше)
echo -e "<hostdev mode='subsystem' type='usb'>\n <source>\n <address bus='1' device='номер_флешки'/>\n </source>\n</hostdev>" | tee usb.xml > /dev/null
Подключение флешки:
virsh attach-device ubuntu usb.xml
Отключение флешки:
virsh detach-device ubuntu usb.xml
Создание скриншотов VMДля чего?
Ну, например, если вы пишете статью о
Установке того или иного дистрибутива для своего блога и сопровождаете её скриншотами процесса установки или просто для себя, чтобы потом визуально смотреть процесс установки шаг за шагом.
1. Создание скриншотов активного окна
ВМ в выбранную папку в
QEMU/KVM в формате
.ppm.
Вы спросите, а почему именно в формате
.ppm, если можно сразу в
.png или
.jpg и т.д.?
Дело в том, что, да, можно, но!
Скриншот сохраняется и даже просматривается в
Просмотрщике изображений, но если вы его попытаетесь куда-нибудь загрузить, то вы получите ошибку вроде такой:
Сбой при загрузке:
Загружать можно только изображения и видео
И если внимательно прочесть вывод
Терминала после выполнения команды ниже, то всё сразу будет понятно, а именно то, что скрин сохраняется в экстра-портативном
pixmap-формате:
$ virsh screenshot ubuntu Изображения/`date +%Y-%m-%d-%T`.jpg
Screenshot saved to Изображения/2022-05-14-09:52:24.jpg, with type of image/x-portable-pixmap
И какое бы разрешение вы не поставили, а по умолчанию утилита
KVM -
screenshot работает с
.ppm, результат будет один и тот же.
Поэтому сохранять будем именно в
.ppm, а потом из
.ppm уже конвертировать в
.png, но уже в полноценный формат изображения.
А по сему, делаем скриншоты именно в формате
.ppm:
(каждое новое выполнение команды делает скриншот со своим уникальным именем именно рабочей области
ОС, без рамок, панелей - только область рабочая, что удобно для создание статей и мануалов по установке той или иной
ОС)
virsh screenshot ubuntu Изображения/`date +%Y-%m-%d-%T`.ppm
2. После сохранения скриншотов в формате
.ppm переходим в папку со скриншотами и массово конвертируем
.ppm-файлы в
.png-формат:
cd Изображения; mogrify -format png *.ppm
3. После массовой конвертации файлов в
.png-формат массовое переименование сконвертированных файлов по порядковым номерам:
a=0; for i in *.png; do let a+=1; mv $i $a.png; done
4. После массового переименования файлов удаление не нужных более
.ppm-файлов и возврат в
Домашний каталог:
rm *.ppm; cd
Однострочник всего этого после п. 1cd Изображения; mogrify -format png *.ppm; a=0; for i in *.png; do let a+=1; mv $i $a.png; done; rm *.ppm; cd
Удаление пула (pool) и раздела (vol) VM:virsh -c qemu:///system undefine --nvram ubuntu
virsh -c qemu:///system vol-delete /home/ваше_имя_Пользователя/libvirt/images/ubuntu
или однострочником
virsh -c qemu:///system undefine --nvram ubuntu; virsh -c qemu:///system vol-delete /home/ваше_имя_Пользователя/libvirt/images/ubuntu
Вот, такой вот садомазохизм...
Но мне нравиться...
P.S. Ёлки-моталки! Хотел вкратце посоветовать, а получился мануал...
Ну, просто, если что-либо пропустить и не дописать, то цепочка разрывается и геморрой, а так от и до полностью рабочий консольно-терминальный вариант использования...