カーネルのバージョンを上げる
2006年6月25日 掲載
カーネルのバージョンアップが必要なときとは
「パッケージを最新のものに更新する」の手順でapt-get upgradeを実行したときに、「以下のパッケージが新たにインストールされます:kernel××」と表示されることがあります。これは新しいバージョンのカーネルがリリースされたことを表しています。カーネルはファイルがダウンロードされるだけであり、新しいバージョンのカーネルを利用するには設定を変更する必要があります。
カーネルにセキュリティホールが発見されたときなど、カーネルのバージョンを上げる必要があります。そのまま使い続けると、セキュリティホールを悪用した攻撃を受ける可能性があるため、「以下のパッケージが新たにインストールされます:kernel××」のメッセージが表示されたときは注意が必要です。
# apt-get update ←最新のパッケージリストを入手 取得:1 http://updates.vinelinux.org 3.2/i386 release [2535B] 取得:1 http://updates.vinelinux.org 3.2/i386/main pkglist [228kB] 取得:2 http://updates.vinelinux.org 3.2/i386/main release [158B] 取得:3 http://updates.vinelinux.org 3.2/i386/plus pkglist [393kB] 取得:4 http://updates.vinelinux.org 3.2/i386/plus release [166B] 取得:5 http://updates.vinelinux.org 3.2/i386/updates pkglist [181kB] 取得:6 http://updates.vinelinux.org 3.2/i386/updates release [171B] 取得:7 http://updates.vinelinux.org 3.2/i386/main srclist [110kB] 取得:8 http://updates.vinelinux.org 3.2/i386/plus srclist [180kB] 取得:9 http://updates.vinelinux.org 3.2/i386/updates srclist [41.2kB] 1165kB を 3s 秒で取得しました (294kB/s) パッケージリストを読みこんでいます... 完了 依存情報ツリーを作成しています... 完了 # apt-get upgrade ←新しいパッケージをインストールする パッケージリストを読みこんでいます... 完了 依存情報ツリーを作成しています... 完了 以下のパッケージがアップグレードされます: bzip2 cyrus-sasl glibc glibc-common gnupg gzip openssl 以下のパッケージが新たにインストールされます: kernel#2.4.31-0vl1.12 ←この行があるときはカーネルのバージョンアップが必要 アップグレード: 7 個, 新規インストール: 1 個, 削除: 0 個, 保留: 0 個 53.6MB のアーカイブを取得する必要があります。 展開後に 21.4MB のディスク容量が追加消費されます。 続行しますか? [Y/n]y 取得:1 http://updates.vinelinux.org 3.2/i386/updates glibc-common 2.3.3-3vl1.3 [14.7MB] 取得:2 http://updates.vinelinux.org 3.2/i386/updates glibc 2.3.3-3vl1.3 [4111kB] 取得:3 http://updates.vinelinux.org 3.2/i386/updates bzip2 1.0.2-0vl2.1 [78.7kB] 取得:4 http://updates.vinelinux.org 3.2/i386/updates gnupg 1.2.6-0vl4 [1724kB] 取得:5 http://updates.vinelinux.org 3.2/i386/updates openssl 0.9.7d-0vl3.2 [1166kB] 取得:6 http://updates.vinelinux.org 3.2/i386/updates cyrus-sasl 2.1.18-0vl5 [222kB] 取得:7 http://updates.vinelinux.org 3.2/i386/updates gzip 1.3.2-2vl5 [92.3kB] 取得:8 http://updates.vinelinux.org 3.2/i386/updates kernel#2.4.31-0vl1.12 [10.6MB] 53.6MB を 16s 秒で取得しました (3256kB/s) 変更を適用しています... 準備中... ########################################### [100%] 1:kernel ########################################### [ 5%] 2:glibc-common ########################################### [ 10%] 3:glibc ########################################### [ 15%] 4:bzip2 ########################################### [ 21%] 5:gnupg ########################################### [ 26%] 6:openssl ########################################### [ 31%] 7:cyrus-sasl ########################################### [ 36%] 8:gzip ########################################### [ 42%] 完了 #
なお、「パッケージの更新を自動化する」の手順でcronを使ってapt-get upgradeを実行している場合、rootのメールアドレスあてに送られてくるcronの結果のメールをチェックするか、lsコマンドを使って/bootディレクトリの内容を確認してください。もしくはVine Linuxのサイト(http://www.vinelinux.org/)にアクセスし、セキュリティ情報をチェックします。
カーネルをバージョンアップする
ほかのパッケージはapt-get upgradeでダウンロードからインストールまですべて自動で行われます。しかし、カーネルだけはダウンロードが行われるだけで、バージョンアップするには手動で設定変更が必要です。これはカーネルのバージョンアップによって不具合が発生する可能性があるため、ユーザーが手動で設定するようになっているためです。
新しいカーネルを使って起動するには、/etc/lilo.confを編集します。その前に/bootディレクトリをチェックして、新しいカーネルが正しくダウンロードされているかを確認してください。そして、新しいカーネルのファイル名をメモしておきます。vmlinuz-××というファイル名がカーネルです(××はバージョン番号。数値が大きいほど新しい)。下の例ではvmlinuz-2.4.31-0v11.8が古いカーネル、vmlinuz-2.4.31-0v11.12がダウンロードされた新しいカーネルです。
# ls /boot ←/bootディレクトリのファイルリストを表示
System.map@ boot.0300 module-info@
System.map-2.4.31-0vl1.12 diag1.img module-info-2.4.31-0vl1.12
System.map-2.4.31-0vl1.8 diag2.img module-info-2.4.31-0vl1.8
System.map.old@ initrd-2.4.31-0vl1.8.img module-info.old@
autoconf-up.h@ kernel.h vmlinuz@
autoconf-up.h-2.4.31-0vl1.12 lost+found/ vmlinuz-2.4.31-0vl1.12
autoconf-up.h-2.4.31-0vl1.8 map vmlinuz-2.4.31-0vl1.8
autoconf-up.h.old@ message vmlinuz.old@
#
viで/etc/lilo.confを開いて、次のような記述を追加します。image=から始まる行は新しいカーネルのファイル名を指定します。その他の行は従来の設定をそのままコピーしてください。initrd=で始まる行は省略してもかまいません。また、vga=で始まる行は「フレームバッファコンソールの設定」のページを参考にして設定してください。
古いカーネルの設定ではlavel=から始まる行をlinux.oldなど別のラベルに書き換えます。もし新しいカーネルで起動したときに不具合が発生したときは、linux.oldで指定した古いカーネルで起動して復旧作業を行います。
prompt timeout=50 # VESA framebuffer console # ex. 0x301=640x480x8, 0x314=800x600x16, 0x317=1024x768x16, 0x31A=1280x1024x16 # vga=0x314 vga=0x317 ←必要に応じて設定する default=linux boot=/dev/hda map=/boot/map install=menu message=/boot/message image=/boot/vmlinuz-2.4.31-0vl1.12 ←ここから5行を追加する label=linux read-only root=/dev/hda2 append=" resume2=swap:/dev/hda3" image=/boot/vmlinuz-2.4.31-0vl1.8 ←これまでのカーネルの設定 label=linux.old ←「linux.old」に変更 initrd=/boot/initrd-2.4.31-0vl1.8.img read-only root=/dev/hda2 append=" resume2=swap:/dev/hda3"
/etc/lilo.confの編集が終わったら、liloコマンドを実行して設定変更を反映させ、システムを再起動します。新しいカーネルでシステムが起動するはずです。
# /sbin/lilo ←liloコマンドを実行 Added linux * Added linux.old # shutdown -r now ←再起動する
再起動に成功したときは、念のためにカーネルのバージョンを確認します。unameコマンドを使うと動作中のカーネルのバージョンを確認することができます。unameコマンドは一般ユーザーで実行してもかまいません。
$ uname -a Linux linux 2.4.31-0vl1.12 #1 Mon Dec 26 22:22:09 JST 2005 i686 unknown $
再起動に失敗したときは
もし再起動に失敗するなら、古いカーネルで起動します。下の写真のような起動画面で「linux.old」をカーソルキーで選択し、Enterキーを押すと以前のバージョンのカーネルで起動することができます。その後、/etc/lilo.confの記述に間違いがないかを確認してください。間違いがないのに起動に失敗するときは、ハードウェアと新しいカーネルの相性が合わないと考えられます。
