Сайт | Скачать | Видео | Wiki

Автор Тема: Cli оболочка для быстрого запуска ISO с помощью Qemu/Kvm.  (Прочитано 6085 раз)

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

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 858
  • Репутация: +23/-0
  • Автор темы
Хочу представить скрипт который позволит быстро запустить iso образ с помощью Qemu/Kvm.
Скрипт с помощью peco позволяет выбрать интересующий вас iso образ, проверяет если образ вирт. машины создан ранее, запускает его, если нет создаёт, в опциях Qemu задействована опция запуска звуковой карты, то есть звук в гостевой системе должен работать.
Условие все iso образы должны быть в каталоге ~/ISO  ,(в моём скрипте ISO заглавными буквами)
Зависимости для работы  скрипта :
peco
qemu-system-x86
qemu-utils
Процессор вашего компьютера должен поддерживать систему виртуализации KVM.
-------------------------
финальная версия cfQemu
cfQemu_23_totiks_fin_gpt.sh
-------------------
https://disk.yandex.ru/d/XFcWzcYxCYMBEg
-----------------
-------------------------
лог изменений:
Изменена более структурирована логика скрипта, причесал код.
Изменена опция подключения usb к qemu
что умеет скрипт и как работать с ним
1. Можно выбрать пункт меню с включенным оптическим приводом<Опт-Прив_вкл>, тогда создаёт меню из списка всех Iso из каталога ~/ISO , и выбрать ISO образ для загрузки, а так же попутно создаёт виртуальный образ жесткого диска qcow2
2. Можно выбрать пункт меню с выключенным оптическим приводом<Опт-Прив_выкл>, выводит меню списка iso образов,выбираем интересующий нас iso,и после если находит установленную на образ жесткого диска qcow2 систему, грузится с неё, если нет- грузится с виртуального  оптического привода.
3. И теперь в оба режима если подключить отформатированую ,до запуска скрипта, флэшку , то можно использовать для установки на неё дистрибутива прямо из гостевой сессии(спасибо еще раз    krasnyh). В гостевой сессии флэшка жестко смонтирована, и потому не доступна для форматирования, то есть её нужно подготовить до запуска скрипта и QEMU. Хочу добавить скрипт полностью автоматизирован, то есть умеет в автомонтирование флэшек, ничего руками в терминал не нужно вводить, воткнули флэшку, выбираем соответствующий пунк меню , и дальше скрипт всё делает сам.
4. Если дистрибутив установлен на флэшку с одним разделом, то есть на всю , можно протестировать её загрузку в виртуальной машине QEMU , используя пункт меню <Загрузка_с_флэшки_без_метки>
5. Если дистрибутив установлен на флэшку с несколькими разделами, например загрузчик находится в первом разделе, а ресурсы дистрибутива на втором, то создаем на  первом разделе с загрузчиком, метку QFlag , и запускаем для тестирования пункт меню <Загрузка_с_флэшки_с_меткой_QFlag>

ниже устаревший код который на всякий пожарный оставил:
--------------------
cfQemu_19_totiks_gpt.sh
-------------------
https://disk.yandex.ru/d/FrL4muv2aAZZYw
-------------------

Запускаем скрипт, peco   ,откроет список с выбором опций оптического привода, после выбора опции для привода, откроется список с  iso , выбираем нужный скажем my.iso, жмем ввод, образ iso будет запущен в Qemu, если захотим позже опять запустить этот образ вирт машины достаточно опять  запустить этот скрипт, и запустить этот же  my.iso, скрипт увидит что образ В.М. уже создан и при условии что раздел настроен как boot , и на него  установлена система запустит его. Образы В.М хранятся в каталоге со скриптом, скрипт можно   повесить на горячую клавишу, получится песня. Вроде получилось хорошо.
« Последнее редактирование: 31 Октябрь 2023, 22:38:49 от totiks2012 »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33966
  • Репутация: +231/-0
    • PuppyRus-A
peco = консоль. Подобный скрипт удобнее иметь в виде GUI. Оптимально и так и так.
В прошлой вашей теме я уже писал про yad и ntf. Если что-то не понятно - готов помочь

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 858
  • Репутация: +23/-0
  • Автор темы
Qemu может создать и подключить swap файл, вот тут начались сложности, и я решил отказатся от этого, можно например создать swap раздел в гостевой ситеме, и если система имеет возможность сохранения сесии, а в моём случае в качестве теста была vaniladpup-9-x86, то swap раздел сохранится, но есть системы которые не имеют сохранения сессии, и вот для них такая опция была бы полезной. Сложности какие 
вот что на генерировала машина
Код
#!/bin/bash

# Задаем переменные для размера оперативной памяти, жесткого диска и swap файла
MEMORY_SIZE=2048
HDD_SIZE=20G
SWAP_SIZE=2G

# Используем peco для выбора файла ISO из каталога ~/ISO
ISO_FILE=$(find ~/ISO -name "*.iso" | peco)

# Используем имя файла ISO для создания имени виртуального жесткого диска и swap файла
BASENAME=$(basename $ISO_FILE .iso)
HDD_FILE="$BASENAME.qcow2"
SWAP_FILE="$BASENAME.swap"

# Проверяем, существует ли файл с именем виртуального жесткого диска
if [ ! -f "$HDD_FILE" ]; then
  # Если файл не существует, то создаем виртуальный диск с заданным размером
  qemu-img create -f qcow2 "$HDD_FILE" $HDD_SIZE
fi

# Проверяем, существует ли файл с именем swap файла
if [ ! -f "$SWAP_FILE" ]; then
  # Если файл не существует, то создаем виртуальный диск для swap файла с заданным размером
  qemu-img create -f raw "$SWAP_FILE" $SWAP_SIZE

  # Форматируем виртуальный диск для swap файла в формат swap
  mkswap "$SWAP_FILE"
fi

# Запускаем QEMU с заданными параметрами и подключаем swap файл к виртуальной машине
qemu-system-x86_64 \
  -boot d \
  -cdrom "$ISO_FILE" \
  -hda "$HDD_FILE" \
  -m $MEMORY_SIZE \
  -display gtk \
  -device virtio-scsi-pci \
  -device scsi-hd,drive=swap \
  -drive file="$SWAP_FILE",format=raw,id=swap \
  -enable-kvm

вот ответ терминала
Код
Formatting 'vanilladpup-9.3.19.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=21474836480 lazy_refcounts=off refcount_bits=16
Formatting 'vanilladpup-9.3.19.swap', fmt=raw size=2147483648
./cQemu.sh: line 28: mkswap: command not found
qemu-system-x86_64: warning: dbind: AT-SPI: Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was not provided by any .service files
qemu-system-x86_64: -device scsi-hd,drive=swap: Drive 'swap' is already in use because it has been automatically connected to another device (did you need 'if=none' in the drive options?)
из ответа видно что нет команды mkswap , при этом util-linux в которых содержится эта команда у меня установлены, в итоге я решил отказатся от своп файла, ибо пирог лучше кушать мелким откусыванием.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 858
  • Репутация: +23/-0
  • Автор темы
peco = консоль. Подобный скрипт удобнее иметь в виде GUI
Ну мне Cli просто ближе, но так-то если нужен на yad, попрбую и на yad.
upd: что такое ntf? если notify-send то  ... -->
upd2: Исходя из соображений которые привел sfs, также опубликовал Gui утилиту для запуска iso в виртуальной машине  Qemu/Kvm
« Последнее редактирование: 04 Май 2023, 12:57:41 от totiks2012 »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33966
  • Репутация: +231/-0
    • PuppyRus-A
если нужен на yad
лично мне - нет. Мне в vbox удобнее
что такое ntf?
Моя обертка вокруг yad
« Последнее редактирование: 04 Май 2023, 12:48:09 от sfs »

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 858
  • Репутация: +23/-0
  • Автор темы
добавляю во вложения скрипт с Gui на Yad пусть лежит и тут.

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5319
  • Репутация: +139/-1
Напомню о GUI_Qemu от AZJIO.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 858
  • Репутация: +23/-0
  • Автор темы
 :) ну вот и хорошо что есть Gui , по ходу намного функциональней, потому что задачи ставил более широкие.
« Последнее редактирование: 04 Май 2023, 15:25:28 от totiks2012 »

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 858
  • Репутация: +23/-0
  • Автор темы
Вот обновленная версия скрипта  cli оболочки для запуска в qemu эмуляторе  образа ISO, который находится по пути ~/ISO , из ново введений скрипт позволяет с помощью peco выбрать запуск эмулятора виртуальной машины, c опцией , с включенным оптическим приводом или с выключенным.


вместо user в строке HDD_FILE="/home/user /ISO/$BASENAME.qcow2" пишем имя своего пользователя

Код
#!/bin/bash
#set -x
# Задаем переменные для размера оперативной памяти и жесткого диска
MEMORY_SIZE=2048
HDD_SIZE=25G

# Используем peco для выбора опции --no-cdrom
ENABLE_CDROM_OPTIONS=("Опт-Прив_вкл" "Опт-Прив_выкл")
ENABLE_CDROM=$(echo "${ENABLE_CDROM_OPTIONS[@]}" | tr " " "\n" | peco)

# Используем peco для выбора файла ISO из каталога ~/ISO
ISO_FILE=$(find ~/ISO -name "*.iso" | peco)

# Используем имя файла ISO для создания имени виртуального жесткого диска
BASENAME=$(basename "$ISO_FILE" .iso)
HDD_FILE="/home/user/ISO/$BASENAME.qcow2"

# Проверяем наличие файла виртуального жесткого диска и если он существует, запускаем виртуальную машину
if [ -f "$HDD_FILE" ]; then
  if [ "$ENABLE_CDROM" = "Опт-Прив_вкл" ]; then
    qemu-system-x86_64 \
      -boot d \
      -hda "$HDD_FILE" \
      -cdrom "$ISO_FILE" \
      -m "$MEMORY_SIZE" \
      -display gtk \
      -soundhw hda \
      -enable-kvm
  else
    qemu-system-x86_64 \
      -boot d \
      -hda "$HDD_FILE" \
      -m "$MEMORY_SIZE" \
      -display gtk \
      -soundhw hda \
      -enable-kvm
  fi
else
  qemu-img create -f qcow2 "$HDD_FILE" "$HDD_SIZE"
  qemu-system-x86_64 \
    -boot d \
    -cdrom "$ISO_FILE" \
    -hda "$HDD_FILE" \
    -m "$MEMORY_SIZE" \
    -display gtk \
    -soundhw hda \
    -enable-kvm
fi
« Последнее редактирование: 08 Август 2023, 14:06:52 от totiks2012 »

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5319
  • Репутация: +139/-1
Мало параметров qemu, которые влияют на производительность (только -enable-kvm). Посмотри пример скрипта и обрати внимание на -machine, -cpu, -smp.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 858
  • Репутация: +23/-0
  • Автор темы
Посмотрел, спасибо ! Вот попытка применить то что подсмотрел, надеюсь правильно...
Код
 #!/bin/bash
#set -x
# Задаем переменные для размера оперативной памяти и жесткого диска
MEMORY_SIZE=2048
HDD_SIZE=25G
CPU=2

# Используем peco для выбора опции --no-cdrom
ENABLE_CDROM_OPTIONS=("Опт-Прив_вкл" "Опт-Прив_выкл")
ENABLE_CDROM=$(echo "${ENABLE_CDROM_OPTIONS[@]}" | tr " " "\n" | peco)

# Используем peco для выбора файла ISO из каталога ~/ISO
ISO_FILE=$(find ~/ISO -name "*.iso" | peco)

# Используем имя файла ISO для создания имени виртуального жесткого диска
BASENAME=$(basename "$ISO_FILE" .iso)
HDD_FILE="/home/live/ISO/$BASENAME.qcow2"

# Проверяем наличие файла виртуального жесткого диска и если он существует, запускаем виртуальную машину
if [ -f "$HDD_FILE" ]; then
  if [ "$ENABLE_CDROM" = "Опт-Прив_вкл" ]; then
    qemu-system-x86_64 \
      -boot d \
      -hda "$HDD_FILE" \
      -cdrom "$ISO_FILE" \
      -machine q35,accel=kvm -cpu max \
      -smp cores=${CPU},threads=1,sockets=1 \
      -m "$MEMORY_SIZE" \
      -display gtk \
      -soundhw hda \
      -enable-kvm
  else
    qemu-system-x86_64 \
      -boot d \
      -hda "$HDD_FILE" \
      -machine q35,accel=kvm -cpu max \
      -smp cores=${CPU},threads=1,sockets=1 \
      -m "$MEMORY_SIZE" \
      -display gtk \
      -soundhw hda \
      -enable-kvm
  fi
else
  qemu-img create -f qcow2 "$HDD_FILE" "$HDD_SIZE"
  qemu-system-x86_64 \
    -boot d \
    -cdrom "$ISO_FILE" \
    -hda "$HDD_FILE" \
    -machine q35,accel=kvm -cpu max \
    -smp cores=${CPU},threads=1,sockets=1 \
    -m "$MEMORY_SIZE" \
    -display gtk \
    -soundhw hda \
    -enable-kvm
fi
« Последнее редактирование: 08 Август 2023, 16:20:02 от totiks2012 »

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1708
  • Репутация: +49/-1
  • /dev/hands < /dev/ass
Мне в vbox удобнее
Фу-фу-фу! Впечатление от vbox под puppy и тем более под виндой. А может - я криворукий)
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 858
  • Репутация: +23/-0
  • Автор темы
Фу-фу-фу! Впечатление от vbox под puppy
вот и у меня с ними не сложилось,больше нравился VMware, но во первых проприетарщина, а во вторых бесило то что при обновлении ядра под это ядро пересоздавалась компилировалось что-то для  VMware, когда нащупал способ с Qemu прям понравилось, и не то что я каждый день гружу образы в виртуалках, но это оказалось интересным време провождением, покрутить один другой дистрибутив в виртуалке на досуге, посмотреть тенденции развития, ... но если честно в последнее время гном и кде не интересны, очень интересно посмотреть на window maker или какой нить тайловый , никогда в эту сторону не смотрел.
« Последнее редактирование: 09 Август 2023, 20:16:40 от totiks2012 »

Оффлайн knn

  • Ветеран
  • *****
  • Сообщений: 2538
  • Репутация: +33/-0
или какой нить таловый , никогда в эту сторону не смотрел.
пр. - "частично" тайлинг есть в 'icewm'
----------
"более тайлинговый" - 'i3wm' - я пробовал в преднастроенном виде от 'kostalamer' - глянуть можно на изо-хе Ледяного ( линк есть на ГлавнСтр # 64Bit)
# ( в этой крайней сборке 'фулл-инсталом-с-флешки' X-ы не запустятся, но iso/frugall (и уст. на ж/д) работоспособен - с относительнооригинальным 'i3wm'  (+расписаны хелпы по вм-преднастройкам)
---------------------
мне под два монитора  'i3wm' не зашел - рекомендовали 'awesome' - далеко в его настройках я не продвинулся  - так пока и забросил
===========
зы
i3wm вроде еще в MagOs был #не знаю в на сколько преднастроенном виде
================
зызы
в смысле - "сугубо имхо" - тайловые лучше пробовать в преднастроенном виде
« Последнее редактирование: 09 Август 2023, 13:13:40 от knn »
Gr4D, Grub2; HP Mini 210 VT - Intel Atom N470  @ 1.83GHz, Intel GMA3150, RAM=2 ГБ ;
Sams-n110: N270 - 1,6 ГГц, Intel GMA 950, RAM=2 ГБ.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 858
  • Репутация: +23/-0
  • Автор темы
я пробовал в преднастроенном виде от 'kostalamer' - глянуть можно на изо-хе Ледяного ( линк есть на ГлавнСтр # 64Bit)
спасибо , дистр интересный очень  👍 , залип часа на 3  , и сейчас буду смотреть, мне одно время очень нравился IceWm но лень победила, вернее Xfce.
« Последнее редактирование: 09 Август 2023, 19:39:00 от totiks2012 »