Last Modiffied: 5 Apr 2002 |
カーネルのバージョンアップ |
1.はじめに |
■はじめに
現在使用しているカーネルでは、サポートされている機能が限定されており、新機能を使用するために、どうしてもカーネルのバージョンアップを行ないたいという場合があると思います。しかし、カーネルとは、OSの中核で、バージョンアップの影響は、システム全体に及びます。 そこで、カーネルのバージョンアップについては、必要性を十分に検討し、自己責任のもとで行なう必要があります。なお、バージョンアップの際には、付属のドキュメントに多くの重要事項が記載されていますので、よく読んでから行なってください。 |
2.準備 |
■ソースファイルの入手
まず、カーネルのアップデートを行なうためには、ソースファイルを入手する必要があります。ソースファイルは、さまざまな場所から入手可能ですが、ここでは、いくつかのサイトを紹介します。 ■ソフトウェアのアップデート 次は、コンパイラやツールのアップデートを行ないます。 圧縮ファイルを展開し、「"展開先ディレクトリ"/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 -Ixvf ~/linux-2.2.19.tar.bz2 ■カーネルのコンフィグレーション ソースファイルの展開が終わったら、次は、カーネルのコンフィグレーションを行ないます。 コンフィグレーションとは、必要な機能をカーネルに組み込んだり、モジュールを用意したりと、カーネルをカスタマイズするための作業です。 コンフィグレーションの方法としては、コンソール画面上で作業を行なう「make config」と「make menuconfig」、X Window System 上で作業を行なう「make xconfig(図1)」の3種類のツールが用意されていますが、ここでは、「make xconfig」での設定方法について説明します。 他のツールを使用した場合でも、コンフィグレーションのインターフェースが変わるのみで、設定可能な項目は変わりませんので、ここでの説明を参考にして下さい。 # make xconfig ![]() カーネルのコンフィグレーションは、図1で示したメインメニューから行ないますが、詳細については、環境により異なるため、自己責任のもとで行なってください。 なお、メインメニューで表示されている、メニューの概要については、以下の表1を参照してください。
■カーネルのコンパイルとインストール カーネルのコンフィグレーションが終わったら、次は、カーネルのコンパイルを行ないます。カーネルをコンパイルするためには、以下のコマンドを実行します。 なお、ブートローダにGRUBを使用している場合、以下のコマンドを実行すると、インストール時に、「/etc/lilo.conf」への書き込みでエラーが発生しますので、GRUBの場合を参照して下さい。 # make dep # make clean # make install その後、「# make install」でコンパイルとインストールを行ないます。カーネルのコンパイルは、マシンのCPUスピードに依存しますが、数分〜数時間を要します。 コンパイルが終了すると、作成されたカーネルの圧縮イメージ(vmlinuz-2.2.19)が、「/boot」などのディレクトリにコピーされ、「vmlinuz」からリンクが張られるようになります。また、同じディレクトリにある「System.map」も「System.map-2.2.19」へのリンクを作成します。 ■モジュールのコンパイルとインストール カーネルのコンパイルが終了したら、次は、モジュールのコンパイルを行ないます。モジュールとは、カーネルのコンフィグレーションの時に、「m」を選択した部分で、カーネルのコンパイルとは別にコンパイルする必要があります。 # make modules この後、「# 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」 ----- # lilo Added linux * Added linux-2218 boot: linux-2218 この後、再起動をすることで、新しいカーネルで起動できるようになります。うまく起動しない場合には、カーネルのコンフィグレーションに問題がありますので、再度、コンフィグレーションから行なってください。 |
5.GRUBの場合 |
■カーネルのコンパイルとインストール
ブートローダーにLILOを使用する場合と同様に、カーネルのコンフィグレーションが終わったら、依存関係をチェックします。そして、不要なファイルを削除して、カーネルの(再)構築を行ないます。 # make dep # make clean # make bzImage # cp arch/i386/boot/bzImage /boot/vmlinuz.new ■モジュールのコンパイルとインストール LILOの場合と同様に、カーネルのコンパイルが終了したら、次は、モジュールのコンパイルを行ないます。モジュールとは、カーネルのコンフィグレーションの時に、「m」を選択した部分で、カーネルのコンパイルとは別にコンパイルしてインストールする必要があります。 # make modules # make modules_install ■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 ![]() |
6.改版履歴 |
■改版履歴
|
![]() | ![]() |