Linux カーネルの更新方法
前回書いたとおり、少し前から VMwareTools のインストール方法がだいぶ変わりました。これに伴い、カーネルの更新方法もだいぶ影響を受けますので、それも改定しておこうかと思います。また、最近のカーネルでは最低限設定しないとならない項目が若干増えていますので、それに関してはカーネルコンパイルの記事に加筆しておきました。併せてご参照ください。
一般的な手順に関しては「Gentoo Linuxカーネルアップグレードガイド」に非常によくまとめられていますので、ここでは元記事と同様に VMware 環境を前提にして、特有の情報を織り交ぜていきます。
なお、ここでは gentoo-sources-2.6.17-r3 から gentoo-sources-2.6.17-r4 にアップデートすることを前提に書いていきます。
VMwareTools のネットワークドライバを無効化する
VMwareTools のインストールと同様、トラブルに備えて VMwareTools のネットワークドライバを無効にしておきましょう。こうしておけば、新しいカーネルに切り替えた後すぐに(VMwareTools を再構築する前でも)ネットワークが利用できます。
まずは念のため VMwareTools のサービスを止めます。以下のコマンドを実行してください。
/etc/init.d/vmware-tools stop rc-update del vmware-tools default
ネットワークを停止してドライバーを変更し、ネットワークを再起動します。
/etc/init.d/net.eth0 stop rmmod vmxnet depmod -a modprobe pcnet32 /etc/init.d/net.eth0 start
"/etc/modules.autoload.d/kernel-2.6" を vi などのテキストエディタで読み込み、 "vmxnet" のエントリーを削除して、代わりに "pcnet32" を追加してください。
以上が終わったら再起動し、ネットワークが正常に使えることを確認してください。
新しいカーネルソースを入手する
新しいカーネルソースの入手といっても、特別なことをする必要はまったくありません。 emerge で普通にシステムを更新する再に、もしカーネルのアップデートがあれば自動的にソースが "/usr/src" 以下に展開されます。
もし特定パッケージの更新を抑制するでご紹介した方法でカーネルソースの更新を止めている場合は、"/etc/portage/package.mask" の該当行を削除し、以下のコマンドでカーネルソースパッケージを更新してください(gentoo-sources を使用していた場合。カーネル選択の詳細は Gentoo Linuxカーネルガイドをご参照ください)。
emerge --update sys-kernel/gentoo-sources
これで最新のカーネルソースがダウンロード・展開されます。もしこのコマンドでなにも展開されなければ、現在のカーネルが最新ということです。
/usr/src/linux を書き換える
カーネルをコンパイルするためには、シンボリックリンクである "/usr/src/linux" がコンパイルするソースを正しく指している必要があります。それには、以下のコマンドを実行します。
cd /usr/src ln -sfn linux-2.6.17-gentoo-r4 linux
もしくは、USEフラグに symlink を追加しておけば、パッケージを更新したときに自動的にシンボリックリンクも書き換えるようになります。
カーネルをコンパイルする
準備が整ったところで、カーネルをコンパイルしましょう。カーネルコンパイルには、"make oldconfig" を使う簡易的な方法と、手動で設定する方法です。前者はリビジョン(カーネルパッケージ名の最後の "-r?" の部分)のみが違うなど、比較的変更が少ない場合に、前回のコンフィギュレーションファイルを引き継いでコンパイルする方法です。この方法は手軽ですが、コンフィギュレーションファイルの項目が追加・変更された場合に不具合を起こす原因になります。それを理解した上で選択してください。時間に余裕があれば、なるべく後者の方法で行うのをお勧めします。
"make oldconfig" を使う方法
まず、現在のカーネルのコンフィギュレーションファイルを新しいカーネルソースのディレクトリにコピーします。以下のコマンドでよいでしょう。
cd /usr/src/linux cp ../linux-2.6.17-gentoo-r3/.config .
そして、以下のコマンドを実行してコンフィギュレーションファイルを更新します。
make oldconfig
このとき、追加されたオプションについて扱いを尋ねてくるときがありますので、適切に設定してください。なにも入力せずに Enter を押せばデフォルトの設定になります。また、? を入力して Enter を押せば簡単な説明を見ることもできます。もし不安に思ったときは、処理を中断して手動で設定する方法に切り替えましょう。
設定が終わったら、普通にカーネルをコンパイルしてください。
make && make modules_install
コンパイル終了後は、「カーネルを /boot にコピーする」に進んでください。
手動で設定する方法
こちらは、インストール時とほぼ同じ手順でカーネルコンフィギュレーションを行い、コンパイルすることになります。以下のコマンドでコンフィギュレーションメニューに入ります。
cd /usr/src/linux make menuconfig
コンフィギュレーションの詳しい情報はカーネルコンパイルを参照してください。設定が終了したら、こちらも普通にコンパイルします。
make && make modules_install
いずれの方法でもコンパイルにはけっこう時間がかかりますので、コーヒーでも飲んで待つのがよいかと思います(^^;
カーネルを /boot にコピーする
上記のいずれの方法でコンパイルした場合でも、生成したカーネルは手動で "/boot" にコピーする必要があります。以下のようにコピーすれば OK です。
mount /boot cd /usr/src/linux cp arch/i386/boot/bzImage /boot/kernel-2.6.17-gentoo-r4 cp .config /boot/config-2.6.17-gentoo-r4
これでカーネルのコンパイルは終了です。次はこのカーネルを起動できるようにするために、ブートローダーの設定を行います。
GRUB のエントリーを追加
ブートローダー GRUB の設定ファイルに新しいカーネルのエントリーを追加しましょう。 vi などのテキストエディタで "/boot/grub/grub.conf" を開き、以下を最初のエントリーとして挿入して保存してください。
title Gentoo Linux 2.6.17-r4 root (hd0,0) kernel /boot/kernel-2.6.17-gentoo-r4 root=/dev/sda3 clock=pit nosmp noapic nolapic
ルートファイルシステム以外のカーネルオプションは VMware の時刻遅れを防止するためのものです。詳細は「VMware で Linux を動かした際の時刻のずれを解消する」を参照してください。
旧バージョンのエントリーはまだ消さないほうが無難です。エントリーを残しておけば、もし新しいカーネルで問題が起きても古いカーネルで起動できます。
再起動
ここまできたら、仮想マシンを再起動します。
shutdown -r now
正常に再起動できたでしょうか。もしなんらかの原因で不具合が発生した場合は、古いカーネルで起動してカーネルコンフィギュレーションなどを確認してみてください。
VMwareTools のモジュールを再構築する
カーネルを更新するときは、カーネルモジュールもすべて再構築しなければなりません。そう、VMwareTools のカーネルモジュールも再構築が必要なのです。面倒ですが仕方がありません。手順は VMwareTools のインストールでご紹介したものがそのまま適用できますが、 ebuild の更新などは不要です。ここでは必要な作業だけを簡単にまとめておきます。
VMwareTools の再構築
まずは "vmware-config-tools.pl" を実行してカーネルモジュールなどを再構築します。ここでも "-skipstopstart" オプションを忘れないでください。
/opt/vmware/tools/bin/vmware-config-tools.pl -skipstopstart
実行中の質問は、やはり Enter キーを押すだけで良いかと思います。今回はカーネルを再構築した直後なので、 gcc バージョン違いも発生することはあり得ないはずです。
あとはインストール時と同じく動作確認と設定を行います。まずはネットワークドライバ。最初の 3 つがエラーになるのもインストール時と同じです。
/etc/init.d/net.eth0 stop rmmod pcnet32 rmmod vmxnet depmod -a modprobe vmxnet /etc/init.d/net.eth0 start
ネットワークが正常に起動したら、 "/etc/modules.autoload.d/kernel-2.6" を編集し、 "pcnet32" の代わりに "vmxnet" を追加してください。
次に vmware-tools サービス。まずは以下のコマンドで起動を確認。
/etc/init.d/vmware-tools start
正常に起動したら、デフォルトサービスに追加しましょう。
rc-update add vmware-tools default
以上でカーネルの更新作業は完了です。再起動して、必要な機能が正しく動くことを確認してください。
古いカーネルを削除する
新しいカーネルが安定しているようなら、古いカーネルを削除できます。以下の手順で行うとよいでしょう。
まず、古いカーネルバイナリを削除します。
mount /boot rm /boot/kernel-2.6.17-gentoo-r3 rm /boot/config-2.6.17-gentoo-r3
次に、"/boot/grub/grub.conf" から古いカーネルのエントリーを削除します。その後、"/boot" をアンマウントしておきましょう。
umount /boot
最後に、カーネルのソースをアンインストールします。以下のコマンドは、最新以外のカーネルソースをアンインストールします。くれぐれも、現在使用中のカーネルをアンインストールしないように注意してください。
emerge --unmerge gentoo-sources-2.6.17-r3
ただし、緊急時のためにひとつくらいは古いカーネルを保持しておくことをお勧めします。世の中、何が起こるかわかりませんからね(^^;
以上で、カーネルの再構築は完了です。残念ながら、けっこう手間がかかる作業ですが、慣れるしかないですね。カーネル設定のどこをデフォルトから変更しているかなど、メモっておくとよいかと思います。
詳しくはこちらの記事をどうぞ!
この記事にコメントする