LINUX.ORG.RU

Создание загрузочных образов boobstrap v1.2

 ,


2

2

Спустя всего месяц неспешной разработки состоялся релиз boobstrap v1.2 — набор инструментов на POSIX shell для создания загрузочных образов и накопителей.

Boobstrap позволяет всего одной командой:

  • Создавать initramfs образ, включая в него любой дистрибутив GNU/Linux.
  • Создавать загрузочные ISO образы с любым дистрибутивом GNU/Linux.
  • Создавать загрузочные USB, HDD, SSD накопители с любым дистрибутивом GNU/Linux.

Особенность заключается в том, что после загрузки GNU/Linux будет работать либо полностью в чистом tmpfs, либо с использованием Overlay FS и SquashFS-образов, на ваш выбор. Вы устанавливаете любой дистрибутив GNU/Linux в директорию, производите все необходимые настройки (можно в отдельной директории), после чего всего одной командой создаёте загрузочное устройство, будь то ISO-образ, USB, HDD, SSD накопитель, а можете создать и initrd образ с системой. Система всегда будет находиться в одном состоянии и в случае поломки вы можете вернуться в исходное состояние нажатием одной кнопки Reset. Желаете перенести систему на другой хост, либо из имеющегося контейнера создать систему? Boobstrap сделает это.

Из ключевых изменений:

  • Добавлена поддержка загрузчика syslinux, помимо уже имеющегося grub2. Теперь вы можете на выбор использовать либо grub2, либо syslinux, либо и то и другое вместе, когда создаёте загрузочное устройство или ISO образ, за что отвечают опции --legacy-boot syslinux и --efi grub2 соответственно, и так же можно выбирать, какие режимы загрузки будет поддерживать ISO образ.
  • Добавлена опция --bootable, которая делает любое блочное устройство загрузочным. Для создания ISO образов должна быть использована опция --iso-9660.
  • Добавлены опции загрузки ядра boobs.use-shmfs для копирования содержимого всех оверлеев в tmpfs, boobs.use-overlayfs для загрузки с использованием Overlay FS, boobs.search-rootfs для выбора источника с системой, boobs.copy-to-ram для копирования системы в память с последующим отключением устройства.
  • Единственная обязательная зависимость для работы boobstrap только cpio. Остальные зависимости опциональны: grub2, syslinux — необходимы для создания загрузочных носителей, cdrkit либо xorriso на выбор — для создания ISO, squashfs-tools для создания SquashFS, однако ничто не мешает использовать опцию --cpio вместо --squashfs для упаковки вашего дистрибутива в архив. busybox будет использован только если он установлен, но если нет, будут скопированы все необходимые утилиты из вашей системы. Таким образом работа boobstrap гарантирована практически везде.

Например, следующая команда создаст initrd образ включив в него gentoo-chroot/ систему, упакованную как SquashFS образ, которая будет успешно загружена после загрузки самого initrd. Напомню, чтобы использовать Overlay FS совместно со SquashFS, необходимо передать опцию ядру boobs.use-overlayfs, иначе система будет распакована в tmpfs. Все дополнительные настройки можно произвести в отдельной директории, например gentoo-settings/

# mkdir initramfs/
# mkinitramfs initramfs/ --overlay gentoo-chroot/ --overlay gentoo-settings/ --squashfs > initrd

initrd-образ с системой внутри удобен, когда необходимо быстро развернуть систему, например, через PXE, либо на загруженной системе переключиться в initrd с использованием команды kexec -l /boot/vmlinuz-* --initrd=./initrd && kexec -e, ну или же находясь в интерфейсе виртуальной машины QEMU (возможно даже Proxmox), загрузиться из удалённого источника используя три команды IPXE: kernel http://[...]/vmlinuz , initrd http://[...]/initrd , boot. Как вы видите, даже обычный initrd с вашей системой внутри имеет множество вариантов использования.

Для создания загрузочных накопителей и образов используется команда mkbootisofs, например, так выглядит создание ISO образа с опцией --iso-9660 используя syslinux для загрузки в Legacy-mode (BIOS) и grub2 для загрузки в EFI-mode (UEFI).

# mkdir initrd/
# mkinitramfs initrd/ > initrd
# mkdir isoimage/
# mkdir isoimage/boot
# cp /boot/vmlinuz-* isoimage/boot/vmlinuz
# cp initrd isoimage/boot/initrd
# mkbootisofs isoimage/ --iso-9660 --legacy-boot syslinux --efi grub2 --output boot.iso \
                        --overlay gentoo-chroot/ --overlay gentoo-settings/ --squashfs

Вы можете указать один из режимов загрузки, либо не указывать их вовсе, соответствующий ISO образ будет успешно создан.

Установка на любой накопитель с последующей загрузкой с него выполняется опцией --bootable. Вам необходимо самостоятельно создать разделы на накопителе (fdisk) и отформатировать их (mkdosfs, mke2fs и так далее), после чего смонтировать устройство в директорию.

# mount /dev/sdb1 /mnt/drive/
# mkbootisofs /mnt/drive/ --bootable --legacy-boot grub2 --efi grub2 \
                          --overlay gentoo-chroot/ --overlay gentoo-settings/ --squashfs

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

Установка любой GNU/Linux системы сводится всего к одной команде. Установка может быть произведена на любой HDD, SSD и так далее. Стоит напомнить, что это по прежнему система работающая из Overlay FS / SquashFS, либо целиком загружающаяся в tmpfs, на выбор.

Помимо всего прочего у boobstrap имеется ряд интересных особенностей и дополнительных возможностей!

Например, вы можете сформировать фирменный boobstrap initrd командой mkinitramfs `mktemp -d` > /boot/initrd и загрузиться в свою систему с данным initrd, указав опции ядра boobs.use-overlayfs boobs.search-rootfs=/dev/sda1. В таком случае /dev/sda1, где установлена ваша домашняя система, будет подключен как read-only слой Overlay FS, а все изменения, которые вы произведёте, запишутся лишь временно в tmpfs. Вы можете добавить опцию boobs.copy-to-ram и тогда вся ваша система целиком будет скопирована в RAM, а жёсткий диск можно отключить от компьютера. Удобно, когда вам потребуется что-нибудь сломать, а откатить изменения можно просто перезагрузившись. :)

Но что если потребуется всё же сохранить все изменения в системе? Например, вы установили софт или что-то ещё. При работе в чистом tmpfs такое к сожалению невозможно, но если вы загрузились с использованием Overlay FS, то все изменения, которые происходят в системе, сохраняются в отдельной tmpfs-директории: /mnt/overlayfs/rootfs-changes! Сценарий использования очень простой. Вы загрузились в свою систему с USB-устройства, поработали, захотели сохранить всё, что изменено, тогда создайте cpio-архив из положите сюда же, на это же USB-устройство.

# cd /mnt/overlayfs/rootfs-changes
# find . -print0 | cpio --create --format "newc" --null --quiet > /mnt/drive/rootfs-changes.cpio
# cd $OLDPWD

Вы можете положить архив рядом с другими SquashFS и cpio «слоями», тогда при последующей загрузке архив будет подключен как просто ещё один read-only слой. Чтобы продолжать работать с изменениями, используйте опцию загрузки boobs.rootfs-changes=/rootfs-changes.cpio. Опция boobs.rootfs-changes подключает указанный слой с доступом для изменения. Слоем может выступать блочное устройство, к примеру вы можете указать /dev/sdb1, тогда все изменения сделанные в Overlay FS будут просто сохраняться на /dev/sdb1.

Boobstrap не смотря на имеющиеся широкие возможности всё ещё находится на стадии развития, все ваши замечания и предложения учитываются!

>>> Исходный код

★★★★★

Проверено: alpha ()

Ответ на: комментарий от Spoofing

ну ясно, надо было написать что «будет загрузочной на uefi» и bootx64.efi у тебя что представляет из себя?

irton ★★★★★ ()
Ответ на: комментарий от irton

bootx64.efi загрузочный образ создаваемый через grub-mkimage с минимальным набором драйверов (fat32, gpt и так далее) и early-grub.cfg конфигом, в котором всего она строка: search --file --no-floppy --set root /boot/vmlinuz т.к. после загрузки grub оказывается не сразу на нужном fat32 разделе с ядром, а в своём неком «лимбе» где ничего нет, откуда ещё надо сбежать. этим строка и занимается. и уже потом переключившись на нормальный grub.cfg с fat32-раздела, туда же, где есть ядро, оно уже переключиться в обычный режим загрузки.

Spoofing ★★★★★ ()
Ответ на: комментарий от Spoofing

а груб у нас что? загрузчик. в каком месте стали не нужны загрузчики я не понял.

irton ★★★★★ ()
Ответ на: комментарий от irton

Не надо никаких больше загрузчиков.

этой фразой подразумевалось, что со стороны пользователя не требуется никаких действий. не надо помечать раздел загрузочным или ещё что. просто скопировал и всё.

Spoofing ★★★★★ ()
Ответ на: комментарий от Spoofing

жаль, я подразумевал совсем другое, чуда не получилось.

irton ★★★★★ ()
Ответ на: комментарий от irton

вариантов немного.

положить само ядро vmlinuz с EFI_STUB.

опционально вкомпиливать initrd в него.

собрать загрузочный образ руками через objcopy

objcopy --add-section .cmdline="/proc/cmdline" --change-section-vma .cmdline=0x30000 \
        --add-section .linux="/boot/vmlinuz" --change-section-vma .linux=0x40000 \
        --add-section .initrd="/boot/initrd" --change-section-vma .initrd=0x3000000 \
"/efi/boot/bootx64.efi" "bootx64.efi"

использовать grub2 в качестве загрузчика.

других вариантов я не знаю. ))

Spoofing ★★★★★ ()

Чем оно лучше Packer?

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.