01.10.2020

booty — утилита для создания загрузочных образов и накопителей


Представлена программа Booty, которая позволяет создавать загрузочные образы с дистрибутивами GNU/Linux. Утилита даёт возможность одной командой создавать загрузочные образы initrd, файлы ISO или накопители, включающие в себя любой дистрибутив GNU/Linux. Код написан на POSIX shell и распространяется под лицензией GPLv3.

Все дистрибутивы, загруженные с использованием Booty, работают либо в SHMFS (tmpfs), либо в SquashFS + Overlay FS, на выбор пользователя. Дистрибутив создаётся один раз, а в процессе загрузки выбираются параметры, позволяющие использовать чистый tmpfs для корня, либо связку Overlay FS + SquashFS с записью изменений в tmpfs. Имеется возможность предварительно скопировать загружаемый дистрибутив в ОЗУ, что позволяет отключить USB-накопитель после загрузки и копирования дистрибутива в память.

Прежде всего, Booty генерирует собственный initrd образ, в котором могут использоваться родные утилиты из текущей системы или busybox. Имеется возможность включить (упаковать) целиком в initramfs установленный в директории дистрибутив (chroot). Это может быть полезно, когда необходимо обновить систему с использованием kexec: просто перезагрузить initrd с новыми ядром и новой системой внутри initrd.

Создание Booty-специфичного initrd образа:

     mkdir initramfs/     mkinitramfs initramfs/ --output initrd  

Создание initrd образа с включением в него дистрибутива из директории «gentoo/»:

     mkdir initramfs/     mkinitramfs initramfs/ --overlay gentoo/ --cpio --output initrd  

После чего данный initrd образ полностью готов к загрузке, например, через PXE или через kexec.

Далее Booty генерирует образы с системой, которая указана в качестве «оверлеев». Например, можно установить (распаковать архив) условный Gentoo в отдельной директории, после чего с использованием Booty будет сгенерирован cpio-архив или SquashFS образ с этой системой. Также можно в отдельной директории выполнить настройку дистрибутива, а в ещё одну директорию скопировать личные настройки. Все эти «слои» будут последовательно загружены друг поверх друга и создавать единую рабочую систему.

     mkdir initramfs/     mkinitramfs initramfs/ --overlay gentoo/ --overlay settings/ --overlay documents/ --squashfs --output initrd  

В конечном счёте, Booty позволяет создавать загрузочные ISO-образы и USB, HDD, SSD и другие накопители, устанавливая вышеописанную систему из образов. Booty поддерживает создание загрузочных систем BIOS и UEFI. Поддерживаются загрузчики GRUB2 и SYSLINUX. Загрузчики можно комбинировать, например для загрузки в BIOS использовать SYSLINUX, а для UEFI — GRUB2. Для создания ISO-образов дополнительно потребуется пакет cdrkit (genisoimage), либо xorriso (xorrisofs), на выбор.

Единственное дополнительное действие, которое потребуется, это заранее подготовить ядро (vmlinuz) для загрузки. Автор (Spoofing) рекомендует использовать «make defconfig». Перед созданием образа необходимо подготовить директорию, положив в неё ядро vmlinuz и заранее подготовленный «пустой» initrd, созданный в первом примере.

     mkdir iso/     cp /boot/vmlinuz-* iso/boot/vmlinuz     cp initrd iso/boot/initrd  

На этом подготовка завершена, теперь можем создавать из данной директории ISO образы.

Следующая команда создаст ISO образ, не загрузочный, просто ISO:

     mkdir iso/     mkbootisofs iso/ --output archive.iso  

Для создания загрузочного образа необходимо указать опцию «—legacy-boot» для BIOS и «—efi» для UEFI соответственно, в качестве параметров опции принимают либо grub2, либо syslinux, так же можно указать только одну опцию (например, не нужна поддержка UEFI загрузки, её можно не указывать).

     mkbootisofs iso/ --legacy-boot syslinux --output boot-biosonly.iso       mkbootisofs iso/ --legacy-boot syslinux --efi grub2 --output boot-bios-uefi.iso       mkbootisofs iso/ --efi grub2 --output boot-uefionly.iso  

И также, как до этого были включены образы с системой в initrd, можно включить их в ISO.

     mkbootisofs iso/ --overlay gentoo/ --squashfs --legacy-boot grub2 --efi grub2 --output gentoo.iso  

После данной команды будет сформирован загрузочный BIOS/UEFI ISO-образ, загружающий Gentoo в из SquashFS-образа с использованием Overlay FS, использующий tmpfs для хранения данных. Ядро должно быть собрано с поддержкой Overlay FS с SquashFS. Однако, если это по каким-то причинам не требуется, можно использовать опцию «—cpio» вместо —squashfs, для упаковки gentoo/ как cpio-архива, в таком случае архив будет распакован прямиком в tmpfs при загрузке, главное, чтобы для распаковки системы в tmpfs было достаточно оперативной памяти.

Интересный факт: если ISO образ созданный с использованием опции «—efi» распаковать на FAT32-флешку путём простого копирования файлов (cp -r), то Flash-накопитель будет загружаться в UEFI-режиме без какой-либо предварительной подготовки, благодаря специфике UEFI-загрузчиков.

Помимо загрузочных ISO с теми же параметрами может быть создан любой загрузочный накопитель: USB, HDD, SSD и так далее, при этом данный накопитель может продолжать использоваться по своему прямому назначению. Для этого необходимо примонтировать, например, USB-устройство и выполнить запуск mkbootisofs на нём. Только добавить одну опцию «—bootable», чтобы накопитель, на котором находится указанная директория, стал загрузочным.

  mount /dev/sdb1 /mnt  mkbootisofs /mnt --overlay gentoo/ --squashfs --legacy-boot grub2 --efi grub2 --bootable  

После чего USB-устройство станет загрузочным с оверлеем gentoo/ (следует не забыть скопировать файлы /boot/vmlinuz и /boot/initrd на устройство).

Если по каким-то причинам накопитель не был примонтирован в /mnt, и окажется так, что /mnt находится на основном устройстве /dev/sda, то соответственно загрузчик будет перезаписан на /dev/sda. Следует проявлять осторожность при указании опции —bootable.

В процессе загрузки Booty поддерживает ряд опций, которые можно передать указать в загрузчике, grub.cfg или syslinux.cfg. По-умолчанию без каких-либо опций выполняется загрузка и распаковка всех оверлеев в tmpfs (опция по умолчанию ooty.use-shmfs). Для использования Overlay FS должна быть использована опция booty.use-overlayfs. Опция booty.copy-to-ram предварительно копирует оверлеи в tmpfs, после чего только подключает их и загружает. После копирования USB-устройство (или другой накопитель) можно извлечь.

Источник: https://www.opennet.ru/opennews/art.shtml?num=53428

Добавить комментарий