Fedora 30でChanges/BootLoaderSpecByDefaultというプロポーザルがあって、Fedora 30βでは実際にこの仕様になってます。カーネルを弄る人にはちょっと影響があるかなって感じです。
仕様
The Boot Loader Specificationに書かれています
どんな風になったか
boot時のgrubの画面は変化はありません。
変わったのはエントリーの書き方です。今まではgrub.cfgにエントリーを追加していたわけですが、カーネルのエントリー部分が独立した感じです。
root@kerntest:/home/masami# ls /boot/loader/entries/ 9575947ef933448ea2005318c989c813-0-rescue.conf 9575947ef933448ea2005318c989c813-5.0.6-200.fc29.x86_64+debug.conf 9575947ef933448ea2005318c989c813-5.0.5-200.fc29.x86_64.conf 9575947ef933448ea2005318c989c813-5.0.6-300.fc30.x86_64.conf 9575947ef933448ea2005318c989c813-5.0.5-200.fc29.x86_64+debug.conf 9575947ef933448ea2005318c989c813-5.0.6-300.fc30.x86_64+debug.conf 9575947ef933448ea2005318c989c813-5.0.6-200.fc29.x86_64.conf 9575947ef933448ea2005318c989c813-5.1.0-rc4-test+.conf
たとえば、9575947ef933448ea2005318c989c813-5.1.0-rc4-test+.confはこんなファイルです。
title Fedora (5.1.0-rc4-test+) 30 (Thirty) version 5.1.0-rc4-test+ linux /boot/vmlinuz-5.1.0-rc4-test+ initrd /boot/initramfs-5.1.0-rc4-test+.img options $kernelopts id fedora-20190408151310-5.1.0-rc4-test+ grub_users $grub_users grub_arg --unrestricted grub_class kernel-
uefiとnon uefi
従来はuefi環境なら/boot/efi/EFI/fedora/grub.cfg、biosなら/boot/grub2/grub.cfgが使われていましたが、BLSでは/boot/loader/entries/にあるファイルを読むことになります。
uefiな環境でも/boot/loader/entriesにファイルが置かれ、
masami@saga:~$ file /sys/firmware/efi/ /sys/firmware/efi/: directory masami@saga:~$ sudo ls /boot/loader/entries 6ae2390b6ece4d5c86324fadb81d220d-0-rescue.conf 6ae2390b6ece4d5c86324fadb81d220d-5.0.5-200.fc29.x86_64+debug.conf 6ae2390b6ece4d5c86324fadb81d220d-5.0.4-200.fc29.x86_64.conf 6ae2390b6ece4d5c86324fadb81d220d-5.0.6-300.fc30.x86_64.conf 6ae2390b6ece4d5c86324fadb81d220d-5.0.4-200.fc29.x86_64+debug.conf 6ae2390b6ece4d5c86324fadb81d220d-5.0.6-300.fc30.x86_64+debug.conf 6ae2390b6ece4d5c86324fadb81d220d-5.0.5-200.fc29.x86_64.conf 6ae2390b6ece4d5c86324fadb81d220d-5.1.0-rc4-test+.conf
non uefiな環境でも/boot/loader/entriesにファイルが置かれます。
root@kerntest:/boot/loader/entries# file /sys/firmware/efi /sys/firmware/efi: cannot open `/sys/firmware/efi' (No such file or directory) root@kerntest:/boot/loader/entries# ls /boot/loader/entries/ 9575947ef933448ea2005318c989c813-0-rescue.conf 9575947ef933448ea2005318c989c813-5.0.6-200.fc29.x86_64+debug.conf 9575947ef933448ea2005318c989c813-5.0.5-200.fc29.x86_64.conf 9575947ef933448ea2005318c989c813-5.0.6-300.fc30.x86_64.conf 9575947ef933448ea2005318c989c813-5.0.5-200.fc29.x86_64+debug.conf 9575947ef933448ea2005318c989c813-5.0.6-300.fc30.x86_64+debug.conf 9575947ef933448ea2005318c989c813-5.0.6-200.fc29.x86_64.conf 9575947ef933448ea2005318c989c813-5.1.0-rc4-test+.conf
カーネルのmake install
make modules_install -> make installしますよね。この場合、以下のような流れで処理が走ります。
arch/x86/boot/install.sh -> /sbin/installkernel -> /usr/libexec/installkernel/installkernel-bls -> /bin/kernel-install
make_installの挙動
/sbin/installkernelやusr/libexec/installkernel/installkernel-bls 、それに/bin/kernelinstallはfedora 29でもありますが、f29ではBLSには対応していないのでgrub.cfgにエントリを書く方式が使われます。ちなみに、f29には/usr/libexec/installkernel/installkernel-blsと/usr/libexec/installkernel/installkernelの2つがあります(if文の判定的に-blsのほうは使われない)が、f30では-blsの方しかありません。
これらのコマンドが含まれているパッケージは以下の表のようになります。
コマンド | コマンドを提供しているパッケージ |
---|---|
/sbin/installkernel | grubby |
/usr/libexec/installkernel/installkernel-bls | grubby |
/bin/kernel-install | systemd-udev |
パッケージ
カーネルの登録
/bin/kernel-installコマンドでできますが、これは/boot/loader/entriesにファイルを作るだけです。make installするのではなくて、コマンド打っていく場合はこんな感じになります。make moduels_installは済んでいるとして、まずはdracutでinitramfsをつくり、
root@kerntest:/home/masami/linux-kernel (ktest)# dracut /boot/initramfs-5.1.0-rc4-test+.img 5.1.0-rc4-test+
/sbin/installkernelでカーネルを/bootにインストールします。
root@kerntest:/home/masami/linux-kernel (ktest)# /sbin/installkernel 5.1.0-rc4-test+ ./arch/x86/boot/bzImage ./System.map
そうすると、/bin/kernel-installが内部で呼ばれるのでファイルができてます。
root@kerntest:/home/masami/linux-kernel (ktest)# cat /boot/loader/entries/9575947ef933448ea2005318c989c813-5.1.0-rc4-test+.conf title Fedora (5.1.0-rc4-test+) 30 (Thirty) version 5.1.0-rc4-test+ linux /boot/vmlinuz-5.1.0-rc4-test+ initrd /boot/initramfs-5.1.0-rc4-test+.img options $kernelopts id fedora-20190409141515-5.1.0-rc4-test+ grub_users $grub_users grub_arg --unrestricted grub_class kernel-
もしkernel-installを自分で実行するならこうなります。
root@kerntest:/home/masami/linux-kernel (ktest)# kernel-install add 5.1.0-rc4-test+ /boot/vmlinuz-5.1.0-rc4-test+
カーネルの削除
/bootにインストールしたカーネルとinitramfs、/boot/loader/entiresのファイルを消したい場合もkernel-installコマンドで出来ます。removeオプションにカーネルの話バージョンを渡せばokです
root@kerntest:/home/masami/linux-kernel (ktest)# kernel-install remove 5.1.0-rc4-test+
カーネルのコマンドラインオプション
特定のエントリーに対してオプションを足したり、全部に足したりしたいですよね。Setting kernel command line arguments with Fedora 30 - Fedora Magazineが参考になります。
grubのメニューへの登録・削除
ブート時に/boot/loader/entriesにあるファイルを見てくれるので、ファイルを置けばメニューに追加され、消せばメニューから消えるという楽な仕様です。
grubの設定を確認したい
grubbyの出番です。
全部見たい場合はgrubby --info=ALLでみれます。エントリのindex番号もこれでわかります。
root@kerntest:/home/masami/linux-kernel (ktest)# grubby --info=ALL index=0 kernel="/boot/vmlinuz-5.1.0-rc4-test+" args="ro rhgb quiet nokaslr console=ttyS0,115200" root="UUID=620d1324-eba7-4beb-aab5-dd9975f25690" initrd="/boot/initramfs-5.1.0-rc4-test+.img" title="Fedora (5.1.0-rc4-test+) 30 (Thirty)" id="9575947ef933448ea2005318c989c813-5.1.0-rc4-test+" index=1 kernel="/boot/vmlinuz-5.0.6-300.fc30.x86_64+debug"
その他はgrubby --helpすれば良いと思います。
- 作者: .,トランジスタ技術編集部
- 出版社/メーカー: CQ出版
- 発売日: 2019/05/02
- メディア: 単行本
- この商品を含むブログを見る