Создаём свой загрузочный диск LiveCD Debian

в 7:04, , рубрики: Debian, LiveCD

image
Решил поделиться сим знанием. Всё это я сам собрал в интернете. Опробовал и удостоверился, что оно работает. Дам немного комментариев к этой инструкции, чтобы было понятнее.

Начну с того, что свой загрузочный cd диск хотел создать давно, но руки не доходили. Обычно я просто обходился дампом системы, если хотелось сделать копию рабочей. Но каждый раз делать всё руками — руки отсохнут. Тем более, что не каждому объяснишь как сделать копию системы, как разбить и отформатировать диск, сделать диск загрузочным. Не у всех, знаете ли, есть рабочий линукс под рукой. Ну вот руки то мои взмолились и надоело всё делать по шпаргалкам — детсад ей богу.

Перейдем к практике. Установим эти замечательные пакеты.

apt-get install xorriso live-build extlinux syslinux squashfs-tools

xorriso для создания загрузочного образа
syslinux, extlinux для использования mbr загрузки
squashfs-tools для создание сжатой файловой системы
live-build для создания самой системы, которая будет зажата и помещена в образ iso

Создаем каталог для образа и распаковываем минимальную систему повыбранной архитектуре. chroot — это корневая папка, где ибудет образ.

mkdir ~/livework && cd ~/livework
debootstrap --arch=i386 wheezy chroot

Далее чрутимся, монтируем для эмуляции рабочей системы необходимые каталоги. Для генерации UUID устанавливаем dbus-uuidgen. Далее ставим ядро и необходимые утилиты для live загрузки. Ну и далее себе ни в чем не отказываем, устанавливаем всё что хочется. Можно и иксы установить и сделать автозагрузку этих иксов под пользователем или рутом. Позже, когда вы уже сделаете диск, его можно протестировать на виртуалке и если что не нравится тут же переделать войдя чрутом в папку chroot.

cd ~/livework
chroot chroot
mount none -t proc /proc
mount none -t sysfs /sys
mount none -t devpts /dev/pts
export HOME=/root
export LC_ALL=C
apt-get install dialog dbus
dbus-uuidgen > /var/lib/dbus/machine-id
apt-get install linux-image-686 live-boot
apt-get install dump bzip2 mc icewm ....
passwd
apt-get clean
rm /var/lib/dbus/machine-id && rm -rf /tmp/*
umount /proc /sys /dev/pts
exit

Короче, образ системы мы создали. Далее создаем папку для live загрузчика. Копируем в нее vmlinuz и inird ядра вашей созданной системы. И создаём сжатую файловую ситему из папки chroot

mkdir -p binary/live && mkdir -p binary/isolinux
cp chroot/boot/vmlinuz-* binary/live/vmlinuz
cp chroot/boot/initrd.img-* binary/live/initrd
mksquashfs chroot binary/live/filesystem.squashfs -e boot

Далее копируем файлы, необходимые для загрузки с CD, редактируем меню загрузки.

cp /usr/lib/syslinux/isolinux.bin binary/isolinux/.
cp /usr/lib/syslinux/menu.c32 binary/isolinux/.
nano binary/isolinux/isolinux.cfg
ui menu.c32
prompt 0
menu title Boot Menu
timeout 300

label live-686
	menu label ^Live (686)
	menu default
	linux /live/vmlinuz
 	append initrd=/live/initrd boot=live persistence quiet

label live-686-failsafe
	menu label ^Live (686 failsafe)
	linux /live/vmlinuz
	append initrd=/live/initrd boot=live persistence config memtest noapic noapm nodma nomce nolapic nomodeset nosmp nosplash vga=normal

endtext

Всё, готово! Теперь только осталось создать образ диска.

xorriso -as mkisofs -r -J -joliet-long -l -cache-inodes -isohybrid-mbr /usr/lib/syslinux/isohdpfx.bin -partition_offset 16 -A "Debian Live"  -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o remaster.iso binary

Когда вы во второй раз начнете собирать диск, то удалите файл binary/live/filesystem.squashfs, иначе комп будет долго выяснять чего же нужно добавить в гигабайтный архив. А вы будете нервничать, почесывая затылок вожидании нового ребилда.
У меня в папке livework лежит скрипт, который я запускаю, когда хочу пересоздать диск.

rm binary/live/filesystem.squashfs
mksquashfs chroot binary/live/filesystem.squashfs -e boot
xorriso -as mkisofs -r -J -joliet-long -l -cache-inodes -isohybrid-mbr /usr/lib/syslinux/isohdpfx.bin -partition_offset 16 -A "Debian Live"  -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o install.iso binary

Если вы хотите тот-же образ системы сделать на флешке, то нет ничего проще.
Разница только в том, что вам не надо создавать образ диска, а вместо этого нужно пометить раздел с системой загрузочным (fdisk) и записать в загрузочную область диска mbr. Ну и для загрузки использовать extlinux вместо isolinux, если у вас раздел отформатирован в EXT. В примере диск /dev/sda, а в /mnt примонтирован образ системы

extlinux -i /mnt && cat /usr/lib/extlinux/mbr.bin > /dev/sda
cp /usr/lib/extlinux/*.c32 /mnt && cp /usr/lib/syslinux/vesamenu.c32 

Меню загрузки можно скопировать с вашего ISO образа но в другой файл, так как теперь у вас не ISO а EXT.

cp isolinux/isolinux.cfg /mnt/extlinux.conf

Чуть отойду от темы. Лайв ISO образ хорош тем, что он стабилен и не изменяем. Плохо же, что он грузит оперативку. Если вы хотите освободится от сжатого образа, то загрузка у вас изменится. Итак, в случае, если у нас есть НЕ сжатый образ системы и мы хотим просто прописать его загрузку, то пишем такой конфиг.

nano /mnt/extlinux.conf

Содержимое файла. Тут ###uuid### замените на ваш или вообще впишите root=/dev/sda1, например.
До ядра пишется полный путь, ссылки не канают. Повторюсь, тут мы отошли немного от темы, конфиг нужен не для сжатой системы, а для обычной.

ui vesamenu.c32
prompt 0
timeout 300

menu title Boot Zagruzka
menu color title 1;33;44
menu color sel 7;37;40
menu color unsel 33;44
menu color border 33;44
label Linux-Debian-686
        kernel /boot/vmlinuz-3.2.0-0.bpo.2-686-pae
        append initrd=/boot/initrd.img-3.2.0-0.bpo.2-686-pae root=UUID=###uuid### ro quiet

label Linux-Debian-686 (rescue mode)
        kernel /boot/vmlinuz-3.2.0-0.bpo.2-686-pae
        append initrd=/boot/initrd.img-3.2.0-0.bpo.2-686-pae root=UUID=###uuid### ro single

Ну и собственно, возвращаясь к сжатой системе LiveCD, копируем папку на диск со сжатой файловой системой.

cp -R live /mnt

Надеюсь, ничего не напутал :)

Автор: redeyser

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js