Вопрос или проблема
Я загружаюсь с EFI, используя замечательный загрузчик rEFInd. На данный момент мне пришлось настраивать загрузку вручную, копируя совместимый с EFI образ загрузки Linux на мой EFI-раздел и создавая файл конфигурации для определения пункта меню rEFInd и ссылки на конкретное ядро на EFI-объеме.
GRUB, с другой стороны, добавляет новые версии ядра по мере их установки, и я всегда загружаюсь в новое ядро при следующей загрузке. Я полагаю, это достигается с помощью скрипта update-grub
.
Есть ли другой скрипт, который я могу вызвать для автоматического развертывания новых образов ядра в мой EFI-раздел и обеспечения их доступности при следующей загрузке? Я хотел бы автоматизировать этот процесс как можно больше, чтобы всегда получать последние обновления безопасности ядра.
Это требует надлежащей поддержки в дистрибутиве (я внедрил поддержку UEFI в ALT Linux); можно обойти это, используя символические ссылки и файловые драйверы rEFInd, или вставив некоторый пользовательский скрипт в /etc/grub.d, конечно…
Если честно, то самая развитая инфраструктура обработки бинарных файлов PE-COFF, которую я видел на данный момент, была создана в PLD Linux.
Если вы используете пакеты ядра .deb
(т.е. либо используете стандартные ядра вашего дистрибутива, либо собираете свои собственные по методу Debian), то процесс установки пакета ядра выполнит любые скрипты, расположенные в соответствующих подпапках /etc/kernel/
. В частности, директория /etc/kernel/postinst.d/
будет хорошим местом для скрипта, который сделает новое ядро доступным для rEFInd.
Также обратите внимание, что достаточно свежие версии rEFInd могут автоматически обнаруживать ядра Linux и использовать файл refind_linux.conf
для определения наборов параметров загрузки ядра универсальным образом: по умолчанию rEFInd предложит самый последний обнаруженный файл ядра и использует первый набор параметров загрузки с ним. Нажав F2 (я думаю), вы можете получить подменю с более старыми версиями ядра и другими наборами параметров загрузки. Использование этой функции может позволить вам обойтись более простым скриптом.
Ответ или решение
Обновление версий ядра при загрузке с использованием rEFInd может потребовать некоторых усилий, так как, в отличие от GRUB, rEFInd не имеет встроенной функции автоматического обновления меню при установке новых версий ядра. Однако существуют решения и методы, позволяющие автоматизировать этот процесс.
-
Автоматизация установки ядер: Если вы используете .deb-пакеты (например, стандартные ядра вашей дистрибутивной системы или собственные ядра, собранные по стандартам Debian), то процесс установки нового ядра будет запускать сценарии, находящиеся в соответствующих подкаталогах
/etc/kernel/
. В частности, вам следует создать скрипт в каталоге/etc/kernel/postinst.d/
, который будет копировать новую версию ядра на ваш EFI-раздел и обновлять конфигурацию rEFInd.Пример скрипта может выглядеть следующим образом:
#!/bin/bash set -e KERNEL_VERSION=$(basename "$1") KERNEL_IMAGE="/boot/$KERNEL_VERSION" EFI_PARTITION="/boot/efi/EFI/MyLinuxDistro" # Укажите ваш EFI-раздел cp "$KERNEL_IMAGE" "$EFI_PARTITION/vmlinuz-$KERNEL_VERSION" # Здесь вы можете также копировать initramfs, если это необходимо
Не забудьте сделать скрипт исполняемым:
sudo chmod +x /etc/kernel/postinst.d/your_script_name
-
Использование refind_linux.conf: Если у вас установлена более новая версия rEFInd, вы можете воспользоваться возможностью автоматического обнаружения ядер Linux. Вам понадобится создать файл
refind_linux.conf
в вашем EFI-разделе, который будет содержать базовые параметры загрузки для последних версий ядра. В этом файле вы можете указать параметры для ядра, и rEFInd будет автоматически загружать последнее обнаруженное ядро.Пример файла
refind_linux.conf
:"Boot the latest kernel" "root=UUID=your-root-uuid ro quiet splash"
С помощью этого метода, rEFInd по умолчанию предложит самую новую версию ядра, и вы сможете получить доступ к более старым версиям через меню, нажав клавишу (обычно F2).
-
Symlinks для упрощения: Вы также можете создать символические ссылки на ваши ядра. Например, создайте ссылку
vmlinuz-current
, которая всегда будет указывать на вашу последнюю версию ядра. Это упростит процесс, так как вам не придется менять конфигурацию rEFInd при каждом обновлении ядра. Пример создания символической ссылки:ln -sf /boot/vmlinuz-$(uname -r) /boot/efi/EFI/MyLinuxDistro/vmlinuz-current
-
Скрипт для автоматического обновления: Для полной автоматизации вы можете создать дополнительный скрипт, который будет вызываться, например, при каждом обновлении пакетов, чтобы автоматически обновлять ссылки и файлы ядра в вашем EFI-разделе.
Подводя итог, использование rEFInd может требовать больше ручных действий по сравнению с GRUB, но с помощью описанных выше методов вы можете упростить и автоматизировать процесс обновления ядер при необходимости. Это позволяет вам всегда иметь доступ к последним обновлениям для безопасности системы.