26 июля 2022

Установка эмулятора аппаратного обеспечения различных платформ QEMU и гиппервизора KVM и работа с ними в консольно-терминальном режиме (продолжение) в Ubuntu/Linux Mint ⚡️ ⚡️

Данная статья является продолжением, опубилкованной в нашем блоге ранее статьи с той лишь разницей, что в этой статье пойдёт речь о работе данной связки софта в консольно-терминальном режиме.
В этом режиме можно выполнять всё, что в GUI, а при получении навыков, даже быстрее.



Итак, давайте начнём с Установки всех необходимых пакетов для дальнейшей работы, если у вас они ещё не установлены.
Если вы уже всё устанавливали из предыдущей статьи, то пропустите этот пункт.

Открываем Терминал (Ctrl+Alt+T), копируем или прописываем следующий код и жмём на Enter:
sudo apt install qemu-kvm libvirt-daemon-system virt-manager bridge-utils ovmf -y

Далее, везде, ниже, где в кодах будет написано ваше_имя_Пользователя, не забываем вписать его - ваше Имя Пользователя в системе, например: vasyapupkin!!!

Имя VM (виртуальная машина - далее ВМ) в данном примере её создания из 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 (или с др. названиями, удобными вам) командой:
mkdir -p libvirt/images

Создаём pool (далее - пул) с именем default в созданных выше в Домашнем каталоге папке (каталоге) libvirt и подпапке images:
(вы можете задать любое, приятное вашему глазу имя пула и тогда далее в кодах ниже его и надо будет прописывать вместо default, но при первой установке/старте ВМ в пул с придуманным вами именем, пул default будет создан в любом случае автоматически, но в каталоге по умолчанию /var/lib/libvirt/images помимо придуманного вами)
virsh pool-define-as --name default --type dir --target /home/ваше_имя_Пользователя/libvirt/images

Запускаем созданный pool default:
virsh pool-start default

Помещаем созданный pool default в автозагрузку, чтобы после перезагрузки системы он стартовал вместе с ней:
virsh pool-autostart default



Создание ВМ ubuntu.

Как и при обычной установке ОС, есть 2 (два) способа установки.

1. Создание ВМ в режиме UEFI:
(расписывать роль каждого префикса не буду, virt-install --help в помощь. В коде size=30 - это размер в Гб самой ВМ, --ram=2048 - это размер оперативки, --vcpus=2 - это виртуальное количество ядер процессора, --destroy-on-exit - это выключение установщика после выхода из системы или перезагрузки, чтобы процесс не висел в активном режиме, & - оставляет процесс в фоновом режиме, позволяя и дальше пользоваться этой же сессией Терминала (просто нажимаете на Ctrl+C). Вы можете изменять эти значения на свой вкус и цвет. Пути папочек (каталогов) у вас могут быть свои и отличаться от кода здесь...)
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 --destroy-on-exit &

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/ваше_имя_Пользователя/Загрузки/ubuntu-22.04-desktop-amd64.iso --osinfo detect=on,require=off --graphics spice --boot uefi --destroy-on-exit &

2. Создание ВМ в режиме BIOS:
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 --destroy-on-exit &

b.) - если при старте создания ВМ (например с mini.iso), при варианте 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 --osinfo detect=on,require=off --graphics spice --destroy-on-exit &



Старт (запуск) ВМ ubuntu:
(ещё раз напомню, что опперанд & в конце команд даёт возможность далее пользоваться этим же окном Терминала, например, для коннекта/дисконекта флешки, создания скриншотов ВМ. Просто жмёте в активном этом окне Терминала на Ctrl+C, ВМ продолжает работать, а вы далее продолжаете в Терминале делать, всё что угодно...)

a.) - запуск ВМ
virsh start ubuntu

b.) - старт ВМ, если есть необходимость подключить флешку в ней (смотрите ниже в разделе Подключение/выключение флешки)
virsh start ubuntu; virsh attach-device ubuntu usb.xml



Запуск ВМ в графическом режиме (GUI):
virt-viewer --connect qemu:///system -w -d ubuntu &



Или однострочником, и Старт (запуск) ВМ ubuntu, и Запуск ВМ в графическом режиме (GUI):
a)
virsh start ubuntu; virt-viewer --connect qemu:///system -w -d ubuntu &

b) - если есть необходимость подключить флешку в ней (смотрите ниже в разделе Подключение/выключение флешки)
virsh start ubuntu; virsh attach-device ubuntu usb.xml; virt-viewer --connect qemu:///system -w -d ubuntu &



Подключение/выключение флешки.
Определение номера флешки (Device):
lsusb

В выводе Терминала ищем запись Flash Drive и слева от неё, в этой же строке секцию Device 00X: (здесь Device 004:), где 00Х (здесь 004) - это и есть номер вашей флешки. Запоминаем (записываем) его:

Создание xml-файла в Домашнем каталоге хоста:
(не забываем вместо номер_флешки в коде вставить её номер из вывыда выше, только без двух нулей, т.е. в данном случае 4)
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



Выключение ВМ:
a.)
virsh shutdown ubuntu

b.) - в случае, если бывает, что не выключается, то изящно-принудительно
virsh destroy ubuntu --graceful

c.) - если подключали флешку, то с её отключением
virsh detach-device ubuntu usb.xml; virsh shutdown ubuntu

d.) - если не выключается, то изящно-принудительно и с отключением флешки
virsh detach-device ubuntu usb.xml; virsh shutdown ubuntu --graceful



Создание скриншотов ВМ.

Для чего?
Ну, например, если вы пишете статью об Установке того или иного дистрибутива для своего блога и сопровождаете её скриншотами процесса установки и дальнейшей работы самого дистрибутива или просто для себя, чтобы потом визуально смотреть процесс установки шаг за шагом.
Да, для чего угодно...

И ещё один немаловажный фактор!
Если делать скриншоты в Графическом режиме (GUI), то скриншоты будут с рамками окна и полосами меню и потом придётся редактировать в редакторе изображений, дабы удалить всё это.
А таким способом, скриншот создаётся без рамок и полос Менеджера виртуальных машин, просто активное окно дистрибутива, как есть, без необходимости его редактирования:


1. Создание скриншотов активного окна ВМ в выбранную папку в QEMU/KVM в формате .ppm.
Вы спросите, а почему именно в формате .ppm, если можно сразу в .png или .jpg и т.д.?
Дело в том, что, да, можно, но!
Скриншот сохраняется и даже просматривается в Просмотрщике изображений, но если вы его попытаетесь куда-нибудь загрузить, например в свой блог, то вы получите ошибку вроде такой:
Ошибка:
Сбой при загрузке:

Загружать можно только изображения и видео
И если внимательно прочесть вывод Терминала после выполнения команды ниже, то всё сразу будет понятно, а именно то, что скрин сохраняется в экстра-портативном pixmap-формате:
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
И какое бы расширение вы не поставили, а по умолчанию утилита screenshot из KVM работает с .ppm-форматом, результат будет один и тот же - все скрины сохранятся в экстра-портативном pixmap-формате, а значит будет та же ошибка при их загрузке на какой-либо ресурс.
Поэтому сохранять скриншоты будем именно в .ppm-формате (по умолчанию), а потом из .ppm уже конвертировать в .png, но уже в полноценный формат изображения, а значит их можно будет без проблем загружать куда угодно.

А по сему, делаем скриншоты именно в формате .ppm (делаем это в этом же Терминале, просто нажав на Ctrl+C, чтобы активировать приглашение командной строки):
(каждое новое выполнение команды делает скриншот со своим уникальным именем именно активной, рабочей области ОС, без рамок, панелей - только рабочая область, что удобно для создание статей и мануалов по установке той или иной ОС)
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
В результате чего каждый файл будет под своим цифромвым номером:
- 1.png, 2.png, 3.png и т.д...

4. После массового переименования файлов удаление не нужных более .ppm-файлов и возврат в Домашний каталог:
rm *.ppm; cd

В результате, в папке Изображения остануться только скриншоты в формате .png, под порядковыми номерами... Однострочник всего этого с п.1 по п.4:
cd Изображения; mogrify -format png *.ppm; a=0; for i in *.png; do let a+=1; mv $i $a.png; done; rm *.ppm; cd



И на последок, полное Удаление созданных раздела (vol) ВМ ubuntu и пула (pool) default (или любых других, созданных вами).

1. Удаление созданного раздела (vol) ВМ ubuntu (или любого другого, созданного вами):
(при этом пул (pool) остаётся для использования)
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

2. Удаление созданного пула (pool) default (или любого другого, созданного вами):
(если удалить пул (pool) без предварительного удаления созданного раздела (vol) ВМ, то все созданные в пуле (pool) разделы (vol) ВМ также автоматически будут удалены!)
virsh pool-undefine default



В принципе, на этом можно и закончить...

Мы с вами ознакомились на практике с основными, базовыми принципами Установки и работы с эмулятором аппаратного обеспечения различных платформ QEMU и гиппервизора KVM и работы с ними в консольно-терминальном режиме.

P.S. Если у вас появились вопросы или мнения по данной статье, обсудить их можно на нашем форуме:

3 комментария :

  1. Конечно это интересно и огромное спасибо Владимиру за этот труд! Но кто будет пользоваться таким способом, если можно всё это сделать в графике и быстрее? Вопрос риторический... ;-)

    ОтветитьУдалить
    Ответы
    1. На счёт быстрее, я бы поспорил.
      Не быстрее в графике отнюдь.
      Скрины активного окна, так вообще не сделаете!

      В графике надо тыкать туда, сюда, а в Терминале, просто одной командой всё делается по сути.
      Смысл в том, что пройдя один раз этот путь, у пользователя будет заготовленная команда, которую можно использовать, как для установки/создания ВМ, так и для её старта/запуска, меняя только пути и названия образов ОСей и параметры при желании.
      Ну, и дополнительные знания не помешают...

      Удалить
  2. Владимир! Пожалуйста расскажите как поставить линукс на смартфон вместо андроид ,заранее благодарю!

    ОтветитьУдалить

Если у Вас появились вопросы или мнения, вы можете задать или оставить их здесь.
Спам и флуд будут жёстко караться вечной блокировкой их оставляющих!



If You have any questions or opinions about, just leave'em here.
Spamers & flooders will be blocked forever!!!