genkernelを使用してGentoo Linuxのカーネルをアップグレードする私なりの手順です。公式のドキュメントはgenkernelと手動の方法が併記されていて読みにくいので、genkernelを使用する方法だけをまとめました。
カーネルアップグレード前にemerge -uDN @world
を実行してもいいかもしれません。
emerge --sync emerge -uDN @world
まず、インストールされているカーネルソースを確認します。
eselect kernel list
Available kernel symlink targets: [1] linux-OLD_VERSION-gentoo * [2] linux-4.19.52-gentoo
この例ではlinux-4.19.52-gentooが新しくインストールされています。
/usr/src/linuxのシンボリックリンク先を、新バージョンのカーネルソースに切り替えます。
eselect kernel set 2 eselect kernel list
Available kernel symlink targets: [1] linux-OLD_VERSION-gentoo [2] linux-4.19.52-gentoo *
次の2つのコマンドのどちらかを実行して、現在のカーネルコンフィグを新バージョンのカーネルソースディレクトリにコピーします。どっちでもいいんですが、/proc/config.gzからコピーする方がバージョンを指定する必要がなく間違えにくいのでよいでしょう。
zcat /proc/config.gz > /usr/src/linux/.config
or
cp /etc/kernels/kernel-config-x86_64-OLD_VERSION-gentoo /usr/src/linux/.config
genkernelでカーネルとモジュールをコンパイルします。--oldconfigをつけないと、さっきコピーしたカーネルコンフィグを読み込んでくれないので注意しましょう。ここだけ手動でmake oldconfig
とかしてもgenkernelに無視されるようです。最初から最後までgenkernelを使いましょう。
genkernel --oldconfig --menuconfig all
menuconfigが起動したら、念のためコピーしたカーネルコンフィグが読み込まれているか設定内容を確認しましょう。
無事カーネルコンパイルが完了したら、次のコマンドでgrubの設定に新しいカーネル名を書き込みます。
grub-mkconfig -o /boot/grub/grub.cfg
リブートして立ち上がるか確認しましょう。
残ったファイルの削除(手動)
ここから先はディスク容量が少ない場合だけやればよいです。ただまあ、オブジェクトファイルは数GBになるので環境によっては削除したくなるでしょう。
古いカーネルを削除するツールとしてapp-admin/eclean-kernel
があるようなのですが、意図したとおりに動かなかった(古いカーネルソースが削除されなかった)ので、ここでは手動で残ったファイルを削除します。
ここの手順は公式ドキュメントカーネル/削除 - Gentoo Wikiとほぼ同じです。
オブジェクトファイルのクリーン
genkernelでもクリーンできそうな気がしますが、よく分からないのでmake cleanです・・・。(genkernelはクリーンだけ実行することができない?コンパイルまで走ってしまう。)
cd /usr/src/linux make clean
古いカーネルソースのパッケージ名の確認
equery l '*sources*'
古いカーネルソースのアンインストール
emerge --unmerge sys-kernel/gentoo-sources-OLD_VERSION
Portageが削除してくれないディレクトリの削除
rm -r /usr/src/linux-OLD_VERSION-gentoo/
古いカーネルモジュールの削除
rm -r /lib/modules/OLD_VERSION-gentoo-x86_64/
/boot内の古いファイルの削除
rm /boot/vmlinuz-OLD_VERSION-gentoo-x86_64 rm /boot/System.map-OLD_VERSION-gentoo-x86_64 rm /boot/initramfs-OLD_VERSION-gentoo-x86_64.img
最近のgenkernelのバージョンアップで生成されるファイル名が以下の通り変更されています。適宜読み替えてください。
kernel-genkernel-x86_64-OLD_VERSION-gentoo -> vmlinuz-OLD_VERSION-gentoo-x86_64 System.map-genkernel-x86_64-OLD_VERSION-gentoo -> System.map-OLD_VERSION-gentoo-x86_64 initramfs-OLD_VERSION-gentoo-x86_64.img -> initramfs-OLD_VERSION-gentoo-x86_64.img
削除したらgrubの設定を更新しましょう。
grub-mkconfig -o /boot/grub/grub.cfg