Разработки проекта PuppyRus > Программирование и компиляция
Установщик для флэшки live дистрибутива linux с ventoy.
totiks2012:
мне пришла идея а что если использовать ventoy в качестве универсального загрузчика, и написать cli инсталятор live usb для своего кастомного респина Debian12, сказано сделано. Инсталятор состоит из двух скриптов:
Первый скрипт подготавливает флэшку, устанавливает на неё разделы Ventoy, VENTOIEFI, дополнительный раздел, также с помощью fdisk подготавливает дополнительный раздел к форматированию в ext4. И делает перезагрузку .Также устанавливает второй скрипт в автозагрузку чтоб после перезагрузки продолжить процесс установки дистрибутива на флэшку.В более раней версии использовал peco, в финальной версии он уже не нужен.
------------
третье обновление и последнее код оптимизирован
использует cat /sys/block/$devices/events
убрал лишние диалоги
------------
Привожу код скриптов.
ВНИМАНИЕ СКРИПТЫ ПРИМЕНЯТЬ С ОСТОРОЖНОСТЬЮ и С ПОНИМАНИЕМ ТОГО ЧТО ОНИ ДЕЛАЮТ
ЕСТЬ РИСК ПОТЕРИ ДАННЫХ И ДЕЛАЕТЕ ВЫ ВСЁ ЭТО НА СВОЙ СТРАХ И РИСК!
ФЛЭШКУ в USB Слот ВТЫКАЕМ ОДНУ!
1.--Ve2usb-3.sh
--- Код ---
#!/bin/bash
#set -x
devices=$(lsblk -l -o NAME,TYPE | awk '$2 == "disk" && !/^(sda|zram0|fd0)/ {print $1; exit}')
echo "Устройство /dev/""$devices"
PART="$devices"
if [[ "$(cat /sys/block/$devices/events)" == "media_change" ]]; then
echo "Флешка вставлена."
# здесь можете выполнить дополнительные действия
else
echo "Флешка не вставлена."
exit
fi
read -p " Для продолжения жмем ВВОД"
cd "$PWD"/ventoy-1.0.97/
sudo ./Ventoy2Disk.sh -i -r 4000 /dev/"$PART"
printf 'n\np\n3\n\n\nw\n' | sudo fdisk /dev/"$PART"
echo "СЕЙЧАС ВАШ КОМПЬЮТЕР БУДЕТ ПЕРЕЗАГРУЖЕН"
echo "После перезагрузки СКРИПТ ЕДИНОРАЗОВО продолжит свою работу"
read -p "Для продолжения нажжмите ВВОД"
sleep 3
# Создание desktop-файла для автозапуска второго скрипта
cat > ~/.config/autostart/ventoy_copy.desktop << EOF
[Desktop Entry]
Type=Application
Exec=xfce4-terminal --window -e "/home/live/ol/copy_files.sh"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Terminal=true
Name=Ventoy Copy Files
Comment=Copy files to Ventoy partition after reboot
EOF
sudo reboot
--- Конец кода ---
2.--copy_files.sh
--- Код ---
#!/bin/bash
devices=$(lsblk -l -o NAME,TYPE | awk '$2 == "disk" && !/^(sda|zram0|fd0)/ {print $1; exit}')
echo "Устройство /dev/""$devices"
PART="$devices"
if [[ "$(cat /sys/block/$devices/events)" == "media_change" ]]; then
echo "Флешка вставлена."
else
echo "Флешка не вставлена."
exit
fi
echo "Будет создан новый раздел" "/dev/""$PART"3
read -p "Для продолжения жмем ВВОД"
sudo mkfs.ext4 /dev/"$PART"3
# Создание временного каталога для монтирования
sudo mkdir /mnt/temp
# Монтирование раздела
sudo mount /dev/"$PART"3 /mnt/temp
echo "Копирую файлы дистрибутива на флэшку"
echo "..."
sudo cp -r /home/live/ol/oldwave_7_1 /mnt/temp
# Отмонтирование раздела
sudo umount /mnt/temp
# Удаление временного каталога
sudo rmdir /mnt/temp
echo "Каталог с дистрибутивом oldwave скопирован"
sudo mkdir /mnt/fat16
sudo mount -t vfat /dev/"$PART"2 /mnt/fat16
# Переменная с содержимым для вставки в конец файла grub.cfg
new_config="
menuentry \"---Old-Wave-linux_7---\" {
set d=oldwave_7_1
export d
search --set=root --no-floppy --file /\${d}/boot/met9
linux /\${d}/boot/vmlinuz dir=\${d} linux.flags=perch quiet enable_services=ssh,firewalld
initrd /\${d}/boot/initrfs.img
}"
# Добавляем содержимое в конец файла grub.cfg
echo "$new_config" | sudo tee -a /mnt/fat16/grub/grub.cfg > /dev/null
# Удаление desktop-файла из ~/.config/autostart
rm ~/.config/autostart/ventoy_copy.desktop
echo "ВСЕ НЕОБХОДИМЫЕ ОПЕРАЦИИ ВЫПОЛНЕНЫ"
echo "ВЫ СТАЛИ ОБЛАДАТЕЛЕМ live USB респином DEBIAN12---Oldwave linux"
sleep 6
--- Конец кода ---
второй скрипт форматирует sdb3 в ext4 , далее копирует каталог с ресурсами live usb на sdb3 , и прописывает в конец grub.cfg конфигу для меню на sdb2
Структура каталога ~/ol его содержимое
каталог oldwave_7_1 --каталог с ресурсами live usb linux
каталог ventoy-1.0.97--тут понятно и так
скрипты Ve2usb-3.sh , copy_files.sh , рядом с перечислеными каталогами,всё это в каталоге ol в $HOME
upd: в строке первого скрипта sudo ./Ventoy2Disk.sh -i -r 4000 /dev/"$PART" цифра 4000 указывает на размер дополнительного раздела , можете его менять в нужную вам сторону.
imp:
--- Цитата: totiks2012 от 25 Февраль 2024, 21:29:05 ---второй скрипт форматирует sdb3
--- Конец цитаты ---
Почему именно sdb3? У меня это жесткий диск.
Мы с вами где-то уже опреднляли usb-устройства. И выбор между ними неплохо бы сделать, если из больше одного
totiks2012:
--- Цитата: imp от 25 Февраль 2024, 23:09:10 ---Мы с вами где-то уже опреднляли usb-устройства. И выбор между ними неплохо бы сделать, если из больше одного
--- Конец цитаты ---
да в скрипте с Qemu по критерию removable, sdb3 из той логики, что на sda обычно жесткие диски, для выбора я ввёл peco но когда сунул в слот 2 флэшки, скрипт стал путаться,ибо после перезагрузки dev может поменять букву, да и самому легко запутаться, и с этой точки зрения скрипт несовершенен, и требует доработок, если есть у вас или у кого либо еще дельные предложения, я готов их расмотреть, и применить ибо тема полезная, я сегодня применил к своим флэшкам, если не брать во внимание необходимость перезагрузки (ох уж эти капризы и требования fdisk) то скрипт неплохой, насчет вашего случая можно глянуть выхлоп lsblk -l без и с флэшкой, и скоректировать скрипт под себя, но вы правы необходимо как-то автоматизировать определение флэшки, завтра уже буду думать...
imp:
При чем тут qemu? И каким Боком флешка - sdb?
Флешки здесь:
/sys/block/sd*/queue/rotational
https://forum.puppyrus.org/index.php?topic=24103.msg187213#msg187213
totiks2012:
--- Цитата: imp от 26 Февраль 2024, 00:34:37 ---При чем тут qemu
--- Конец цитаты ---
в другом скрипте для qemu применили определение флэшки,за ссылку спасибо позже гляну.
Навигация
Перейти к полной версии