Pull to refresh

Установка 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.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.