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

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

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

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1738
  • Репутация: +50/-1
  • /dev/hands < /dev/ass
ВАЖНО флэшка должна быть смонтирована

Кусок init от DdShurik, где он ищет kernel-${KERNELVER}.pfs по всем носителям:

Код
   blkid > /tmp/uuid.lst
    dev1=$(egrep -v 'loop|swap' /tmp/uuid.lst | cut -b6-9)
#а как быть с sr0 ?
fi
for DEV in $dev1
 do
  blkid /dev/$DEV | grep ntfs && MNT=ntfs-3g || MNT=mount
  mkdir /mnt/$DEV
  N=0
  until $MNT /dev/$DEV /mnt/$DEV 2>/dev/null
do
  sleep 1
  echo -n . >/dev/console
  N=$(($N + 1))
  [ $N = 10 ] && check_status 1
done
if [ -f /mnt/$DEV/$dir/base/kernel-${KERNELVER}.pfs ]; then
dev=$DEV
check_status 0
break
else
umount /mnt/$DEV
rmdir /mnt/$DEV
  continue
  fi
 done

Можно приспособить, чтобы при старте вашего скрипта монтировало нужную флешку.
Ну и ввести проверку на тип носителя fdisk-ом, чтобы на жестких не искало. Ну или повесить на кнопку "сканировать устройства", например.
« Последнее редактирование: 19 Октябрь 2023, 08:14:58 от imp »
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5395
  • Репутация: +143/-1
в режиме с флэшкой не работает звук
-soundhw hda
Создание устройств звуковой карты с использованием -soundhw (удалено в версии 7.1), ссылка.

Оффлайн totiks2012

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

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5395
  • Репутация: +143/-1
В qemoo -device ich9-intel-hda -device hda-duplex,audiodev=audio0 -audiodev pa,id=audio0
###Строка 297.

Или арчвики https://wiki.archlinux.org/title/QEMU#Audio.

не отработал и с новыми опциями
А версия qemu?

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 926
  • Репутация: +24/-0
  • Автор темы
Кусок init от DdShurik, где он ищет kernel-${KERNELVER}.pfs по всем носителям:
всегда в положительном афиге  от кода Дядь Шурика, я его не сумел приспособить, и потому пошёл пилить свой велосипед вот кусок кода который создаёт каталог /flash_drives/  в /mnt/ ищет все подключеные флэшки к компу создаёт для них каталоги, и подключает их в в /mnt/flash_drives/ далее можно искать метку QFlag в этом каталоге , этот способ решит сразу несколько задач, автоподключение флешки скриптом, не будет искать на sda, хотя это было реализовано и в прошлом скрипте, кроме этого решит проблему с задумчивостью при поиске метки, и унифицирует поиск, для всех, (у кого-то монтирование в /media у кого-то в /mnt) буду докручивать скрипт с этим кодом, но энтузиазм под охладел, ибо мой скрипт теряет смысл, есть ведь более функциональный  qemoo, но для того чтоб звёзды крепче держались на небе, работу нужно доделать.
Код
#!/bin/bash

# Путь к каталогу для монтирования
mnt_dir="/mnt/flash_drives/"

# Отмонтируем все устройства в каталоге, если они уже смонтированы
sudo umount $mnt_dir*

# Получаем список разделов после sda
devices=$(ls /dev/sd[b-z][0-9]*)

# Создаем каталоги и монтируем разделы
for device in $devices; do
    device_mount_point="$mnt_dir$(basename $device)"
   
    # Создаем каталог, если он не существует
    sudo mkdir -p $device_mount_point

    # Монтируем раздел в созданный каталог
    sudo mount $device $device_mount_point
    echo "Устройство $device смонтировано в $device_mount_point"
done

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 926
  • Репутация: +24/-0
  • Автор темы
А версия qemu?
QEMU emulator version 5.2.0 (Debian 1:5.2+dfsg-11+deb11u3)

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5395
  • Репутация: +143/-1
Цитата
version 5.2.0 (Debian
Да, дебиан такой дебиан, хранилище пыльного архива пакетов. :)

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 926
  • Репутация: +24/-0
  • Автор темы
В qemoo -device ich9-intel-hda -device hda-duplex,audiodev=audio0 -audiodev pa,id=audio0
###Строка 297.
на работе сработало что со старой опцией что с новой , спасибо вам ! Попробую дома на неттопе, видать экзотическая карточка у него

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 926
  • Репутация: +24/-0
  • Автор темы
вот работающий код реализующий автомонтирование флэшек в каталоге /mnt/flash_drives/, а также поиск по метке QFlag , Для загрузки флэшку нужно пометить флагом QFlag создаем пустой файл в корень флэшки с этим именем, теперь ищет эту метку не по всему корневому каталогу, а только в  директории  /mnt/flash_drives/ , и найдя загрузит дистрибутив имено с этой флэшки,в скрипте также были заменены опция для аудиоустройства, честно свистнутая одолженная из qemoo , спасибо всем кто помог, с написанием скрипта.
зависимости:
qemu-system-x86
qemu-utils
peco

Код
#!/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 \
          -device ich9-intel-hda -device hda-duplex,audiodev=audio0 -audiodev pa,id=audio0 \
          -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 \
          -device ich9-intel-hda -device hda-duplex,audiodev=audio0 -audiodev pa,id=audio0 \
          -enable-kvm
    fi
elif [ "$ENABLE_CDROM" = "Загрузка_с_флэшки" ]; then
# Путь к каталогу для монтирования
mnt_dir="/mnt/flash_drives/"

# Отмонтируем все устройства в каталоге, если они уже смонтированы
sudo umount $mnt_dir*

# Получаем список разделов после sda
devices=$(ls /dev/sd[b-z][0-9]*)

# Создаем каталоги и монтируем разделы
for device in $devices; do
    device_mount_point="$mnt_dir$(basename $device)"
   
    # Создаем каталог, если он не существует
    sudo mkdir -p $device_mount_point

    # Монтируем раздел в созданный каталог
    sudo mount $device $device_mount_point
    echo "Устройство $device смонтировано в $device_mount_point"
done

# Определяем  флэшки c меткой QFlag
#TYPE_FLESH="$(lsblk -o NAME | grep -E 'sd[b-z]$' | head -n 1)"
result=$(sudo find /mnt/flash_drives -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 \
        -device ich9-intel-hda -device hda-duplex,audiodev=audio0 -audiodev pa,id=audio0 \
        -enable-kvm

#mnt_dir="/mnt/flash_drives/"
sudo umount $mnt_dir*
fi


« Последнее редактирование: 19 Октябрь 2023, 14:36:17 от totiks2012 »

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1738
  • Репутация: +50/-1
  • /dev/hands < /dev/ass
Код
#!/bin/sh
flag="0"
for list in /sys/block/sd*/queue/rotational
 do ifflash=`cat $list`
 if [ "$ifflash" = "1" ]
 then
  disk=`echo $list | cut -f4 -d'/'`
   part=`lsblk /dev/$disk | grep part | cut -f1 -d' ' | grep -oE '[[:alnum:]]+'`
   for dev1 in $part
   do
   mkdir -p /mnt/$dev1
   mount /dev/$dev1 /mnt/$dev1
  if [ -f /mnt/$dev1/QFlag ]
  then
  echo "Нашёл!"
  flag="1"
    break
  else
  umount /mnt/$dev1
  rmdir /mnt/$dev1
  fi
  done
 fi
 [ $flag = "1" ] && break
done

Этот костыль ищет только флешки (по типу в /sys/block/sd*/queue/rotational, если "1" - значит флешка), на флешках разделы. Подхватывается и остается смонтированным первый найденный раздел, на котором в корне валяется QFlag. Можно допилить проверку, если уже есть смонтированные.
« Последнее редактирование: 20 Октябрь 2023, 11:16:20 от imp »
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 926
  • Репутация: +24/-0
  • Автор темы
Этот костыль ищет только флешки (по типу в /sys/block/sd*/queue/rotational, если "1" - значит флешка),
прошу меня извинить но я запустил скрипт и он весьма страно отработал :/mnt$ ls -1
flash_drives
sda1
sda10
sda2
sda5
sda6
sda7
sda8
sda9
sdb1
sdb2
sdb3
разделы  sdb1
sdb2
sdb3 у меня с флешки там ventoy, если даже под раздачу монтированием подпадет какой нить раздел жесткого дика я не вижу ничего страшного, я раздел sda исключил из поиска, остальные подключатся ровно на работу скрипта потом будут после оканчания скрипта отмонтированы... обязательно только флэшки подключать? если да то продолжу...

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1738
  • Репутация: +50/-1
  • /dev/hands < /dev/ass
Я забыл после размонтирования удалять созданную папку.
надо заменить
  else
  umount /mnt/$dev1
на
  else
  umount /mnt/$dev1
  rmdir /mnt/$dev1
Одно не пойму - оно и жесткий подхватило (sda)? Не должно. У меня такой чепухи не происходит...
« Последнее редактирование: 19 Октябрь 2023, 16:32:58 от imp »
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5395
  • Репутация: +143/-1
Одно не пойму - оно и жесткий подхватило (sda)? Не должно.
У меня тоже показывает 1 1. А вот так cat /sys/block/sd*/removable - 0 1.

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1738
  • Репутация: +50/-1
  • /dev/hands < /dev/ass
А вот так cat /sys/block/sd*/removable - 0 1.
вот и перебираем:
for list in /sys/block/sd*/queue/rotational
 do ifflash=`cat $list`
 if [ "$ifflash" = "1" ]
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 926
  • Репутация: +24/-0
  • Автор темы
только что тупнул , запустил скрипт без флэшек, долбаное пиво, ребятки я на отдых, завтра продолжу  :D ,но вывод до этого был с флешками,... всё всё гоню себя сам ...
« Последнее редактирование: 19 Октябрь 2023, 17:53:08 от totiks2012 »