是否等效于RHEL / Fedora / CentOS系统的update-grub?


36

在Ubuntu中(我猜也是在Debian中),有一个名为的系统脚本update-grub,该脚本会自动grub-mkconfig -o使用grub配置文件的正确路径执行。

对于基于Red Hat的发行版,是否有任何类似的命令?

如果不是,在安装新的内核版本时,系统如何知道要在哪里更新grub配置文件?

Answers:


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 2014年

3
这就是为什么我从找出答案的步骤开始回答的原因。我认为查询安装脚本在RPM世界中很普遍,可以帮助您了解内核更新是如何实现的。这样,我的答案将比仅命名您已经证明的非常依赖发行版和发行版的工具/命令/支持脚本更好地经受住时间的考验。
HBruijn 2014年

3
是的@HBruijn的权利。Fedora,RHEL和CentOS之间的差异太大,无法提供一个答案,更好地说明了如何找到它。
slm

24

在分析了Fedora中的脚本之后,我意识到可以从symlink中读取配置文件路径/etc/grub2.conf。因此,正确的grub2-mkconfig行是:

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

如评论中所述,它可能是/etc/grub2.cfg/etc/grub2-efi.cfg在UEFI系统上。实际上,两个链接可能同时出现并指向不同的位置。如果目标文件不存在,则-eto 的标志readlink将出错,但是在我的系统上都存在...我想检查一下命令。


5
在CentOS 7上,链接似乎是/etc/grub2.cfg
Anthon

6
grub2-mkconfig --output = / boot / grub2 / grub.cfg似乎是fedora手册中认可的方式
Kendrick

1
有关CentOS 7特定的grub的更多步骤,请查看官方Wiki:wiki.centos.org/HowTos/Grub2
sshow

2
如果您有UEFI系统,那么需要sudo grub2-mkconfig -o "$(readlink /etc/grub2-efi.cfg)"
Craig Ringer

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选项,以便如果符号链接无法解析为存在的文件,则输出将显示在stdout上,因此我知道出了点问题。

从readlink的手册页中:

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


2

使用vi或编辑grub文件vim,保存更改并使用:wq关闭编辑器!

这是您需要运行以在RedHat或CentOS中更新grub的方法:

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

0

update-grub实际上,Ubuntu中的脚本只是stub的存根grub-mkconfig,可以轻松适应其他发行版。这里是完整的:

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

这有效地执行了CentOS Wiki中推荐的功能,以及此处的其他答案-唯一的区别是您需要在命令和输出路径中更改grubgrub2

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.