Last Modiffied: 5 Apr 2002
カーネルのバージョンアップ

1.はじめに

■はじめに

現在使用しているカーネルでは、サポートされている機能が限定されており、新機能を使用するために、どうしてもカーネルのバージョンアップを行ないたいという場合があると思います。しかし、カーネルとは、OSの中核で、バージョンアップの影響は、システム全体に及びます。

そこで、カーネルのバージョンアップについては、必要性を十分に検討し、自己責任のもとで行なう必要があります。なお、バージョンアップの際には、付属のドキュメントに多くの重要事項が記載されていますので、よく読んでから行なってください。



2.準備

■ソースファイルの入手

まず、カーネルのアップデートを行なうためには、ソースファイルを入手する必要があります。ソースファイルは、さまざまな場所から入手可能ですが、ここでは、いくつかのサイトを紹介します。

◆ftp://ftp.kernel.org/pub/linux/kernel/
◆ftp://ftp.kddlabs.co.jp/pub/linux/kernel/
◆http://www.ring.gr.jp/archives/linux/kernel.org/kernel/



■ソフトウェアのアップデート

次は、コンパイラやツールのアップデートを行ないます。

圧縮ファイルを展開し、「"展開先ディレクトリ"/Documentation/Changes」を読むと、バージョンアップ後のカーネルで必要なソフトウェアのバージョンが記載されています。また、同時に、現在のバージョンを確認するためのコマンドも記載されていますので、記載されているコマンドを実行し、現在、使用中のバージョンを確認してください。もし、カーネルが要求するものより古いバージョンのソフトウェアを使用している場合には、ソフトウェアのバージョンアップを行ないます。

■ハードウェア環境の確認

カーネルをインストールする際に指定するオプションには、ハードウェア環境に関するものが多くあります。特に必要となる情報は、CPUの種類、マザーボードのチップセットとビデオカードで使用しているチップの型番、NIC、SCSIなどの拡張インターフェースの型番などです。環境によっては、これ以外にも必要となる情報があるので、チェックしておく必要があります。

そして、確認するための方法は、ハードウェアのマニュアルを確認する方法がもっとも確実な方法ではありますが、無くしてしまった場合には、「dmesg」コマンドを使用して確認することも可能です。


3.カーネルのコンフィグレーション

■カーネルソースの展開

上記の準備が出来たら、カーネルソースを展開します。

通常、カーネルのソースは、「/usr/src/linux/」ディレクトリに置かれています。そして、多くの場合、このディレクトリは、「/usr/src/linux-2.x.x」といったディレクトリへのシンボリックリンクとなっています。

そこで、以下のコマンドを実行し、このリンクを削除し、展開したソースディレクトリへのリンクを張りなおします。
# cd /usr/src
# rm linux
# tar -zxvf ~/linux-2.2.19.tar.gz
# mv linux linux-2.2.19
# ln -s linux-2.2.19 linux
なお、ソースファイルが「tar.bz2」形式で圧縮されている場合には、以下のコマンドを実行して展開します。
# tar -Ixvf ~/linux-2.2.19.tar.bz2


■カーネルのコンフィグレーション

ソースファイルの展開が終わったら、次は、カーネルのコンフィグレーションを行ないます。

コンフィグレーションとは、必要な機能をカーネルに組み込んだり、モジュールを用意したりと、カーネルをカスタマイズするための作業です。

コンフィグレーションの方法としては、コンソール画面上で作業を行なう「make config」と「make menuconfig」、X Window System 上で作業を行なう「make xconfig(図1)」の3種類のツールが用意されていますが、ここでは、「make xconfig」での設定方法について説明します。
他のツールを使用した場合でも、コンフィグレーションのインターフェースが変わるのみで、設定可能な項目は変わりませんので、ここでの説明を参考にして下さい。
# make xconfig
(図1)
make xconfig


カーネルのコンフィグレーションは、図1で示したメインメニューから行ないますが、詳細については、環境により異なるため、自己責任のもとで行なってください。

なお、メインメニューで表示されている、メニューの概要については、以下の表1を参照してください。

(表1)
メニュー 設定内容
Code maturity level options 以降のカーネルコンフィグレーションで、現在開発中のものや未完成のものを表示するかどうかの設定。
Loadable module support ローダブルモジュールを利用するための設定。
Processor type and features CPU の種類と機能を設定。
General setup ネットワーク機能、PCカードや電源管理機能の利用の可否、外部拡張バスの種類などを設定。
Memory Technology Devices(MTD) コンパクトフラッシュなどのサポート機能を利用するための設定。
Parallel port support パラレルポートを利用するための設定。
Plug and Play configuration プラグ&プレイ機能を利用するための設定。
Block device フロッピーディスクやRAMディスクなどの、ブロックデバイスを利用するための設定。
Multi-device support(RAID and LVM) ソフトウェアRAID機能、LVM機能を利用するための設定。
Networking options ネットワークの機能に関する設定。
Telephony Support インターネット電話のための拡張カードを利用するための設定。
ATA/IDE/MFM/RLL support 左記の方式で接続される、ハードディスクなどのブロックデバイスのサポート機能を設定。
SCSI support SCSI機器のサポート機能を設定。
IEEE 1394 (FireWire) support IEEE 1394 インターフェースを利用するための設定。
I2O device support I2O(Intelligent Input/Output)対応機器を利用するための設定。
Network device support ネットワーク機器を利用するための設定。
Amateur Radio support アマチュア無線を利用するための設定。
IrDA (infrared) support 赤外線通信を利用するための設定。
ISDN subsystem ISDN通信カードを利用するための設定。
日本国内で使用できるカードは無いので、通常は、設定の必要はない。
Old CD-ROM drives (not SCSI, not IDE) SCSIやIDE以外のインターフェースで接続するCD-ROMドライブを使用するための設定。
Input core support 入力機器を利用するための設定。
Character devices キャラクタデバイスを利用するための設定。
Multimedia devices オーディオ・ビデオキャプチャなどを利用するための設定。
File Systems サポートするファイルシステムの選択。
Console drives コンソールドライバの選択。
Sound サウンドカードの選択。
USB support USB接続機器を利用するための設定。
Kernel hacking 強制リブートやレジスタのダンプなどの機能を有効にするための設定。主にカーネルのデバックに利用する機能なので、通常は、「n」を選択。


■カーネルのコンパイルとインストール

カーネルのコンフィグレーションが終わったら、次は、カーネルのコンパイルを行ないます。カーネルをコンパイルするためには、以下のコマンドを実行します。

なお、ブートローダにGRUBを使用している場合、以下のコマンドを実行すると、インストール時に、「/etc/lilo.conf」への書き込みでエラーが発生しますので、GRUBの場合を参照して下さい。
# make dep
# make clean
# make install
まず、「# make dep」で、依存関係をチェックし、環境設定を反映させます。そして、「# make clean」で、コンパイル前の作業で出来た不要なファイルを削除して、コンパイルの準備が整います。
その後、「# make install」でコンパイルとインストールを行ないます。カーネルのコンパイルは、マシンのCPUスピードに依存しますが、数分〜数時間を要します。

コンパイルが終了すると、作成されたカーネルの圧縮イメージ(vmlinuz-2.2.19)が、「/boot」などのディレクトリにコピーされ、「vmlinuz」からリンクが張られるようになります。また、同じディレクトリにある「System.map」も「System.map-2.2.19」へのリンクを作成します。

■モジュールのコンパイルとインストール

カーネルのコンパイルが終了したら、次は、モジュールのコンパイルを行ないます。モジュールとは、カーネルのコンフィグレーションの時に、「m」を選択した部分で、カーネルのコンパイルとは別にコンパイルする必要があります。
# make modules
モジュールのコンパイルも、カーネルのコンパイル同様に、CPUスピードに依存した時間を要します。

この後、「# make modules_install」と実行すると、モジュールをインストールすることが出来ますが、このままでは、既存のモジュールがすべて上書きされてしまうため、アップデートに失敗した場合に復旧することが困難になります。そこで、以下の手順で、既存のモジュールのバックアップを行なってから、モジュールのインストールを行ないます。
# cp -r /lib/modules/`uname -r`/ /lib/modules/`uname -r`.sv
# make modules_install


4.lilo の編集

■「/etc/lilo.conf」の編集

カーネルをアップデートした場合、新しくインストールしたカーネルがうまく動かず、Linuxが起動できない場合があります。そこで、現在、動作しているカーネルと、新しくインストールしたカーネル、どちらからでも起動できるように、「vi」などを使用して設定ファイル(「/etc/lilo.conf」) の修正を行ないます。
# vi /etc/lilo.conf

----- 「/etc/lilo.conf」 -----
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
lba32
prompt
timeout =50
delault=linux

# 新しいカーネル
image=/boot/vmlinuz
        label=linux
        root=/dev/sda3
        initrd=/boot/initrd
        read-only
        
# 元のカーネル
image=/boot/vmlinuz-2.2.18-1
        label=linux-2218  # label を任意の名前に変更する
        root=/dev/sda3
        initrd=/boot/initrd
        read-only
----- 「/etc/lilo.conf」 -----
続いて、編集した「/etc/lilo.conf」の内容を有効とするために、LILOを実行します。
# lilo
Added linux *
Added linux-2218
以上の修正により、デフォルトでは、新しいカーネルで起動するようになります。もし、元のカーネルで起動したい場合には、起動時に以下のように入力することで、元のカーネルでも起動することが可能となります。
boot: linux-2218

この後、再起動をすることで、新しいカーネルで起動できるようになります。うまく起動しない場合には、カーネルのコンフィグレーションに問題がありますので、再度、コンフィグレーションから行なってください。


5.GRUBの場合

■カーネルのコンパイルとインストール

ブートローダーにLILOを使用する場合と同様に、カーネルのコンフィグレーションが終わったら、依存関係をチェックします。そして、不要なファイルを削除して、カーネルの(再)構築を行ないます。
# make dep
# make clean
# make bzImage
これで、新しいカーネルイメージが、「/usr/src/linux/arch/i386/boot」ディレクトリに「bzImage」というファイルで作成されるので、このファイルを「/boot」ディレクトリにコピーします。
# cp arch/i386/boot/bzImage /boot/vmlinuz.new

■モジュールのコンパイルとインストール

LILOの場合と同様に、カーネルのコンパイルが終了したら、次は、モジュールのコンパイルを行ないます。モジュールとは、カーネルのコンフィグレーションの時に、「m」を選択した部分で、カーネルのコンパイルとは別にコンパイルしてインストールする必要があります。
# make modules
# make modules_install
モジュールのコンパイルとインストールも、カーネルの場合と同様に、CPUスピードに依存した時間を要します。


■grub.conf の編集

次に、古いカーネルと新しいカーネルの両方で起動できるようにするために「/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/sda2
# initrd /initrd-version.img
#boot=/dev/sda
default=1
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Old Linux Kernel
    root (hd0,0)
    kernel /vmlinuz-2.4.9-21 ro root=/dev/sda2
    initrd /initrd-2.4.9-21.img

title New Linux Kernel
    root (hd0,0)
    kernel /vmlinuz.new ro root=/dev/sda2
    initrd /initrd-2.4.9-21.img
なお、ファイルの修正後、OSを再起動すると以下のような画面が表示され、新旧どちらのカーネルからも起動できるようになります。





6.改版履歴

■改版履歴

2002/04/05 GRUBの場合を追記
2002/02/04 初版作成



BACKUP