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

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

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

Оффлайн RoDoN

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 6307
  • Репутация: +141/-0
загрузится без сохранения сессии то получится весьма годный инструмент для тестирования дистрибутивов на флэшках
Ну, лично мне именно это и нужно иногда, причем даже не полноценно загрузить ось, а проверить работу загрузчика в первую очередь. В винде еще с конца нулевых пользуюсь для быстрой проверки загрузки с флешек MobaLiveCD и MobaLiveUSB, которые основаны на Qemu, теперь вот и под линуксом будет похожий инструмент ;)
« Последнее редактирование: 17 Октябрь 2023, 16:28:28 от RoDoN »
Lenovo G500 (i3-3110M, 8 Гб, Intel + Radeon HD 8570)
PRA 16.12 JWM, Runtu 22.04 x64 XFCE

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3021
  • Репутация: +35/-0
    • MagOS linux

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 942
  • Репутация: +24/-0
  • Автор темы
Похожая штука и гуй есть.
а какие зависимости тянет, бьюсь об заклад что qt, ща гляну

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 942
  • Репутация: +24/-0
  • Автор темы
 :) интернет пропал...пишу с телефона
Вот доработал скрипт сейчас отрабатывает без сучка и задоринки, если грузитесь с флэшки не забывайте после выключения системы все изменения пропадут, ибо qemu копирует в RAM дамп  системы с флешки, и грузится с неё, все изменения и опыты уйдут после выключения системы, вот финальный код
Код
#!/bin/bash
#set -x
# Задаем переменные для размера оперативной памяти и жесткого диска
MEMORY_SIZE=2048
HDD_SIZE=27G
CPU=2

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

# Путь к файлу для виртуального жесткого диска
HDD_FILE="$HOME/ISO/flash.qcow2"

# Путь к устройству флешки
USB_DEVICE="/dev/sdb"

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

# Запускаем QEMU в зависимости от выбора пользователя
if [ "$ENABLE_CDROM" = "Опт-Прив_вкл" ] || [ "$ENABLE_CDROM" = "Опт-Прив_выкл" ]; then
    # Используем peco для выбора файла ISO из каталога ~/ISO
    ISO_FILE=$(find ~/ISO -name "*.iso" | peco)
   
    # Используем имя файла ISO для создания имени виртуального жесткого диска
    BASENAME=$(basename "$ISO_FILE" .iso)
    HDD_FILE="$HOME/ISO/$BASENAME.qcow2"

    if [ -f "$HDD_FILE" ]; 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-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
elif [ "$ENABLE_CDROM" = "Загрузка_с_флэшки" ]; then
    # Запускаем QEMU с загрузкой с флэшки
        sudo qemu-system-x86_64 \
        -usb -drive file="$USB_DEVICE",format=raw,snapshot=on \
        -usb -drive file="$HDD_FILE",format=qcow2 \
        -machine q35,accel=kvm -cpu max \
        -smp cores=${CPU},threads=1,sockets=1 \
        -m "$MEMORY_SIZE" \
        -boot order=dc \
        -display gtk \
        -soundhw hda \
        -enable-kvm
fi

на всякий случай ссылка на YD--> https://disk.yandex.ru/d/kTpPIprGdxBIkA
 если кто заинтересован  тестаните пожалуйста, и дайте знать как отработало, помещу этот код в шапку...
     upd:   внезапно для меня самого, если вы перегрузитесь в пределах виртуальной машины, то после перезагрузки изменения в сессии не исчезнут, то есть после перезагрузки, отрабатывает штатно persistent mode, а вот если выключить систему, то сессии кирдык, то есть изменения уйдут, я считаю это не баг а фича! Простите что повторяюсь, пост пишется по ходу постижения.
 
« Последнее редактирование: 17 Октябрь 2023, 22:05:29 от totiks2012 »

Оффлайн RoDoN

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 6307
  • Репутация: +141/-0
Вот доработал скрипт
Опять пара вопросиков :)
1. Флешка жестко указана, как sdb, а ведь может быть и другая буква sdc или sdd...
2. А без sudo можно как-то обойтись?

Протестировал на флешке с загрузкой WinPE8 и PRA-1612m, т.е. с тем, что было под рукой.

З.Ы. На ЯД и в сообщении разный текст, а именно на ЯД переменная $HOME еще не добавлена
« Последнее редактирование: 17 Октябрь 2023, 21:02:10 от RoDoN »
Lenovo G500 (i3-3110M, 8 Гб, Intel + Radeon HD 8570)
PRA 16.12 JWM, Runtu 22.04 x64 XFCE

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 942
  • Репутация: +24/-0
  • Автор темы
1. Флешка жестко указана, как sdb, а ведь может быть и другая буква sdc или sdd...
буду искать как доработать, ибо не увидел такой ситуации, а ведь таки да, и тут оставлять на автомат опасненько, может как вариант предложить пользователю вести тип устройства , спросить у вас sdb , sdc ,sdd введите пожалуйста, то есть как вариант можно добавить интерактивщины для этого.
Насчет sudo у меня система  под пользователем (у меня minios) , для обращения к флэшке требует sudo, если ваш пользователь root можно и без, если у вас тоже пользователь , и он под паролем то можно прописать пароль в скрипте примерно так
Код
echo "<ваш_пароль>" | sudo -S <ваша команда> 
, конечно практика не очень, но работает, и если работает использую.
   Насчет ЯД большое спасибо, я сегодня всё делал на жутком нервяке, со всех сторон дергали и отвлекали, не давая делать то что нравится, а не отбросил ибо знал что завтра будут уже другие условия, уже исправил.
« Последнее редактирование: 17 Октябрь 2023, 22:54:15 от totiks2012 »

Оффлайн totiks2012

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

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

# Путь к файлу для виртуального жесткого диска
HDD_FILE="$HOME/ISO/flash.qcow2"
# Определяем имя первой флэшки
TYPE_FLESH="$(lsblk -o NAME | grep -E 'sd[b-z]$' | head -n 1)"
# Путь к устройству флешки
USB_DEVICE="/dev/$TYPE_FLESH"

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

# Запускаем QEMU в зависимости от выбора пользователя
if [ "$ENABLE_CDROM" = "Опт-Прив_вкл" ] || [ "$ENABLE_CDROM" = "Опт-Прив_выкл" ]; then
    # Используем peco для выбора файла ISO из каталога ~/ISO
    ISO_FILE=$(find ~/ISO -name "*.iso" | peco)
   
    # Используем имя файла ISO для создания имени виртуального жесткого диска
    BASENAME=$(basename "$ISO_FILE" .iso)
    HDD_FILE="$HOME/ISO/$BASENAME.qcow2"

    if [ -f "$HDD_FILE" ]; 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-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
elif [ "$ENABLE_CDROM" = "Загрузка_с_флэшки" ]; then
    # Запускаем QEMU с загрузкой с флэшки
        sudo qemu-system-x86_64 \
        -usb -drive file="$USB_DEVICE",format=raw,snapshot=on \
        -usb -drive file="$HDD_FILE",format=qcow2 \
        -machine q35,accel=kvm -cpu max \
        -smp cores=${CPU},threads=1,sockets=1 \
        -m "$MEMORY_SIZE" \
        -boot order=dc \
        -display gtk \
        -soundhw hda \
        -enable-kvm
fi


  да и не забываем размер оперативной памяти и диска также задаем из скрипта
еще заметка, в варианте загрузки с флэшки , я предусмотрел, создание образа виртуального жесткого диска, если он нужен, его нужно отформатировать из гостевой уже системы, и им тоже можно пользоватся, не знаю зачем сделал, но ну а вдруг понадобится кому то.
  upd: Ссылка на Я.Д. --> https://disk.yandex.ru/d/Pup8SFznVpURwA
« Последнее редактирование: 17 Октябрь 2023, 23:27:30 от totiks2012 »

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1739
  • Репутация: +50/-1
  • /dev/hands < /dev/ass
Похожая штука и гуй есть.
а какие зависимости тянет, бьюсь об заклад что qt, ща гляну
Плюс)
Вы все правильно обосновали!
« Последнее редактирование: 18 Октябрь 2023, 00:07:26 от imp »
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 942
  • Репутация: +24/-0
  • Автор темы
Вы все правильно обосновали!
по правде говоря они по ходу для gui используют ,gtk2,паскаль ,и собирают бинари  в lazarus-е , ну что сказать тоже имеет место быть, если ребятам так удобно почему нет, но мне со скриптом удобней, ибо нет лишних заморот  в использовании,и лишних зависимостей, только qemu да bash , скрипт подвешен на горячую клавишу, в три касания и boot флешки проверен...
« Последнее редактирование: 18 Октябрь 2023, 10:49:22 от totiks2012 »

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5395
  • Репутация: +143/-1
Цитата
но мне со скриптом удобней
Там тоже скрипт от betcher, а гуи это уже чья то самодеятельность.

https://abf.io/import/qemoo/blob/rosa2023.1/qemoo

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1739
  • Репутация: +50/-1
  • /dev/hands < /dev/ass
если пользователь понавтыкает флэшек, в системный блок, ну по забывчивости или как я из вредности из любопытсва, то скрипт возьмет первую по счету.
Я бы какой-нибудь пустой файл с названием QFlag, например, положил бы в корень. На какой флешке флаг - с той и грузим.
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3021
  • Репутация: +35/-0
    • MagOS linux
Там тоже скрипт от betcher, а гуи это уже чья то самодеятельность.
Ага. Примерно так. Только не я один, а вместе с Ильфатом. А гуй на паскале писал alex_q_2000. У него много мелких гуев с лазарусом сделаных. Сам пользуюсь только консольно.

- грузит с флешек, с исо, с img, с qcow2. При этом команда одинаковая.
- минимум параметров
- Можно подключать дополнительные устройства, например
    qemoo fedora.iso -a /dev/sdb
и можно прямо в виртуалке устанавливать с исо на флешку.
- и легаси и efi
- с ключом -i создаст виртдиск на который можно устанавливать, дополнительно создается конфиг для такой установки, который используется для загрузки таких образов.
- поддерживает глобальный конфиг, локальный конфиг и конфиг привязанный к образу.
- поддерживает полный проброс составного usb устройства (например токен или модем с sd картой)
- поддержка создания виртуалок загружаемых при старте системы с системд
- поддержка запуска виртуалок в фоне, подключаться к ним можно по SPICE, например с remmina
- можно генерировать cmdline для qemoo без запуска, например, чтобы добавить свои параметры или использовать полученный код в других скриптах.
« Последнее редактирование: 18 Октябрь 2023, 13:57:00 от betcher »

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 942
  • Репутация: +24/-0
  • Автор темы
- грузит с флешек, с исо, с img, с qcow2. При этом команда одинаковая.
- минимум параметров
- Можно подключать дополнительные устройства, например
    qemoo fedora.iso -a /dev/sdb
я смотрел по описанию утилита достойная, и потому думаю может стоит открыть по ней отдельную тему, чтоб более подробнее ознакомить с ней , например где скачать, как собрать если нужно, подробное описание использования, ибо я хотел потыкать но как я понял qemoo в составе rosa linux, то есть сделать её более доступной не только для rosa linux но и для других. 
upd: Пишу не из духа противоречия, а как человек заинтересованный темой.

upd2 : Только заметил ссылку на ваш скрипт, дал krasnyh , учитывая длину скрипта, снимаю шляпу, скрипт должен быть очень заряжен функционалом, если кому не трудно ткните пожалуйста в ман для этого скрипта, весьма заинтересован, можно разобравшись создать толковую инструкцию, либо если она есть принести её на наш форум.
« Последнее редактирование: 18 Октябрь 2023, 23:30:29 от totiks2012 »

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 942
  • Репутация: +24/-0
  • Автор темы
Я бы какой-нибудь пустой файл с названием QFlag, например, положил бы в корень. На какой флешке флаг - с той и грузим.
реализовал и такой сценарий (ох жара) создаём в корень флэшки метку QFlag (боюсь представить чтоб будет если забыть эту метку удалить, и она будет на обеих флэшках) так что с этим скриптом следим чтоб метка была только на загружаемой флэшке .
upd: ВАЖНО флэшка должна быть смонтирована
если у вас флэшка монтируется в /media то для ускорения поиска в строке result=$(sudo find / -type f -name "QFlag" 2>/dev/null) вписываем так result=$(sudo find /media -type f -name "QFlag" 2>/dev/null) это ускорит поиск и запуск

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

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

# Путь к файлу для виртуального жесткого диска
HDD_FILE="$HOME/ISO/flash.qcow2"


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

# Запускаем QEMU в зависимости от выбора пользователя
if [ "$ENABLE_CDROM" = "Опт-Прив_вкл" ] || [ "$ENABLE_CDROM" = "Опт-Прив_выкл" ]; then
    # Используем peco для выбора файла ISO из каталога ~/ISO
    ISO_FILE=$(find ~/ISO -name "*.iso" | peco)
   
    # Используем имя файла ISO для создания имени виртуального жесткого диска
    BASENAME=$(basename "$ISO_FILE" .iso)
    HDD_FILE="$HOME/ISO/$BASENAME.qcow2"

    if [ -f "$HDD_FILE" ]; 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-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
elif [ "$ENABLE_CDROM" = "Загрузка_с_флэшки" ]; then
# Определяем  флэшки c меткой QFlag
#TYPE_FLESH="$(lsblk -o NAME | grep -E 'sd[b-z]$' | head -n 1)"
result=$(sudo find / -type f -name "QFlag" 2>/dev/null)
device_info=$(df -h "$result" | tail -n 1)
TYPE_FLESH=$(echo "$device_info" | awk '{print $1}' | awk -F/ '{print $3}' | sed 's/[0-9]*$//')
# Путь к устройству флешки
USB_DEVICE="/dev/$TYPE_FLESH"
    # Запускаем QEMU с загрузкой с флэшки
        sudo qemu-system-x86_64 \
        -usb -drive file="$USB_DEVICE",format=raw,snapshot=on \
        -usb -drive file="$HDD_FILE",format=qcow2 \
        -machine q35,accel=kvm -cpu max \
        -smp cores=${CPU},threads=1,sockets=1 \
        -m "$MEMORY_SIZE" \
        -boot order=dc \
        -display gtk \
        -soundhw hda \
        -enable-kvm
fi


upd: в общем проверил что будет если метки будут на обеих флэшках, скрипт вылетает с ошибкой, и это хорошо, опять это не баг а фича :)
upd2: в режиме с флэшкой не работает звук, пробовал все режимы , не решил.
« Последнее редактирование: 19 Октябрь 2023, 00:23:10 от totiks2012 »

Оффлайн knn

  • Ветеран
  • *****
  • Сообщений: 2620
  • Репутация: +33/-0
« Последнее редактирование: 19 Октябрь 2023, 07:51:54 от 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 ГБ.