Linux カーネルアップデート(Redhat 9 : 2.4.20 -> 2.4.25)

Linux をインストールした後でも、いろいろとメンテナンスが必要になります。特に、カーネルにバグが見つかったときやセキュリティーホールが見つかったときなどはカーネルのアップデートを行う必要があるときがあります。 ここでは、Redhat Linux のカーネルのアップデート方法を記述します。

* RPM を利用したアップデート

簡単な方法は、Redhat から不具合の修正された RPM をダウンロードしてインストールする方法です。どのカーネルをダウンロードするかは Redhat のバージョンと uname コマンドで確認できます。

# uname -rp
2.4.20-8 i686
# cat /etc/redhat-release
Red Hat Linux release 9 (Shrike)

uname コマンドから カーネルのバージョンが 2.4.20-8 で i686 アーキテクチャであることが確認できます。また、Redhat のバージョンが 9 であることもわかります。

これらの情報をもとに、Redhat のサポートのページから最新版をダウンロードします。

kernel-2.4.20-27.9.i686.rpm
kernel-source-2.4.20-27.9.i686.rpm

pcmcia関連やそのほか必要なものがあればそれらも入手します。

入手したなら、rpm コマンドを使用してアップデートします。kernelのアップデートは、古いカーネルでも起動できるように新しいカーネルを追加インストールします。ソースなど、古いものが必要ないならアップデートします。

# rpm -ivh kernel-2.4.20-27.9.i686.rpm
# rpm -Fvh kernel-source-2.4.20-27.9.i686.rpm

通常必要ないはずですが、/boot/initrd-2.4.20-27.img が作られていない場合、mkinitrd コマンドを実行してください。
(mkinitrd /boot/initrd-2.4.20-27.img 2.4.20-27)

* ソースを利用したアップデート

カーネルのソースを www.kernel.org から入手します。必要となるバージョンの最新リリースをダウンロードし、カーネルを作成します。カーネルの作成は、スーパーユーザーで /usr/src ディレクトリーで行います。また、ダウンロードしたファイルも /usr/src にあると想定してください。

ここでは、Redhat Linux 9 のカーネル 2.4.20 を 2.4.25 にアップデートします。

# LANG=C
# export LANG
# cd /usr/src
# rm linux-2.4
# bzip2 -dc linux-2.4.25.tar.bz2 | tar xpf -
# ln -s linux-2.4.25 linux-2.4

既存のカーネルの設定を、新しいカーネルへ引き継ぎます。

# cd linux-2.4.25
# uname -p
i686
# cp /usr/src/linux-2.4.20-8/configs/kernel-2.4.20-i686.config .config
# make oldconfig

make oldconfig を実行すると、既存の設定が新しいカーネルに設定されていきますが、新しい機能に関してはどうするかたずねられます。その時点で、 y(yes), n(no), m(module) のいずれかを選びます。 デフォルトは、大文字で表示されています。

もし、既存の環境を利用せずに新規に設定するなら make xconfig または make menuconfig と実行します。

設定が完了したら、カーネルをコンパイルします。

# make dep
# make clean
# make bzImage

続いて、カーネルモジュールをコンパイルし、インストールします。モジュールは、/lib/modules/<バージョン>ディレクトリーにインストールされます。

# make modules
# make modules_install

最後にカーネルをインストールします。カーネルは、/boot ディレクトリーにインストールされます。

# make install

* GRUB, LILOのアップデート

ブートローダーに新しいカーネルを認識させます。ブートローダーに何を使っているかによって設定が変わります。

GRUBの場合: /boot/grub/grub.conf ファイルを編集してデフォルトの起動カーネルを変更します。カーネルをインストールした時点で新しいカーネルの情報が追加されます。しかし、デフォルトの起動カーネルは古いものになっています。

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/hda2
#          initrd /initrd-version.img
#boot=/dev/hda
default=1
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.25)
        root (hd0,0)
        kernel /vmlinuz-2.4.25 ro root=LABEL=/
        initrd /initrd-2.4.25.img
title Red Hat Linux (2.4.20-8)
        root (hd0,0)
        kernel /vmlinuz-2.4.20-8 ro root=LABEL=/
        initrd /initrd-2.4.20-8.img

title で区切られた情報が、各カーネルの設定になります。そして、上から 0, 1, 2, ... という具合に番号が振られます。よって、新しいカーネルをデフォルトにするには default=0 と設定します。

GRUBの設定が終了したら、Linux を新しいカーネルで起動しなおします。もし、起動に失敗したり不具合が生じたらブートローダーで古いカーネルを選んで起動し不具合を解決してください。

LILOの場合: /etc/lilo.conf ファイルを編集して新しいカーネルが起動できるように情報を追加します。

boot=/dev/hda
      map=/boot/map
      install=/boot/boot.b
      prompt
      timeout=50
      linear
      default=linux-2.4.25
 
      image=/boot/vmlinuz-2.4.20-8
          label=linux
          read-only
          root=/dev/hda1
 
      image=/boot/vmlinuz-2.4.25
          label=linux-2.4.25
          read-only
          root=/dev/hda1

追加したら、lilo コマンドで ブート情報を更新します。

# /sbin/lilo

Solaris には安全性を高めるために、Trusted Solarisというものがあります。これに対して Linux でも SELinux というものがあります。カーネルと一部のコマンドを入れ替えるだけで、ある程度セキュリティーを強化することが出来ます。