Gentoo Linuxカーネルアップグレードガイド
1.
はじめに
カーネルは、Portageにおいて、アップグレードを完了するためにはユーザが手動で何かしなければならない、数少ないパッケージクラスの一つです。
Portageはカーネルソースをダウンロードしインストールしてくれますが、変更による効果を得るために新しいカーネルに手を加えてコンパイルするのはあなたの責任です。
このガイドは別のカーネルへアップグレードするユーザをターゲットにしていますが、別のカーネルパッケージへ移行するユーザにも役立ちます。
このドキュメントでは例としてgentoo-sourcesを使いますが、ここでの説明はPortageツリーが提供する他のパッケージにも適用できます。
2.
何故カーネルをアップグレードするの?
一般的に、あるカーネルのマイナーリリースから次のカーネルにアップグレードすることに主立った変更はほとんどありません。
カーネルをアップグレードする理由は様々です。
新しい機能やドライバーを利用するためと言うのもあれば、セキュリティの脆弱性を修正し、もしくは単にシステムを最新で正常に保つためと言うのもあります。
たとえ毎回新しいカーネルリビジョンへアップグレードしないとしても、最低でも時々アップグレードすることが推奨されています。
新しいリリースがセキュリティ問題を解決したのなら新しいカーネルへとアップグレードすることが強く推奨されています。
3.
Portageを通して新しいソースを得る
他のパッケージをemergeユーティリティを使って更新するのと同じようにカーネルソースを更新します。
多分カーネルをアップグレードしたいと思う時は、world更新リストに更新が現れた時でしょう。例えば以下のようなときです。
コード表示 3.1: 更新リストに新しいカーネルソースが登場 |
# emerge -Dup world
Calculating dependencies ...done!
[ebuild NS ] sys-kernel/gentoo-sources-2.6.9-r2 [2.6.8-r5]
|
注意:
上の出力にある"NS"ラベルは、新しいカーネルが個別に(New Slot)にインストールされるという意味です。
すなわち、古いカーネルのソースは手動で削除するまで保存されます。
|
それでは更新をインストールしましょう。例を以下に示します。
コード表示 3.2: カーネルソースを更新 |
# emerge -u gentoo-sources
|
カーネルソースは/usr/srcのサブディレクトリにインストールされます。
上の例では、新しいカーネルソースは/usr/src/linux-2.6.9-gentoo-r2にインストールされます。
4.
/usr/src/linuxへのシンボリックリンクの更新
Gentooでは/usr/src/linuxのシンボリックリンクが実行しているカーネルのソースを示している必要があります。
新しいカーネルソースをemergeする時にPortageが自動的にシンボリックリンクを更新するようにすることも出来ます。
必要なことは/etc/make.confのUSE変数にsymlinkフラグを追加するだけです。
コード表示 4.1: /etc/make.confのUSE変数の例 |
USE="symlink x86 3dnow 3dnowex X aac aalib adns alsa apache2"
|
もう1つの方法として、シンボリックリンクの修正にapp-admin/eselectを使用できます。
コード表示 4.2: シンボリックリンクにeselectを使用 |
# emerge eselect
# eselect kernel list
Available kernel symlink targets:
[1] linux-2.6.9-gentoo-r1
[2] linux-2.6.9-gentoo-r2
# eselect kernel set 1
|
本当に自分で行いたいのなら、リンクがlinux-2.6.9-gentoo-r2を示すようにする方法を示した次の例が役立つでしょう。
コード表示 4.3: /usr/src/linuxソフトリンクを手動で更新 |
# cd /usr/src
# ln -sfn linux-2.6.9-gentoo-r2 linux
|
5.
新しいカーネルの設定、コンパイル、インストール
これらの選択肢のどれを選ぶにしても、カーネルの設定とブートローダーの設定に関するGentoo Handbook(日本語訳)の説明を参照してください。
以下は必要な処理手続きの概要です。
第1の選択: genkernelを使った自動的なカーネルのセットアップ
もしgenkernelユーザーなら、最初にカーネルをインストールした時に行った手順を繰り返すだけです。
genkernelを普通の方法で実行するだけです。
コード表示 5.1: genkernelの呼び出し |
# genkernel all
|
その他のgenkernelの機能のための特別なパラメータを使うこともできます。
例えば、menuconfigを使って特別なカーネルのオプションを設定し、genkernelにブートローダーのgrubの設定を自動的に更新して欲しいのなら、genkernelを以下のようにして呼び出します。
コード表示 5.2: 一般的な引数でgenkernelを呼び出す |
# genkernel --menuconfig --bootloader=grub all
|
より多くの情報は、Gentoo Linux Genkernel Guide(日本語訳)か、Gentoo Handbook(日本語訳)を参照してください。
genkernelの設定ファイルである/etc/genkernel.confには多くのオプションを設定することが出来ます。
第2の選択: 手動設定
まずは、カーネルソースツリーでmenuconfigユーティリティを開きます。
コード表示 5.3: menuconfigの呼び出し |
# cd /usr/src/linux
# make menuconfig
|
ハードウェアと実行環境で要求されるオプションを選択します。
カーネルの設定に関する追加の情報は、Gentoo Handbook(日本語訳)のカーネルの設定を参照してください。
次に、カーネルをコンパイルしブートパーティションにコピーします。
繰り返しますが、Gentoo Handbook(日本語訳)のブートローダーの設定にある説明に従ってください。
もし/bootが別のパーティションなら、コンパイル済みのカーネルをこのディレクトリにコピーする前にマウントしてください。
これを行わないと、システムを新しいカーネルで起動することが出来ません。
コード表示 5.4: 新しいカーネルのコンパイルとインストール |
# make && make modules_install
# mount /boot
# cp arch/i386/boot/bzImage /boot/bzImage-2.6.9-gentoo-r2
|
最後に、新しいカーネルの項目を追加(まだ古い物は削除しないでください!)してブートローダーの設定を更新し、/bootパーティションをマウント解除してください。
繰り返しますが、Gentoo Handbook(日本語訳)の説明に従ってください。
6.
外部モジュールの再インストール
カーネルソースツリーには含まれていないがPortageのどこかで提供されるモジュール(ALSAドライバーやNVIDIAやATIグラフィックドライバーなど)を使うなら、カーネルのアップグレードごとにそれらを再インストールしなければなりません。
これは関連したパッケージを再マージするのと同じくらい簡単です。
より詳しい情報は、Gentoo Handbook(日本語訳)のカーネルの設定の章を参照してください。
/usr/src/linuxにあるカーネル向けに別々のebuildでインストールされたカーネルモジュールを全て再ビルドすることができる簡単なツール(sys-kernel/module-rebuild)があります。
これは非常に分かり易く使用することができます。
emergeでインストールした後、単にmodule-rebuild populateを実行して、カーネルの更新後に再ビルドが必要なパッケージの一覧をデータベースに入力します。
カーネルの更新もしくは再コンパイルが完了したら、再起動する前にmodule-rebuild rebuildを実行してドライバーを新しいカーネル向けに再ビルドします。
詳しい情報は、module-rebuildをオプションをつけずに実行することで、ユーティリティに渡すことができるコマンドの一覧を見ることができます。
7.
新しいカーネルで再起動
次に、全てのアプリケーションを終了してシステムを再起動します。
上記の説明に正しく従っているなら、ブートローダーに新しいカーネルの項目が追加されているでしょう。
新しいカーネルを選択してシステムを起動します。
うまくいけば、新しいカーネルでのシステム起動に成功し、いつもと同じようにログインし作業を開始することができます。
全てが動作しているなら、これでアップグレードは完了です。
もし何か失敗してシステムが新しいカーネルで起動しないなら、システムを再起動し、最後に正常動作していたと思われるカーネルに対応するブートローダーの項目を選択します。
その後適切に変更することであなたの間違いを訂正するために、新しいカーネルの設定、コンパイル、インストールの段階から再度開始してください。
いくつかの場合では(オーディオデバイスやイーサネットドライバの間違いなど)これを行うためにリブートする必要はないかもしれません。
8.
複数のカーネルで起動
新しいカーネルをインストールしている時に、以前のカーネルのソースは削除されていないことに気付いたかもしてません。
これは意図して行われていることであり、これを行うことによって起動している違うカーネル間を簡単に切り替えることができます。
複数のカーネルを切り替えるには/usr/src/のカーネルソースと/bootパーティションのbzImageバイナリ(ブートローダーの設定で参照されている)を残すだけです。
起動する時にはいつでも、どのカーネルで起動するかを聞かれることでしょう。
9.
古いカーネルを削除
最後の章からの設定で、新しいカーネルを手に入れ古いバージョンのカーネルを保持する必要が無くなったかもしれません。
簡単に現在の物を除いたカーネルのソースを削除するには、emergeのpruneオプションを利用します。
gentoo-sourcesを利用する例を続けます。
コード表示 9.1: 古いバージョンを削除 |
# emerge -P gentoo-sources
|
ほとんどの場合、コンパイル中に使われた一時ファイルは未だ/usr/src以下のソースディレクトリに残っています。
rmを使うことでこれらを安全に削除することができます。
カーネルで使われたモジュールも安全に削除することができます。
これは削除したカーネルバージョンで参照されている/lib/modules/以下の適当なディレクトリを削除することで実行できます。
まだ利用しているカーネルが所有しているモジュールを削除しないように気をつけてください!
最後に/bootパーティションをマウントして、取り除こうとしているカーネルのbzImageファイルを削除できます。
ブートローダーの設定を編集してこのカーネルを参照しないように設定しておくべきです。
10.
上級: 古いカーネルの.configを新しいカーネルを設定するために使用する
新しいカーネルを設定するときに古いカーネルの設定ファイルを再利用することで時間を節約することが可能なときがあります。
これは普通安全ではないと言うことに注意してください。
それぞれのリリース間での変更が多すぎると、更新方法としての信頼が無くなります。
これが使用できるただ一つの状況は、あるGentooカーネルリビジョンを別の物に変更するときです。
例えば、gentoo-sources-2.6.9-r1とgentoo-sources-2.6.9-r2の間の変更点はとても少ないので、以下の方法を使用するには普通大丈夫です。
ですが、2.6.8から2.6.9への更新と言った、このドキュメントを通して使用されている例に対しては適当ではありません。
オフィシャルリリース間で多くの変更があり、以下に説明されている方法はユーザに十分な前後関係を表示しないので、しばしば本当は必要なオプションを無効にしてユーザが問題を引き起こす結果となります。
古い.configを再利用するには、単に上書きして、make oldconfigを実行するだけです。
以下の例では、gentoo-sources-2.6.9-r1からgentoo-sources-2.6.9-r2へ設定ファイルをもっていきます。
コード表示 10.1: 古い設定を再利用する |
# cd /usr/src/linux-2.6.9-gentoo-r2
# cp ../linux-2.6.9-gentoo-r1/.config .
# make oldconfig
|
コード表示 10.2: genkernelで、古い設定を再利用する |
# cd /etc/kernels
# cp kernel-config-x86-2.6.9-gentoo-r1 kernel-config-x86-2.6.9-gentoo-r2
# genkernel all
|
この時点で、2つのバージョンで変更があった設定オプションに関する質問が表示されるでしょう。
質問への回答が完了すれば、menuconfigでの設定過程を行うことなく、普通と同じようにカーネルをコンパイルしインストールすることができます。
より安全なアップデート方法は以前のコンフィグをコピーし、
単純にmake menuconfigを実行するだけです。
これで、make menuconfigで以前のコンフィグが可能な限りメニューにロードされ、
先に触れたmake oldconfigの問題を避けることができます。
これで、各選択肢について確認し、新しいセクションや無くなったセクションなどを探せばよいだけです。
menuconfigを使うことで、新しく変更されたものの背景や、新たな選択肢と解説をスクリーン上で簡単に見ることができます。
2.6.8から2.6.9といったアップグレードにも利用できますが、選択肢については注意してください。
一旦終わったら、基準としてカーネルをコンパイルしインストールしてください。
11.
カーネルの更新後に問題が起きましたか?
Linuxカーネルの開発は急速に行われているため、カーネルを移行することで問題を引き起こすかもしれないということは避けられません。
もしGentooがサポートするカーネルの最新版で問題があるのなら、それを私たちに報告してください。
このドキュメントの内容は、他のものが明示されない限りは、
CC-BY-SA-2.5ライセンスです。
Gentoo Name and Logo Usage Guidelines (日本語訳)が適用されます。
|