Kernel/Upgrade/ja

この記事はカーネルにアップグレードすること]]について説明しています.

新しいソースから新しいカーネルを作成する作業は、システムをインストールするときにカーネルを作成したときと基本的には同じ流れです. 異なる点は、新しいカーネルのコンフィグを作るのに古いカーネルのコンフィグを利用できるという点です. 古いコンフィグを利用すれば、ユーザは などを使ってすべてのカーネルオプションを再度設定しなおさずに済みます.

カーネルコンフィグは、カーネルソースがあるディレクトリの下の という名前のファイルに保存されています. 新しいカーネルは、古いカーネルにはないオプションや機能を備えていることや、古いカーネルにあったオプションや機能がなくなっていることがあります. カーネルコンフィグは、カーネルの機能やオプションが、有効か無効か、カーネルに組み込まれるか、カーネルの稼働中に必要に応じてロードできるモジュールとして構築されるかを指定するものです. したがって、新しいカーネルのコンフィグファイルには、古いカーネルのコンフィグファイルには無い新しいエントリがあったり、古いカーネルのコンフィグファイルにあったエントリがなくなっていたりすることがあります.

こうしたコンフィグファイルの変更に対応するために、古いカーネルのコンフィグファイルを新しいカーネルで使えるコンフィグに変換する必要があります. この記事では、古いカーネルのコンフィグファイルを変換して、新しいカーネルソースから新しいカーネルを作成する方法について示します.

Kernel upgrade in Gentoo involves these steps:
 * Step 1: Emerging the new kernel sources.
 * Step 2: Setting the right symlink to the new kernel.
 * Step 3: Moving to the new kernel's folder.
 * Step 4: Adjusting the file for the options introduced to, or removed from the new kernel's configuration.
 * Step 5: Building the kernel and the initramfs.
 * Step 6: Updating the bootloader.
 * Step 7: Removing or keeping the old kernel.

インストール
新しいカーネルのソースがインストールされたときは、カーネルを更新するといいかもしれません. 新しいカーネルのソースは、次のコマンドでシステムを更新するときにインストールされることがあります.

勿論、次のコマンドを使って直接インストールすることが可能です（"gentoo-sources"を現在使用しているカーネルのパッケージに変えてください）：

新しいカーネルのソースをインストールしても、新しいカーネルが提供されるわけではありません. 新しいソースから新しいカーネルを組み立てて、インストールして、実際に新しいカーネルを稼働させるためにシステムを再起動する必要があります.

設定
The kernel configuration is saved in a file named in the directory that holds the kernel sources, a symlink is used to point to that directory.

のシンボリックリンクは常に、現在使用中のカーネルソースが入っているディレクトリへ張られるべきです. このシンボリックリンクを張るのは、以下の3つの方法のいずれかで可能です.


 * 1)  としてカーネルソースをインストールする
 * 2) eselectでリンクをセットする
 * 3) 手動でシンボリックリンクを更新する

eselectを使った設定
によるシンボリックリンクの設定

利用可能なカーネルソースが出力されており、*が現在使われているソースを表しています.

カーネルソースを2番に変えるには次のようにします :

シンボリックリンクの手動更新
シンボリックリンクを手動で設定するならば、次のコマンドを実行してください：

symlinkのUSEフラグを有効にしてカーネルソースをインストール
これによってのリンク先が、新しくインストールされるカーネルソースになります.

必要であれば、他の 2 個の方法のいずれかを使って、後から変更できます.

新しいフォルダへ移動
シンボリックリンクが更新されたので、作業ディレクトリを新しいカーネルのフォルダに移動しましょう.

Copy the previous kernel configuration
古いカーネルの設定ファイルを新しいカーネルのフォルダに移動させなければなりません. 先程に保存したバックアップに加えて、古い設定ファイルはいくつかの場所にあります.


 * procfsファイルシステムの場合、カーネルのオプションEnable access to .config through /proc/config.gz (CONFIG_IKCONFIG_PROC)が前のカーネルで有効になっている場合：


 * 古いカーネルから. これは古いカーネルがCONFIG_IKCONFIGを有効にしてコンパイルされている場合のみ有効です:


 * 設定がにインストールされている場合：


 * 現在使用されているカーネルのディレクトリの中:


 * もし内で と設定され、過去にを使用していた場合、ディレクトリの中：

.configファイル
古いカーネルの設定を新しいカーネルで使用する場合、設定を変換する必要があります. 変換はかを実行することで可能です. どちらかを使用してください、両方ではありません.

make silentoldconfig
The following configuration is like the text based configuration with. For new configuration options, the user is asked for a decision. For example:

最後の(NEW)は、このオプションが新しいオプションであることを示しています. 左の角括弧内の文字は選択可能な設定です：Yes、no、module，あるいは?を入力してヘルプを表示します. 推奨される（すなわちデフォルトの）設定は大文字で表示されます（ここではY）. ヘルプではオプションやドライバの説明がされます.

残念ながら、はそれぞれのオプションに対して例えば背景など、よりたくさんの情報を示してくれません. 従って正しい選択をすることが難しい場合がたまにあります. この場合、オプションの名前を覚えておいて、グラフィカルなカーネル設定ツールを使用してあとで直す方法が最も良いです.

make olddefconfig
もし、すべての新しい設定オプションを推奨される（すなわちデフォルトの）値に設定する場合、を使用してください.

make help
他の利用可能な変換方法を見るには、を実行してください：

Observing the difference
A diff tool can be used to compare the old and new files to see what options have been added:

And which have been removed:

Alternatively, the kernel provides a script to cleanly compare two config files even if the options have moved in the file itself:

make menuconfig
The options can then be researched and changed if necessary by running:

The menuconfig target is helpful because it safely handles kernel symbol dependency resolution.

ビルド
このステップに関しては、ビルドのページに従ってください.

自動ビルドとインストール
Portageフックで新しくemergeされたカーネルを自動でビルド、インストールすることが可能です. 他の方法も可能ですが、以下ではgenkernelとgentoo-sourcesパッケージをベースとしています. 以下の条件を満たす必要があります：


 * 1)  is able to build and install the kernel to which the  symlink points into   and the bootloader.
 * 2) The   use flag is set for the kernel ebuild.

If those are fulfilled, simply install a  Portage hook as shown below.

外部のカーネルモジュールの再インストール
例えばバイナリカーネルモジュールのようなすべての外部カーネルモジュールは、それぞれの新しいカーネルに対して再ビルドされる必要があります. もしまだカーネルをビルドしていないのならば、外部カーネルモジュールのビルドのためにカーネルを準備しなければなりません.

カーネルモジュールを含むパッケージは をセットすることで再ビルドできます：

ビルドの問題の解決
もし、現在のカーネルの再ビルド中に問題が発生したのであれば、カーネルソースをきれいにすることが役に立つかもしれません. 初めにファイルのバックアップを取ることを忘れないでください. 以下のコマンドはこのファイルを削除するからです. やをファイル名の後ろにつけないでください. はこれらの拡張子や接尾辞を持つファイルも削除するからです.

Update the bootloader
The upgraded and built kernel needs to be set up and eventually a bootloader or boot item updated, see Kernel/Configuration. Users of Grub can use the method below, users of other bootloaders must consult the handbook.

After making sure partition is mounted,

Using grub-mkconfig
The following command can be executed for updating grub's configuration file:

Using systemd-boot-gen to update systemd-boot UEFI configuration
Manual installation of :

Copy the kernel parameters to, the file should contain:

And run it using root privileges:

This will generate the boot configuration in for all the available  that have a matching.

Keeping the old kernel sources
Kernel sources will eventually become unsupported. Some packages require the current sources to build. To protect the new sources from being removed by a depclean, it can be added to the world file (/var/lib/portage/world) by:

Old sources that are no longer supported can be removed from the world file by:

削除
kernel removalを参照してください.

外部資料

 * kernel changelog with some explanations of new features