Более трех лет назад на хабре появилась статья, рассказывающая о том, как сделать загрузочную флешку с Debian GNU/Linux.
С тех пор много воды утекло и сегодня мы разберем работу скрипта по установку на USB flash самопального дистрибутива на основе Debian GNU/Linux, самопальным скриптом.
Вот и все!
Скорее всего, вам придется установить пакеты syslinux и parted.
С тех пор много воды утекло и сегодня мы разберем работу скрипта по установку на USB flash самопального дистрибутива на основе Debian GNU/Linux, самопальным скриптом.
#!/bin/sh -e
#Выводим справочную информацию при запуске скрипта без указания параметров
if [ "$1" = "" ]
then
echo "\n flash-installer установщик Luxendran на USB-флеш-накопитель \n \n"
echo " flash-installer list"
echo " Список USB дисков \n"
echo " flash-installer format /dev/sda1"
echo " Форматирование тома USB диска \n"
echo " flash-installer file.iso /dev/sda1"
echo " Установка Luxendran на том USB диска \n"
echo " flash-installer live /dev/sda1 2048"
echo " Создание файла live-rw, размер задается в мегабайтах \n"
exit
fi
#Проверяем подключен ли хотя бы один USB диск
if ! ls /dev/disk/by-id/usb-*part* &> /dev/null
then
echo USB Диски не найдены!
exit
fi
#Переменная $DISK отвечает за вывод всех USB дисков
DISK=$(ls /dev/disk/by-id/usb-*part* | sed 's/-part[0-9]//g')
#Генерация списка дисков при указании параметра list
if [ "$1" = "list" ]
then
for i in $DISK
do
if [ -b $i ]
then
echo $i | sed 's/\// /g' | awk '{print $4}'
fdisk -l $i | grep -e sd -e Device
echo "\n"
exit
fi
done
fi
#Проверка правильности указания раздела
if ! ls -l /dev/disk/by-id/usb-*part* | grep ${DEV}$ > /dev/null
then
echo $2 это не раздел USB диска.
exit
fi
#Проверяем примонтирован ли указанный раздел, если да то производим размонтирование
if cat /proc/mounts | grep $2 > /dev/null
then
umount $2
fi
#Создаем папки для монтирования ISO образа и USB диска
mkdir -p /tmp/luxendran-iso /tmp/luxendran-flash
#Обработка параметра live и генерация файла сохранения
if [ "$1" = "live" ]
then
mount $2 /tmp/luxendran-flash
FREE=$(df -m | grep $2 | awk '{print $4}')
if [ "$3" = "" ]
then
echo На разделе $2 свободно $FREE.
umount $2
exit
else
if ! [ $3 -gt 0 ]
then
echo неправильно указан размер live-rw.
exit
else
if ! [ $3 -ge $FREE ]
then
dd if=/dev/zero of=/tmp/luxendran-flash/live-rw bs=1M count=$3
mkfs.ext2 -F /tmp/luxendran-flash/live-rw
umount $2
exit
else
echo На разделе $2 свободно $FREE, укажите меньшее значение.
exit
fi
fi
fi
fi
#Обработка параметра format
if [ "$1" = "format" ]
then
mkfs.vfat $2
echo $2 отформатирован в FAT32
exit
fi
#Проверяем действительно ли указан ISO образ и не примотрирован ли он ранее
if ! file $1 | grep "ISO 9660" > /dev/null
then
echo $1 это не ISO образ диска.
exit
elif cat /proc/mounts | grep /tmp/luxendran-iso > /dev/null
then
umount /tmp/luxendran-iso
fi
#Переменная $DEVICE удаляет цифры у раздела получая таким образом том
DEVICE=$(echo $2 | tr -d [:digit:])
#Переменная $DEV_PART отвечает за номер раздела
DEV_PART=$(echo $2 | sed 's/\/dev\/sd[a-z]//g')
#Записываем MBR с syslinux на $DEVICE
dd if=/usr/lib/syslinux/mbr.bin of=$DEVICE
#Делам раздел загрузочным
parted $DEVICE set $DEV_PART boot on
#Монтируем раздел флешки и образ диска
mount $2 /tmp/luxendran-flash
mount -o loop -t iso9660 $1 /tmp/luxendran-iso
#Устанавливаем загрузчик syslinux на раздел
syslinux -i $2
#Копируем файлы дистрибутива
cp -r /tmp/luxendran-iso/live/ /tmp/luxendran-flash/live
mkdir -p flash/syslinux
cp /tmp/luxendran-iso/isolinux/isolinux.cfg /tmp/luxendran-flash/syslinux/syslinux.cfg
cp /tmp/luxendran-iso/isolinux/live.cfg /tmp/luxendran-flash/syslinux/live.cfg
cp /tmp/luxendran-iso/isolinux/menu.cfg /tmp/luxendran-flash/syslinux/menu.cfg
cp /tmp/luxendran-iso/isolinux/splash.png /tmp/luxendran-flash/syslinux/splash.png
cp /tmp/luxendran-iso/isolinux/stdmenu.cfg /tmp/luxendran-flash/syslinux/stdmenu.cfg
cp /tmp/luxendran-iso/isolinux/vesamenu.c32 /tmp/luxendran-flash/syslinux/vesamenu.c32
#Производим размонтирование раздела флешки и образа диска
umount $2 /tmp/luxendran-iso
#Удаляем временные папки
rm -r /tmp/luxendran-iso /tmp/luxendran-flash
#Рапортуем о выполенной работе
echo Выполнено без ошибок.
Вот и все!
Скорее всего, вам придется установить пакеты syslinux и parted.