Feature: copyefi
Пользовательская фича для make-initrd.
фича тестировалась только на Altlinux P10, с установленным make-initrd version 2.31.0.
Фича копирует собранный make-initrd образ initrd в efi раздел, для использования совместно с загрузчиком из systemd-boot.
ВНИМАНИЕ!
- Это не релиз, а рабочий макет! Возможно, кому то пойдет в качестве заготовки или для иллюстрации “как не надо писать код”. В принципе это концепт just for fun На фиче проверял саму возможность автоматизации работы с systemd-boot. Так как при установке ядра всегда генерируется initrd, то этот грязный хак позволяет автоматизировать копирование ядра и initrd куда хочу. Если будет найден другой путь, то будет просто мелкая демонстрация возможностей работы с фичами make-initrd.
К проекту make-initrd не имеющий отношения, кроме паразитирования на нем для своих целей. Потому и установщик ставит фичу через грязный хак, и разработка ведется через
задницу некоторое количество костылей.
Собственно сама фича, это файлы:
copyefi/config.mk
copyefi/rules.mk
copyefi/bin/copyefi-run
copyefi/README.md
Остальные файлы это эмуляция (точнее грубая имитация) поведения make-initrd. Необходимо для вызова простой фичи в фейковом окружении. Написано и не причесано, но судьба продакшена неясна, а для личного использования уже и так оверкод.
УСТАНОВКА
скачать каталог с фичей, через git или как вам угодно. Если архив - само собой разархивировать. Далее выполняем в командной строке:
cd make-initrd-copyefi
make DESTDIR=/ install
Make без указания DESTDIR=/ установит рабочие файлы фичи, в необходимой файловой иерархии в fake директорию, для опытов, кому надо разобраться.
ВНИМАНИЕ!
-
установка через make install НЕ ТЕСТИРОВАЛАСЬ! Используйте пакетный менеджер. Для альта минимальный спек в наличии.
-
ВНИМАНИЕ Фича НЕ удаляет старые ядра из EFI, фича делает бэкапы конфигов и initramfs, чем усиленно
засираетзабивает EFI раздел при смене версии ядра. При удалении штатными средствами пакетного менеджера старых ядер, их копии будут оставаться на EFI разделе. Удалять старые ядра и initramfs, как и бекапы, придется вручную. Сборщик мусора возможен, но не реализован.
ВНИМАНИЕ ВНИМАНИЕ Инитрд ядер 6-й версии у автора занимают минимум 50M, плюс его бэкапы и само ядро. Фича НЕ проверяет свободное место, но требует несколько больше свободного места, чем необходимо для ядра и initramfs ( а именно хочет удвоенного пространства), для избежания переполнения, или вылетает с ошибкой. Соответственно make-initrd может не собрать initrd, что может несколько опечалить. В принципе, поведение фичи проектировалось что бы не мешать собираться initrd штатно, в раздел /boot, и в принципе просто выводя предупреждение, но при отсутствии должного тестирования, это вопрос открытый.
УМВР.
Использование
-Для включения фичи правится файл конфигурации пакета make-initrd , а именно /etc/initrd.mk добавляем название фичи в параметр FEATURES
FEATURES += copyefi
Фича копирует и само ядро, для которого собран образ. Файлы копируются в каталог по пути /boot/efi/EFI/$(COPY_BOOTLOADER_ID) Параметр COPY_BOOTLOADER_ID задается в конфигурационном файле. Значение по умолчанию:
**COPY_BOOTLOADER_ID = altlinux**
ЗНАЧЕНИЯ ПАРАМЕТРОВ ПО УМОЛЧАНИЮ.
Для изменения параметров, нужно вносить только необходимые к изменению параметры в файл конфигурации пакета make-initrd , а именно /etc/initrd.mk
COPY_BOOTLOADER_ID = altlinux
COPY_EFI_TITLE = $(COPY_BOOTLOADER_ID)
COPY_CMDLINE_LINUX_DEFAULT = ro quiet panic=30 splash acpi_osi=Linux
COPY_RECORD_EFI_CONFIG = YES
При задании параметра: COPY_RECORD_EFI_CONFIG = YES фича создает .conf файл в стандартной для systemd-boot директории /boot/efi/efi/loader/entries , с записью версии ядра и параметров запуска в файл, в следующем формате:
title altlinux
version 6.1.30-un-def-alt1
linux /EFI/altlinux/vmlinuz-6.1.30-un-def-alt1
initrd /EFI/altlinux/initrd-6.1.30-un-def-alt1.img
options root=UUID=309adbd1-0f2e-4a4a-8f85-79f1679eb73a ro quiet panic=30 splash acpi_osi=Linux
Так же, фича добавляет указание на дефолтную загрузку в файл /boot/efi/loader/loader.conf, приводя его к виду:
default 6.1.30-un-def-alt1.conf
timeout 5
console-mode max
editor yes
Фича правит только первую строку loader.conf, или создает файл по этому шаблону, если файла не было.
Настройка параметров ядра
Передаваемые параметры ядра задаются через опцию COPY_CMDLINE_LINUX_DEFAULT По умолчанию, заданы параметры “ro quiet panic=30 splash acpi_osi=Linux”, UUID корневого раздела генерируется автоматически. в результате строка параметров в конфигурации загрузчика примет вид:
options root=UUID=309adbd1-0f2e-4a4a-8f85-79f1679eb73a ro quiet panic=30 splash acpi_osi=Linux
options root=
При желании, UUID можно задать самостоятельно, параметром COPY_LINUX_ROOT_UUID , приведя строку этого параметра к виду:
COPY_LINUX_ROOT_UUID = UUID=309adbd1-0f2e-4a4a-8f85-79f1679eb73a
С другими способами задания корня не тестировано. Возможно, PARTLABEL=ALTLINUX или PARTUUID=65b7629b-5443-450a-8172-a53549a6f710 сработают то же.
все опции в одной
Параметр COPY_CMDLINE_LINUX отменит всю автоматизацию генерации UUID, и перекроет все опции загрузки, заданные в других параметрах. В него ПРИ НЕОБХОДИМОСТИ можно внести всю строку параметров ядра, включая опции корня. Кому надо, тот разберется.
COPY_CMDLINE_LINUX = root=UUID=309adbd1-0f2e-4a4a-8f85-79f1679eb73a ro quiet panic=30 splash acpi_osi=Linux
Feature: copyefi
This is a custom feature. Its copy initramfs image and kernel image to EFI part.
Parameters
- COPY_BOOTLOADER_ID – The symbolic identifier of the system. By default, altlinux COPY_EFI_TITLE – The symbolic identifier of the system. By default values COPY_BOOTLOADER_ID COPY_EFI_LOADER_CONF The parameter allow or disables writing configuration files for the EFI boot loader “systemd-boot”. It can take the values ‘YES’ for writing, any other is ignored and writing to configuration files is not performed. COPY_CMDLINE_LINUX_DEFAULT Entries on this line are added to the end of the ‘linux’ command line for both normal modes. It is used to pass options to the kernel. COPY_LINUX_ROOT_UUID The UUID parameter of the system partition is calculated automatically, but can be passed by the user. COPY_CMDLINE_LINUX A complete string of parameters passed to the linux kernel as options, including the UUID of the root partition and all other boot parameters. Accordingly, all other parameters concerning the loading parameters (COPY_LINUX_ROOT_UUID && COPY_LINUX_ROOT_UUID) will be ignored! Under normal conditions, do not use this parameter, let it be set automatically. Use the “COPY_CMDLINE_LINUX_DEFAULT” parameter for the boot parameters of the form “ro quiet panic=30 splash acpi_osi=Linux”.
Описание
Фича для make-initrd, копирующая собираемый образ initrd в EFI раздел, для последующей загрузки с помощью systemd-boot