ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

Ubuntu 14.04以降のGRUB2でデフォルトのLinuxカーネルを固定する

Ubuntuカーネルを固定する方法を調べたら次のような情報を見つけました。

sweng.web.fc2.com

しかしこれ、Ubuntu 12.04くらいの時の頃の情報で、現在のバージョンではこの方法ではうまくいかないようです。 こういう仕様変更が多いところがUbuntuの難しいところですね。

とりあえず難しい話は置いておいて、参考サイトのように試しに設定を書き換えてみます。

まずは情報収集。現在のシステムにインストールされたカーネルを確認します。 一部省略した実行結果を以下に書き出してみます。

$ grep menuentry /boot/grub/grub.cfg
...
menuentry 'Ubuntu'
...
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-9d97e78e-777f-11e8-8fb4-001c42dec035' {
    menuentry 'Ubuntu, with Linux 4.17.2-patched' --class ubuntu --class gnu-linux --class gnu --class os 
$menuentry_id_option 'gnulinux-4.17.2-patched-advanced-9d97e78e-777f-11e8-8fb4-001c42dec035' {
    menuentry 'Ubuntu, with Linux 4.17.2-patched (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.2-patched-recovery-9d97e78e-777f-11e8-8fb4-001c42dec035' {
    menuentry 'Ubuntu, with Linux 4.15.0-23-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-23-generic-advanced-9d97e78e-777f-11e8-8fb4-001c42dec035' {
    menuentry 'Ubuntu, with Linux 4.15.0-23-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-23-generic-recovery-9d97e78e-777f-11e8-8fb4-001c42dec035' {
...

ちょっと見づらいので、必要な部分のみ抜き出してみます。

二つのバージョンのカーネルがインストールされており、通常のカーネルリカバリーモードを呼び出すカーネルが導入されていることがわかります。

そこで、早速設定を書き換えました。「Ubuntu, with Linux 4.15.0-23-generic」をデフォルトにしたかったので次のように設定しました。GRUB2の設定を変更した後はsudo update-grubコマンドの実行が必要です。

$ sudo vi /etc/default/grub

GRUB_DEFAULT="Ubuntu, with Linux 4.15.0-23-generic"

$ sudo update-grub

これで終わるはずだったのですが、次のようなメッセージが表示されました。

Warning: Please don't use old title `Ubuntu, with Linux 4.15.0-23-generic' for GRUB_DEFAULT, use `Advanced options for Ubuntu>Ubuntu, with Linux 4.15.0-23-generic' (for versions before 2.00) or `gnulinux-advanced-87573e56-43ce-4235-b3e6-e28007edff2e>gnulinux-4.15.0-23-generic-advanced-87573e56-43ce-4235-b3e6-e28007edff2e' (for 2.00 or later)
done

doneと表示されているしエラーではなく警告だったので問題ないだろうと思い、Ubuntuを再起動してみました。しかし、予測とは異なり「Ubuntu, with Linux 4.17.2-patched」を読み込んでUbuntuが起動してしまいました。

次に、GRUB_DEFAULTの設定をこう書き変えて、再起動してみました。やはり、この方法でも「Ubuntu, with Linux 4.17.2-patched」を読み込んでUbuntuが起動してしまいました。

$ sudo vi /etc/default/grub

GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.15.0-23-generic"

$ sudo update-grub

結局、(for 2.00 or later)の方法として書かれていた方法でデフォルトカーネルを指定する必要がありました。

$ sudo vi /etc/default/grub

GRUB_DEFAULT="gnulinux-advanced-87573e56-43ce-4235-b3e6-e28007edff2e>gnulinux-4.15.0-23-generic-advanced-87573e56-43ce-4235-b3e6-e28007edff2e"

$ sudo update-grub

ちょっと長いですね。コピペじゃないと辛そうです。

GRUB2の2.0.0以降を採用しているUbuntuは現在一般に使われるバージョン全てが該当します。Ubuntu 14.04や16.04、18.04といったLTSバージョンやStandard版の17.10なども同様です。

一方、FedoraとかRHELCentOSだとこんな感じで番号で指定できるんですよね。それと比べると新しいカーネルがインストールされようがその影響がなく目的のカーネルを指定できて良いけどちょっと煩わしい感じですね。

qiita.com

以上、「Ubuntu 14.04以降のGRUB2でデフォルトのLinuxカーネルを固定する」方法でした。