Answers:
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
-编写内核脚本的工具
在分析了Fedora中的脚本之后,我意识到可以从symlink中读取配置文件路径/etc/grub2.conf
。因此,正确的grub2-mkconfig
行是:
grub2-mkconfig -o "$(readlink -e /etc/grub2.conf)"
如评论中所述,它可能是/etc/grub2.cfg
或/etc/grub2-efi.cfg
在UEFI系统上。实际上,两个链接可能同时出现并指向不同的位置。如果目标文件不存在,则-e
to 的标志readlink
将出错,但是在我的系统上都存在...我想检查一下命令。
/etc/grub2.cfg
sudo grub2-mkconfig -o "$(readlink /etc/grub2-efi.cfg)"
在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
在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)
update-grub
实际上,Ubuntu中的脚本只是stub的存根grub-mkconfig
,可以轻松适应其他发行版。这里是完整的:
#!/bin/sh
set -e
exec grub-mkconfig -o /boot/grub/grub.cfg "$@"
这有效地执行了CentOS Wiki中推荐的功能,以及此处的其他答案-唯一的区别是您需要在命令和输出路径中更改grub
为grub2
。
/bin/kernel-install
。请编辑您的答案以包括此信息以供将来参考