Linux カーネルの更新方法(旧)
この記事はすでに時代遅れです。改訂版の記事を投稿してありますので、そちらをご参照ください。
今日は、Linux カーネルの更新方法について書いてみたいと思います。一般的な手順に関しては「Gentoo Linuxカーネルアップグレードガイド」に非常によくまとめられていますので、ここでは VMware 環境を前提にして、特有の情報を織り交ぜていきます。
なお、ここでは gentoo-sources-2.6.14-r5 から gentoo-sources-2.6.14-r6 にアップデートすることを前提に書いていきます。
新しいカーネルソースを入手する
新しいカーネルソースの入手といっても、特別なことをする必要はまったくありません。emerge で普通にシステムを更新する再に、もしカーネルのアップデートがあれば自動的にソースが "/usr/src" 以下に展開されます。
もし特定パッケージの更新を抑制するでご紹介した方法でカーネルソースの更新を止めている場合は、"/etc/portage/package.mask" の該当行を削除し、以下のコマンドでカーネルソースパッケージを更新してください(gentoo-sources を使用していた場合。カーネル選択の詳細は Gentoo Linuxカーネルガイドをご参照ください)。
emerge --update gentoo-sources
/usr/src/linux を書き換える
カーネルをコンパイルするためには、シンボリックリンクである "/usr/src/linux" がコンパイルするソースを正しく指している必要があります。それには、以下のコマンドを実行します。
cd /usr/src ln -sfn linux-2.6.14-gentoo-r6 linux
もしくは、USEフラグ に symlink を追加しておけば、パッケージを更新したときに自動的にシンボリックリンクも書き換えるようになります。
カーネルをコンパイルする
準備が整ったところで、カーネルをコンパイルしましょう。カーネルコンパイルには、"make oldconfig" を使う簡易的な方法と、手動で設定する方法です。前者はリビジョン(カーネルパッケージ名の最後の "-r?" の部分)のみが違うなど、比較的変更が少ない場合に、前回のコンフィギュレーションファイルを引き継いでコンパイルする方法です。この方法は手軽ですが、コンフィギュレーションファイルの項目が追加・変更された場合に不具合を起こす原因になります。それを認識した上で行いましょう。時間に余裕があれば、なるべく後者の方法で行うのがよいと思います。
"make oldconfig" を使う方法
まず、現在のカーネルのコンフィギュレーションファイルを新しいカーネルソースのディレクトリにコピーします。以下のコマンドでよいでしょう。
cd /usr/src/linux cp ../linux-2.6.14-gentoo-r5/.config .
そして、以下のコマンドを実行してコンフィギュレーションファイルを更新します。
make oldconfig
このとき、追加されたオプションについて扱いを尋ねてくるときがありますので、適切に設定してください。なにも入力せずに Enter を押せばデフォルトの設定になります。また、? を入力して Enter を押せば簡単な説明を見ることもできます。もし不安に思ったときは、処理を中断して手動で設定する方法に切り替えましょう。
設定が終わったら、普通にカーネルをコンパイルしてください。
make && make modules_install
手動で設定する方法
こちらは、インストール時とほぼ同じ手順でカーネルコンフィギュレーションを行い、コンパイルすることになります。以下のコマンドでコンフィギュレーションメニューに入ります。
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.14-gentoo-r6 cp .config /boot/config-2.6.14-gentoo-r6
これでカーネルのコンパイルは終了です。次はこのカーネルを起動できるようにするために、ブートローダーの設定を行います。
GRUB のエントリーを追加
ブートローダー GRUB の設定ファイルに新しいカーネルのエントリーを追加しましょう。vim などのテキストエディタで "/boot/grub/grub.conf" を開き、以下を最初のエントリーとして挿入して保存してください。
title Gentoo Linux 2.6.14-r6 root (hd0,0) kernel /boot/kernel-2.6.14-gentoo-r6 root=/dev/sda3 clock=pit nosmp noapic nolapic
ルートファイルシステム以外のカーネルオプションは VMware の時刻遅れを防止するためのものです。詳細は「VMware で Linux を動かした際の時刻のずれを解消する」を参照してください。
以前のエントリーはまだ消さないほうが無難です。エントリーを残しておけば、もし新しいカーネルで問題が起きても古いカーネルで起動できます。
再起動
ここまできたら、仮想マシンを再起動します。
shutdown -r now
正常に再起動できたでしょうか。VMwareTools をインストールしている場合は、ネットワークカードの認識でエラーが出るはずです。それは次で対処しますので、ここでは無視してください。もしそれ以外の原因で不具合が発生した場合は、古いカーネルで起動してカーネルオプションなどを確認してみてください。
VMwareTools のモジュールを再構築する
カーネルを更新するときは、カーネルモジュールもすべて再構築しなければなりません。そう、VMwareTools のカーネルモジュールも再構築が必要なのです。面倒ですが仕方がありません。手順は VMwareTools のインストールでご紹介したものがそのまま適用できますが、ここで必要な作業だけを簡単にまとめておきます。
ダミーのファイル・ディレクトリを作成します。
touch /etc/init.d/vmware-tools chmod 700 /etc/init.d/vmware-tools mkdir /etc/init.d/rc{0,1,2,3,4,5,6}.d echo '/etc/init.d/net.eth0 $1' >> /etc/init.d/network chmod 755 /etc/init.d/network
VMwareTools を再インストールします。
- "/usr/bin/vmware-config-tools.pl -skipstopstart" を実行します。
- vmhgfs モジュールをビルドするか尋ねてくるので、そのまま Enter を押します。
- カーネルのヘッダファイルのパスを尋ねてきます。そのまま Enter を押せば、自動検出されたパスが使用されます。
ビルドが終わったら、動作チェックします。手順は以下のとおりです。最初の 3 つのコマンドはエラーが出ると思いますが、問題ありません。
/etc/init.d/net.eth0 stop rmmod pcnet32 rmmod vmxnet depmod -a modprobe vmxnet /etc/init.d/net.eth0 start
ダミーファイルを削除します。
rm -rf /etc/init.d/rc?.d rm -rf /etc/init.d/vmware-tools rm -f /etc/init.d/network
このあたりはスクリプトにするという手もありますが、root ユーザーで実行しているだけにちょっと不安ですね。
これでカーネルの更新作業は完了です。もう一度再起動してみましょう。今度はネットワークカードも正常に認識されるはずです。
古いカーネルを削除する
新しいカーネルが安定しているようなら、古いカーネルを削除できます。以下の手順で行うとよいでしょう。
まず、古いカーネルバイナリを削除します。
mount /boot rm /boot/kernel-2.6.14-gentoo-r5 rm /boot/config-2.6.14-gentoo-r5
次に、"/boot/grub/grub.conf" から古いカーネルのエントリーを削除します。それが終わったら、"/boot" をアンマウントしておきましょう。
umount /boot
そして、カーネルのソースをアンインストールします。以下のコマンドは、最新以外のカーネルソースをアンインストールします。くれぐれも、現在使用中のカーネルをアンインストールしないように注意してください。
emerge --unmerge gentoo-sources-2.6.14-r5
もしくは、こっちのほうがいいか?
emerge --clean gentoo-sources-2.6.14-r5
ただし、緊急時のためにひとつくらいは古いカーネルを保持しておくことをお勧めします。世の中、何があるかわかりませんからね。(^^;
以上で、カーネルの再コンパイルは完了です。残念ながら、けっこう手間がかかる作業ですが、慣れるしかないですね。カーネル設定のどこをデフォルトから変更しているかなど、メモっておくとよいかと思います。
詳しくはこちらの記事をどうぞ!
この記事にコメントする