Хочу представить вашему вниманию фреймворк под названием 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.