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

good-penguin.png

Хочу представить вашему вниманию фреймворк под названием boobstrap, написаный на POSIX shell, для создания загрузочных образов с дистрибутивами GNU/Linux. Фреймворк позволяет пройти весь пусть в три простых шага: от развёртывания системы в chroot, создания initramfs-образа включающего в себя систему из chroot, и в конечном счёте загрузочного ISO-образа. boobstrap включает в себя три утилиты mkbootstrap, mkinitramfs и mkbootisofs соответсвенно.

mkbootstrap устанавливает систему в отдельную директорию, имеется нативная поддержка CRUX, а в случае Arch Linux / Manjaro и дистрибутивов на основе Debian должны быть использованы сторонние утилиты pacstrap, basestrap и debootstrap соответственно.

mkinitramfs создаёт initramfs-образ, вы можете использовать установленную систему в директории как «оверлей», сжатый при помощи SquashFS, либо загрузившись в систему работать прямиком в tmpfs. Так например, команда mkinitramfs `mktemp -d` --overlay "arch-chroot/" --overlay "/home" --squashfs-xz --output initrd создаст initrd файл, включив в него два оверлея с «arch-chroot/» системой и вашим »/home», сжатых при помощи SquashFS, который далее вы можете загружать через PXE в tmpfs, либо создать загрузочный ISO образ с этим initrd.

mkbootisofs создаёт BIOS / UEFI загрузочный ISO-образ из указанной директории. В директорию достаточно положить /boot/vmlinuz и /boot/initrd.

boobstrap не использует busybox, а для создания рабочего окружения initramfs копируется минимальный набор программ с использованием ldd, необходимых для загрузки и переключения в систему. Список программ для копирования, как и всё остальное, можно настроить через файл конфигурации /etc/boobstrap/boobstrap.conf. Так же, вы можете установить любой минималистичный дистрибутив в отдельный chroot/, из которого далее создать уже полноценное initramfs окружение. В качестве такого минималистичного, но при этом полноценного окружения предлагается использовать шаблон «crux_gnulinux-embedded», который после xz занимает компромиссные 37 мб. busybox же, кроме своего размера, 3–5 мб против 30–50 мб полноценного GNU/Linux окружения, никаких преимуществ более не предлагает, таким образом использование busybox в проекте не видится целесообразным.

Как быстро проверить работоспобность и начать работу? Установите и запустите.

# git clone https://github.com/sp00f1ng/boobstrap.git
# cd boobstrap
# make install
# boobstrap/tests/crux_gnulinux-download-and-build
# qemu-system-x86_64 -enable-kvm -m 1G -cdrom tmp.*/install.iso

Так же вам необходимо доустановить зависимости, а именно: cpio, grub, grub-efi, dosfstools, xorriso. Использование squashfs-tools не обязательно, вы можете работать в tmpfs при соответствующем объёме оперативной памяти. В случае, если в системе чего-то недостаёт, boobstrap об этом сообщит при запуске.

Для упрощения создания конфигураций boobstrap предлагает использовать «шаблоны» и «системы», суть которых заключается в том, чтобы использовать «шаблоны» (bootstrap-templates/) для быстрой установки систем из файла, а непосредственно «системы» (bootstrap-systems/) использовать для настройки конечных конфигураций.

Так например, запуск скрипта boobstrap/bootstrap-templates/crux_gnulinux-embedded.bbuild установит минимальную конфигурацию системы CRUX GNU/Linux и сохранит её в файле crux_gnulinux-embedded.rootfs, далее вы запускаете boobstrap/bootstrap-systems/default/crux_gnulinux.bbuild который загрузит первичную конфигурацию из упомянутого файла, выполнит всю необходимую настройку и подготовит загрузочный ISO. Это удобно, когда например, множество систем используют однотипную конфигурацию: чтобы каждый раз не описывать одинаковый набор пакетов, вы используете один шаблон, на основе которого уже и создаёте загрузочные образы систем с конечной конфигурацией.

Где всё это использовать?

Вы настраиваете систему в файле один раз и запуском оного выполняете её сборку и/или обновление. Система работает в tmpfs, что делает её одноразовой, по-сути. В случае выхода системы из строя, вы одним нажатием кнопки Reset возвращаетесь в исходное состояние. Вы можете спокойно выполнить rm -rf /.

Вы можете настраивать конфигурации всех ваших систем локально, создавать образы, тестировать их в виртуальной машине или отдельном «железе», далее загружать их на удалённый сервер и запуском всего двух команд kexec -l /vmlinuz --initrd=/initrd && kexec -e обновлять всю систему целиком, перезагружая её в tmpfs.

Аналогичным образом вы можете перевести все системы, например на VDS, на работу в tmpfs, а диск /dev/vda зашифровать и использовать только под данные, без необходимости держать операционную систему на ней. Единственной «точкой утечки информации» в таком случае станет только «холодный дамп» памяти вашей виртуальной машины, а в случае компрометации системы (например, подбором пароля ssh или уязвимости в exim), вы можете загрузить новый ISO через «панель управления» вашего провайдера, чтобы вновь вернуть VDS в строй, не забыв при этом, отредактировать конфигурацию системы закрыв все уязвимости. Это быстрее, чем переустановка, последующая настройка и/или восстановление из бэкапа, ведь по-сути, загружаемый ISO с вашей системой это и есть ваш бэкап. «Семь бед — один Reset.»

В конце концов, вы можете создать любой дистрибутив под свои задачи, записать его на USB-накопитель и работать в нём, обновляя по мере надобности и снова перезаписывая его на USB-накопитель. Все данные хранить в «облаках». Больше не нужно переживать за сохранность системы и делать её бэкап, когда система, повторюсь, по сути стала «одноразовой».

Ваши пожелания, предложения и замечания приветствуются.

В репозитории по ссылке далее подробный README-файл (на английском) с описанием каждой утилиты и примеры использования, так же существует подробная документация на русском и история развития, доступные по ссылке: Комплекс загрузочных скриптов boobstrap.

>>> Получить исходный код

©  Linux.org.ru