Представена е програмата , която позволява с една команда да създавате заредими образи initrd, ISO файлове или устройства, които включват всякакъв дистрибутив на GNU/Linux. Кодът е написан на POSIX shell и под лицензия GPLv3.
Всички дистрибутиви, заредени с помощта на Booty, работят или в SHMFS (tmpfs), или в SquashFS + Overlay FS, по избор на потребителя. Дистрибутивът се създава един път, а по време на зареждането се избират параметри, които позволяват да се използва чист tmpfs за корен, или комбинация от Overlay FS + SquashFS с запис на промените в tmpfs. Има възможност предварително да се копира зареждащият дистрибутив в RAM, което позволява да се изключи 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 и други устройства, инсталиращи описаната по-горе система от образите. поддържа създаването на зареждащи системи 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), то USB паметта ще се зарежда в 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 устройството ще стане зареждащо с overlay gentoo/ (не забравяйте да копирате файловете /boot/vmlinuz и /boot/initrd на устройството).
Ако по някакви причини носителят не е бил монтиран в /mnt и се окаже, че /mnt е на основното устройство /dev/sda, то съответно зареждачът ще бъде презаписан на /dev/sda. Трябва да се прояви внимание при задаване на опцията —bootable.
По време на зареждане Booty поддържа набор от опции, които могат да бъдат предадени за задаване в зареждача, grub.cfg или syslinux.cfg. По подразбиране, без никакви опции, се извършва зареждане и разопаковане на всички overlays в tmpfs (опция по подразбиране ooty.use-shmfs). За използване на Overlay FS трябва да бъде използвана опцията booty.use-overlayfs. Опцията booty.copy-to-ram предварително копира overlays в tmpfs, след което само ги свързва и зарежда. След копирането USB устройството (или друг носител) може да бъде извадено.
Източник: opennet.ru
