WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

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

ただし、緊急時のためにひとつくらいは古いカーネルを保持しておくことをお勧めします。世の中、何が起こるかわかりませんからね(^^;

以上で、カーネルの再構築は完了です。残念ながら、けっこう手間がかかる作業ですが、慣れるしかないですね。カーネル設定のどこをデフォルトから変更しているかなど、メモっておくとよいかと思います。

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles