Как стать автором
Поиск
Написать публикацию
Обновить

Установка Debian live на USB flash

Более трех лет назад на хабре появилась статья, рассказывающая о том, как сделать загрузочную флешку с Debian GNU/Linux.

С тех пор много воды утекло и сегодня мы разберем работу скрипта по установку на 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.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.