Многих пользователей GNU/Linux часто интересует вопрос: как система работает изнутри, какие этапы она проходит в процессе загрузки и как собрать свой дистрибутив?
Так, в процессе работы над принципиально новым дистрибутивом GNU/Linux в первую же очередь был написан простой скрипт на Bash, автоматизирующий процесс создания загрузочных ISO-образов для будущего дистрибутива. Данный скрипт в чуть более 200 строчек по сути является «самодокументируемым кодом» и поможет всем новичкам осуществлять сборки дистрибутивов Linux для личного использования.
Сборка ISO проходит в несколько этапов:
- Установка загрузчиков syslinux для PC и grub для EFI;
- Сборка и установка ядра Linux;
- Сборка и установка окружения Busybox;
- Настройка корневой системы, создание необходимых каталогов и файлов;
- Создание ISO для загрузки с CD или USB-накопителей.
Требования к системе для сборки:
- grub версии 2 с поддержкой EFI, но можно обойтись и без него, если вам не нужна поддержка EFI;
- syslinux содержит утилиту isohybrid, которая позволяет создавать загрузочные USB-накопители, а не только CD/DVD-диски, можно так же обойтись и без неё;
- cdrkit содержит утилиту genisoimage, которая создает ISO-образы, требуется обязательно. Обратите внимание, что не во всех дистрибутивах genisoimage пропатчен для создания EFI-разделов.
- Потребуются инструменты для сборки и компиляции программ, поскольку скрипт собирает из исходных кодов ванильное ядро Linux и окружение Busybox.
Как видно, скрипт делает немного, и более того: некоторые шаги вы можете пропустить, если например, у вас имеется собственное ядро Linux, которое вы собираетесь использовать для загрузки.
Для некоторых специфичных задач потребуются права root, поскольку скрипт должен подготовить EFI-образ для загрузки: необходимо выполнить команды mount и umount. Скрипт использует директорию /tmp для сборки, если у вас она находится в tmpfs, то потребуется около 2Гб свободной памяти: в /tmp собирается Linux и Busybox. Однако /tmp можно изменить на что-нибудь другое, например $HOME, — вы найдёте в скрипте как это сделать.
После всего, в рабочей директории /tmp/tmp.some-here
появится файл bootable.iso
— образ полностью готовый к записи на CD или USB-накопитель и дальнейшей загрузке с него. Образ можно протестировать в виртуальной машине или на компьютере, выполнив перезагрузку. Как всегда, для записи на USB используйте команду dd: dd if=/tmp/tmp.some-here/bootable.iso of=/dev/sdX
.
Вкратце, весь процесс загрузки происходит так: железо передаёт управление загрузчику, загрузчик передаёт управление ядру и init
самая первая программа в корне образа initramfs
, которую ядро запускает. В качестве примера init
запустит /bin/ash
, предоставив доступ к командной строке. Возможности по созданию дистрибутивов ограничиваются только вашей фантазией.
Программа makeiso познавательна для всех желающих начать создавать собственные загрузочные ISO-образы с дистрибутивами GNU/Linux.
>>> Скриншот
>>> Подробности
Перемещено JB из doc