Эквивалент update-grub для систем RHEL / Fedora / CentOS?


36

В Ubuntu (и, наверное, в Debian) есть системный скрипт с именем, update-grubкоторый автоматически выполняется grub-mkconfig -oс правильным путем для файла конфигурации grub.

Есть ли подобная команда для дистрибутивов Red Hat?

Если нет, как система узнает, где находится файл конфигурации grub для обновления при установке новой версии ядра?

Ответы:


14

Конкретные действия, которые должны произойти при установке или удалении пакета RPM, включены в сам пакет RPM в разделах перед установкой, после установки, перед удалением и после удаления.

Для каждого установленного пакета RPM вы можете запросить в базе данных RPM точные сценарии, которые включены в rpmкоманду:

rpm -q --scripts <package-name>

Выполнение этой команды в пакете ядра для CentOS 6 приводит к следующим результатам:

postinstall scriptlet (using /bin/sh):
<snip>
/sbin/new-kernel-pkg --package kernel --install 2.6.32-431.17.1.el6.x86_64 || exit $?

Из руководства:

new-kernel-package - инструмент для скриптовой установки ядра


2
выполнение той же команды на Fedora 20 дает /bin/kernel-installвместо этого. Пожалуйста, измените свой ответ, чтобы включить эту информацию для дальнейшего использования
pqnet

3
Именно поэтому я начал свой ответ с шагов, необходимых для выяснения. Я думаю, что запрос сценариев установки, вероятно, будет довольно универсальным в мире RPM, чтобы помочь вам понять, как осуществляется обновление ядра. Таким образом, мой ответ выдержит испытание временем гораздо лучше, чем только название инструмента / команды / поддержки-скрипта, который вы уже продемонстрировали, очень зависит от выпуска и распространения.
HBruijn

3
Да @ HBruijn прав. Слишком много различий между Fedora, RHEL и CentOS, чтобы дать один ответ, а лучше показать, как его найти.
SLM

24

После анализа сценариев в Fedora я понимаю, что путь к файлу конфигурации читается из символической ссылки /etc/grub2.conf. Правильная grub2-mkconfigстрока такова:

grub2-mkconfig -o "$(readlink -e /etc/grub2.conf)"

Как отмечено в комментариях, это может быть /etc/grub2.cfgили /etc/grub2-efi.cfgв системе UEFI. На самом деле обе ссылки могут присутствовать одновременно и указывать на разные местоположения . Если -eфлаг readlinkне установлен, целевой файл не будет установлен, но в моей системе оба существовали ... Думаю, проверьте ваши команды.


5
На CentOS 7 ссылки вроде бы/etc/grub2.cfg
Anthon

6
grub2-mkconfig --output = / boot / grub2 / grub.cfg кажется одобренным способом в руководстве по fedora
Кендрик,

1
Для получения дополнительной информации о действиях grub для CentOS 7, посетите
sshow

2
Если у вас есть система UEFI, которую вы хотитеsudo grub2-mkconfig -o "$(readlink /etc/grub2-efi.cfg)"
Крейг Рингер

10

На Fedora я использую:

grub2-mkconfig -o "$(readlink -e /etc/grub2.cfg)"

потому что выполнение без параметра readlinkвозвращает относительный путь и grub2-mkconfigвыдает ошибку:

$ ls -l /etc/grub2.cfg
lrwxrwxrwx. 1 root root 22 Dec 10  2015 /etc/grub2.cfg -> ../boot/grub2/grub.cfg

$ readlink /etc/grub2.cfg
../boot/grub2/grub.cfg

$ sudo grub2-mkconfig -o "$(readlink /etc/grub2.cfg)"
/usr/sbin/grub2-mkconfig: line 244: ../boot/grub2/grub.cfg.new: No such file or directory

Я использую эту -eопцию, чтобы, если символическая ссылка не преобразуется в существующий файл, вывод выводится на стандартный вывод, поэтому я знаю, что что-то пошло не так.

Со страницы руководства для readlink:

      -e, --canonicalize-existing
          canonicalize  by  following  every symlink in every component of
          the given name recursively, all components must exist

6

В Fedora символическая ссылка /etc/grub2.cfg указывает на версию BIOS. В системе UEFI используйте:

$ sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

В CentOS:

$ sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

Как правило, вы можете использовать вместо:

$ sudo grub2-mkconfig -o $(readlink -f /etc/grub2-efi.cfg)

См. Https://docs.fedoraproject.org/f27/system-administrators-guide/kernel-module-driver-configuration/Working_with_the_GRUB_2_Boot_Loader.html#sec-Editing_a_Menu_Entry


2

отредактируйте файл grub с помощью viили vim, сохраните изменения и закройте редактор с помощью: wq!

Это то, что вам нужно запустить для обновления grub в RedHat или CentOS:

grub2-mkconfig -o /boot/grub2/grub.cfg

0

update-grubСкрипт в Ubuntu на самом деле просто заглушкаgrub-mkconfig , и она может быть адаптирован к другим дистрибутивам , не слишком много боли. Вот оно во всей полноте:

#!/bin/sh
set -e
exec grub-mkconfig -o /boot/grub/grub.cfg "$@"

Это фактически делает то , что рекомендуется в вики CentOS , а в других ответах здесь - единственное различие заключается в том , что вам нужно изменить , grubчтобы grub2в команде и пути выхода.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.