Данная статья является продолжением, опубилкованной в нашем блоге ранее статьи с той лишь разницей, что в этой статье пойдёт речь о работе данной связки софта в консольно-терминальном режиме.
В этом режиме можно выполнять всё, что в GUI, а при получении навыков, даже быстрее.
Итак, давайте начнём с Установки всех необходимых пакетов для дальнейшей работы, если у вас они ещё не установлены.
Если вы уже всё устанавливали из предыдущей статьи, то пропустите этот пункт.
Открываем Терминал (Ctrl+Alt+T), копируем или прописываем следующий код и жмём на Enter:
Далее, везде, ниже, где в кодах будет написано ваше_имя_Пользователя, не забываем вписать его - ваше Имя Пользователя в системе, например: vasyapupkin!!!
Имя VM (виртуальная машина - далее ВМ) в данном примере её создания из ubuntu-22.04-desktop-amd64.iso-файла (вы можете использовать любой образ, любой ОС) будет ubuntu, но вы можете обозвать ВМ, как вам угодно, на ваш вкус и цвет...
И сразу же, чтобы в дальнейшем, при создании/старте ВМ (Виртуальной машины) не было ошибки:
(вы спросите: - А для чего?! А для того, чтобы была возможность создавать сколько угодно ВМ и любого размера, что нельзя сделать в каталоге по умолчанию /var/lib/libvirt/images, т.к., если вы разметили свой жёсткий диск по феншую, а именно на корневой каталог, как правило ограниченного размера и Домашний каталог, как правило всё оставшееся, большее место на жёстком диске)
Теперь создаём в Домашнем каталоге папку (каталог) libvirt и подпапку images (или с др. названиями, удобными вам) командой:
Создаём pool (далее - пул) с именем default в созданных выше в Домашнем каталоге папке (каталоге) libvirt и подпапке images:
(вы можете задать любое, приятное вашему глазу имя пула и тогда далее в кодах ниже его и надо будет прописывать вместо default, но при первой установке/старте ВМ в пул с придуманным вами именем, пул default будет создан в любом случае автоматически, но в каталоге по умолчанию /var/lib/libvirt/images помимо придуманного вами)
Запускаем созданный pool default:
Помещаем созданный pool default в автозагрузку, чтобы после перезагрузки системы он стартовал вместе с ней:
Создание ВМ ubuntu.
Как и при обычной установке ОС, есть 2 (два) способа установки.
1. Создание ВМ в режиме UEFI:
(расписывать роль каждого префикса не буду, virt-install --help в помощь. В коде size=30 - это размер в Гб самой ВМ, --ram=2048 - это размер оперативки, --vcpus=2 - это виртуальное количество ядер процессора, --destroy-on-exit - это выключение установщика после выхода из системы или перезагрузки, чтобы процесс не висел в активном режиме, & - оставляет процесс в фоновом режиме, позволяя и дальше пользоваться этой же сессией Терминала (просто нажимаете на Ctrl+C). Вы можете изменять эти значения на свой вкус и цвет. Пути папочек (каталогов) у вас могут быть свои и отличаться от кода здесь...)
a.)
b.) - если при старте создания ВМ (например с mini.iso), при варианте a) выдаст ошибку, что название ОС не опрделено:
2. Создание ВМ в режиме BIOS:
a.)
b.) - если при старте создания ВМ (например с mini.iso), при варианте a) выдаст ошибку, что название ОС не опрделено:
Старт (запуск) ВМ ubuntu:
(ещё раз напомню, что опперанд & в конце команд даёт возможность далее пользоваться этим же окном Терминала, например, для коннекта/дисконекта флешки, создания скриншотов ВМ. Просто жмёте в активном этом окне Терминала на Ctrl+C, ВМ продолжает работать, а вы далее продолжаете в Терминале делать, всё что угодно...)
a.) - запуск ВМ
b.) - старт ВМ, если есть необходимость подключить флешку в ней (смотрите ниже в разделе Подключение/выключение флешки)
Запуск ВМ в графическом режиме (GUI):
Или однострочником, и Старт (запуск) ВМ ubuntu, и Запуск ВМ в графическом режиме (GUI):
a)
b) - если есть необходимость подключить флешку в ней (смотрите ниже в разделе Подключение/выключение флешки)
Подключение/выключение флешки.
Определение номера флешки (Device):
В выводе Терминала ищем запись Flash Drive и слева от неё, в этой же строке секцию Device 00X: (здесь Device 004:), где 00Х (здесь 004) - это и есть номер вашей флешки. Запоминаем (записываем) его:
Создание xml-файла в Домашнем каталоге хоста:
(не забываем вместо номер_флешки в коде вставить её номер из вывыда выше, только без двух нулей, т.е. в данном случае 4)
Должен получиться, вот, такой файлик: Подключение флешки:
Отключение флешки:
Выключение ВМ:
a.)
b.) - в случае, если бывает, что не выключается, то изящно-принудительно
c.) - если подключали флешку, то с её отключением
d.) - если не выключается, то изящно-принудительно и с отключением флешки
Создание скриншотов ВМ.
Для чего?
Ну, например, если вы пишете статью об Установке того или иного дистрибутива для своего блога и сопровождаете её скриншотами процесса установки и дальнейшей работы самого дистрибутива или просто для себя, чтобы потом визуально смотреть процесс установки шаг за шагом.
Да, для чего угодно...
И ещё один немаловажный фактор!
Если делать скриншоты в Графическом режиме (GUI), то скриншоты будут с рамками окна и полосами меню и потом придётся редактировать в редакторе изображений, дабы удалить всё это.
А таким способом, скриншот создаётся без рамок и полос Менеджера виртуальных машин, просто активное окно дистрибутива, как есть, без необходимости его редактирования:
1. Создание скриншотов активного окна ВМ в выбранную папку в QEMU/KVM в формате .ppm.
Вы спросите, а почему именно в формате .ppm, если можно сразу в .png или .jpg и т.д.?
Дело в том, что, да, можно, но!
Скриншот сохраняется и даже просматривается в Просмотрщике изображений, но если вы его попытаетесь куда-нибудь загрузить, например в свой блог, то вы получите ошибку вроде такой:
Поэтому сохранять скриншоты будем именно в .ppm-формате (по умолчанию), а потом из .ppm уже конвертировать в .png, но уже в полноценный формат изображения, а значит их можно будет без проблем загружать куда угодно.
А по сему, делаем скриншоты именно в формате .ppm (делаем это в этом же Терминале, просто нажав на Ctrl+C, чтобы активировать приглашение командной строки):
(каждое новое выполнение команды делает скриншот со своим уникальным именем именно активной, рабочей области ОС, без рамок, панелей - только рабочая область, что удобно для создание статей и мануалов по установке той или иной ОС)
2. После сохранения скриншотов в формате .ppm переходим в папку со скриншотами (здесь Изображения) и массово (все сразу) конвертируем .ppm-файлы в .png-формат:
3. После массовой конвертации файлов в .png-формат выполняем массовое переименование сконвертированных файлов по порядковым номерам:
- 1.png, 2.png, 3.png и т.д...
4. После массового переименования файлов удаление не нужных более .ppm-файлов и возврат в Домашний каталог:
В результате, в папке Изображения остануться только скриншоты в формате .png, под порядковыми номерами... Однострочник всего этого с п.1 по п.4:
И на последок, полное Удаление созданных раздела (vol) ВМ ubuntu и пула (pool) default (или любых других, созданных вами).
1. Удаление созданного раздела (vol) ВМ ubuntu (или любого другого, созданного вами):
(при этом пул (pool) остаётся для использования)
Или однострочником:
2. Удаление созданного пула (pool) default (или любого другого, созданного вами):
(если удалить пул (pool) без предварительного удаления созданного раздела (vol) ВМ, то все созданные в пуле (pool) разделы (vol) ВМ также автоматически будут удалены!)
В принципе, на этом можно и закончить...
Мы с вами ознакомились на практике с основными, базовыми принципами Установки и работы с эмулятором аппаратного обеспечения различных платформ QEMU и гиппервизора KVM и работы с ними в консольно-терминальном режиме.
В этом режиме можно выполнять всё, что в 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-формат:
И какое бы расширение вы не поставили, а по умолчанию утилита screenshot из KVM работает с .ppm-форматом, результат будет один и тот же - все скрины сохранятся в экстра-портативном 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
Поэтому сохранять скриншоты будем именно в .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. Если у вас появились вопросы или мнения по данной статье, обсудить их можно на нашем форуме:
Конечно это интересно и огромное спасибо Владимиру за этот труд! Но кто будет пользоваться таким способом, если можно всё это сделать в графике и быстрее? Вопрос риторический... ;-)
ОтветитьУдалитьНа счёт быстрее, я бы поспорил.
УдалитьНе быстрее в графике отнюдь.
Скрины активного окна, так вообще не сделаете!
В графике надо тыкать туда, сюда, а в Терминале, просто одной командой всё делается по сути.
Смысл в том, что пройдя один раз этот путь, у пользователя будет заготовленная команда, которую можно использовать, как для установки/создания ВМ, так и для её старта/запуска, меняя только пути и названия образов ОСей и параметры при желании.
Ну, и дополнительные знания не помешают...
Владимир! Пожалуйста расскажите как поставить линукс на смартфон вместо андроид ,заранее благодарю!
ОтветитьУдалить