Ubuntu(そして私もDebianだと思います)には、update-grub
という名前のシステムスクリプトがあり、grub構成ファイルの正しいパスでgrub-mkconfig -o
を自動的に実行します。
Red Hatベースのディストリビューションに同様のコマンドはありますか?
そうでない場合、新しいカーネルバージョンがインストールされたときに、システムはどのようにしてgrub構成ファイルがどこに更新されるかを認識しますか?
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
フラグをreadlink
に指定すると、ターゲットファイルが存在しない場合はエラーが発生しますが、私のシステムには両方が存在します...コマンドを確認してください。
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のmanページから:
-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)
vi
またはvim
でgrubファイルを編集し、変更を保存して:wqでエディターを閉じます!
これは、RedHatまたはCentOSでgrubを更新するために実行する必要があるものです。
grub2-mkconfig -o /boot/grub2/grub.cfg
Ubuntuのupdate-grub
スクリプトは実際には grub-mkconfig
のスタブであり、あまり苦労せずに他のディストリビューションに適合させることができます。ここに全体があります:
#!/bin/sh
set -e
exec grub-mkconfig -o /boot/grub/grub.cfg "$@"
これは CentOS wiki および他のここでの回答で推奨されていることを効果的に行います-唯一の違いは、コマンドとgrub
をgrub2
出力パス。
CentOS Linux 8で作業-
Sudo grub2-mkconfig --output=/boot/grub2/grub.cfg