カーネルのアップグレード、設定の方法

IV.19.1. カーネルパッケージ

IV.19.1.1. カーネルパッケージのバージョン

Vine Linuxのカーネルパッケージでは、<バージョン>にはカーネルのバージョン、<リリース番号>は、 0vl<Vine のリリース番号> の形になっています。

この文書では、カーネルのバージョンをVER、 リリース番号をREL、 アーキテクチャをARCとします。kernel-2.6.16-0vl60.i386 であれば、 VER を 2.6.16、REL を 0vl60、ARC を i386 と読み換えてください。

IV.19.1.2. カーネルパッケージの構成

kernel-VER-REL.src.rpm

カーネルのソースRPMパッケージです。カーネルRPMを自分でコンパイルする場合に利用され、 以下のバイナリパッケージすべてを生成します。

kernel-VER-REL.i386.rpm

カーネル本体とカーネルモジュールが含まれています。複数のカーネルパッケージを同時にインストールすることができます。

Vine 3.x までは SMPカーネルがありましたが、Vine Linux 4.0 からは標準のカーネルで SMP 対応になっています。

kernel-source-VER-REL.i386.rpm

カーネルのソースです。/usr/src/linux-VER にインストールされます。複数のリビジョンを同時にインストールすることはできませんが、複数のバージョンをインストールすることはできます。

kernel-doc-VER-REL.i386.rpm

カーネルのドキュメントです。/usr/share/doc/kernel-VER にインストールされ、カーネルの設定などに必要な情報が書かれています。複数のリビジョンを同時にインストールすることはできませんが、複数のバージョンをインストールすることはできます。

kernel-devel-VER-REL.i386.rpm

カーネル用のモジュールを構築するための開発パッケージです。/usr/src/kernels/VER-REL-ARC にインストールされます。複数のリビジョンを同時にインストールすることはできませんが、複数のバージョンをインストールすることはできます。

一般的なアプリケーションの開発に必要なパッケージについて

kernel 2.4 の時の kernel-headers のパッケージは、 kernel 2.6 では kernel-develglibc-kernheaders の 2つのパッケージになりました。

glibc-devel が必要としていた kernel-headers の中の一般的なアプリケーション用のヘッダーファイルは glibc-kernheaders のパッケージに含まれるようになりました。

glibc-kernheaders は kernel-VER-REL.src.rpm からは作成されません。 そのため、kernel の特定のバージョンに依存することはなくなりました。

IV.19.2. カーネルパッケージのアップグレード

Vine Linuxのカーネルパッケージは、他のパッケージと同様に RPM 形式で配 布されていますが、他のパッケージのように rpm -Uvhでアップグレードする ことはできません。以下の手順に従ってアップグレードしてください。

最低限必要なパッケージは、

  • kernel-VER-REL.i386.rpm

です。必要なパッケージにアクセスできるようにしておいてください。/root にコピーしておくのが最も安全でしょう。

まず、新しいカーネルパッケージをインストールします。

$ sudo rpm -ivh kernel-VER-REL.i386.rpm

または、

$ sudo apt-get install kernel-VER-REL.i386.rpm

apt-cacheを使用した場合、 インストール可能なカーネルパッケージの候補がインストール済みカーネルとともに表示されます。 どのバージョンのパッケージがインストール済みかについては rpmコマンドの-qオプション を利用してください。

$ apt-cache show kernel
kernel は以下のパッケージで提供されているバーチャルパッケージです。
  kernel#2.6.16-0vl60 2.6.16-0vl60
  kernel#2.6.16-0vl60 2.6.16-0vl60
  kernel#2.6.16-0vl61 2.6.16-0vl61
  kernel#2.6.16-0vl61 2.6.16-0vl61
  kernel#2.6.16-0vl62 2.6.16-0vl62
  kernel#2.6.16-0vl62 2.6.16-0vl62
表示するパッケージを明示的に選択する必要があります。
E: パッケージ kernel は複数のパッケージで提供されているバーチャルパッケージです。

$ rpm -q kernel
kernel-2.6.16-0vl60

この場合、インストールするパッケージを選択する必要があります。例えば、最後のパッケージをインストールする場合、以下のようにバージョンを指定します。

$ sudo apt-get install kernel#2.6.16-0vl62
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  kernel#2.6.16-0vl62
アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 19 個
11.6MB のアーカイブを取得する必要があります。
展開後に 26.1MB のディスク容量が追加消費されます。
取得:1 http://updates.vinelinux.org/apt 4.1/i386/main kernel#2.6.16-0vl62 2.6.16-0vl62 [11.6MB]
11.6MB を 0s 秒で取得しました (20.8MB/s)
変更を適用しています...
Preparing...                ########################################### [100%]
   1:kernel                 ########################################### [100%]
完了

インストールするパッケージを選択しなかった場合には、 まだインストールされていないものの中でバージョンの一番新しいものがインストールされます。

kernel#2.6.16-0vl62 をインストールしてなければ kernel#2.6.16-0vl62 が、 kernel#2.6.16-0vl62 をインストールしてあれば kernel#2.6.16-0vl61 がインストールされることになります。

$ sudo apt-get install kernel
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
'kernel' として kernel#2.6.16-0vl61 を選択しました
以下のパッケージが新たにインストールされます:
  kernel#2.6.16-0vl61
アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 1 個
11.6MB のアーカイブを取得する必要があります。
展開後に 46.1MB のディスク容量が追加消費されます。
取得:1 http://updates.vinelinux.org/apt 4.1/i386/main kernel#2.6.16-0vl61 2.6.16-0vl61 [11.6MB]
11.6MB を 0s 秒で取得しました (20.8MB/s)
変更を適用しています...
準備中...                   ########################################### [100%]
   1:kernel                 ########################################### [100%]
完了

IV.19.2.1. アップグレード作業の終了

カーネルソースやドキュメントやモジュール構築用の開発パッケージが必要ならばインストールします。

$ sudo rpm -Uvh kernel-doc-VER-REL.i386.rpm
$ sudo rpm -Uvh kernel-source-VER-REL.i386.rpm
$ sudo rpm -Uvh kernel-devel-VER-REL.i386.rpm

または

$ sudo apt-get install kernel-{doc,source,devel}

これでパッケージのアップグレードは終了です。マシンを再起動します。

$ /sbin/shutdown -r now
ブートローダの設定について (i386)

Vine Linux 4.0から導入されたカーネルパッケージのアップグレード機構とブートローダGRUBの組合せにより、インストールされたままの設定であれば、特にブートローダの設定を変更する必要がありません。

なお、GRUBの設定ファイルは/boot/grub/menu.lstです。LILOと違い、設定ファイルを変更してもブートレコードの書き換えが必要ないのが特徴です。

GRUBの設定ファイルは最後にインストールしたカーネルで起動するように設計されています。

また、選択肢として、その一つ前にインストールしたカーネルがメニューにあります。

インストールした順番が基準となるので、バージョンを比較して新しいものを起動するわけではありませんが、 通常のアップグレードであれば、最後にインストールしたカーネルが最新のバージョンのカーネルとなります。

■GRUBの設定

最後にインストールしたカーネル、その前にインストールしたカーネルのような指定ではなく、特定のバージョンのカーネルで起動できるようにするには、ブートローダである GRUB の設定ファイル /boot/grub/menu.lst をエディタを使って編集します。GNOME をインストールしてあれば、boot-adminコマンドを利用することもできます。menu.lst の書式などについては info grub を参照してください。

安定バージョン(STABLE KERNEL)が 2.6.16-0vl60、テストバージョン(TEST KERNEL)が 2.6.16-0vl60.1 として Grub のメニューに追加するには次のようにします。

もともとある (Current kernel) のエントリをコピーして title の行と kernel の行の vmlinuz のバージョン と initrd の行の initrd.img のバージョンを指定します。

例 IV.19-1GRUB の設定ファイル menu.lst に新しいエントリを追加する
default=0
timeout=5

title Vine Linux (Current kernel)
	root (hd0,1)
	kernel /boot/vmlinuz ro root=/dev/hda2 resume2=swap:/dev/hda3 vga=0x314
	initrd /boot/initrd.img
	savedefault

title Vine Linux (Previous kernel)
	root (hd0,1)
	kernel /boot/vmlinuz.old ro root=/dev/hda2 resume2=swap:/dev/hda3 vga=0x314
	initrd /boot/initrd.old.img
	savedefault

追加title Vine Linux (STABLE KERNEL)
追加	root (hd0,1)
追加	kernel /boot/vmlinuz-2.6.16-0vl60 ro root=/dev/hda2 resume2=swap:/dev/hda3 vga=0x314
追加	initrd /boot/initrd-2.6.16-0vl60.img
追加
追加title Vine Linux (TEST KERNEL)
追加	root (hd0,1)
追加	kernel /boot/vmlinuz-2.6.16-0vl60.1 ro root=/dev/hda2 resume2=swap:/dev/hda3 vga=0x314
追加	initrd /boot/initrd-2.6.16-0vl60.1.img
ブートローダの設定について (ppc)

Vine Linux 4.0から導入されたカーネルパッケージのアップグレード機構とブートローダyabootの組合せにより、インストールされたままの設定であれば、特にブートローダの設定を変更する必要がありません。ただし、yabootの設定ファイルに変更を加えた場合は、必ずroot権限で以下のコマンドを実行し、ブートストラップパーティションに反映させて下さい。

$ sudo /sbin/mkofboot -v

なお、yabootの設定ファイルは/etc/yaboot.confです。

yabootの設定ファイルは最後にインストールしたカーネルで起動するように設計されています。

また、選択肢として、その一つ前にインストールしたカーネルがメニューにあります。

インストールした順番が基準となるので、バージョンを比較して新しいものを起動するわけではありませんが、 通常のアップグレードであれば、最後にインストールしたカーネルが最新のバージョンのカーネルとなります。

■yabootの設定

最後にインストールしたカーネル、その前にインストールしたカーネルのような指定ではなく、特定のバージョンのカーネルで起動できるようにするには、ブートローダである yaboot の設定ファイル /etc/yaboot.conf をエディタを使って編集します。yaboot.conf の書式などについては man yaboot.conf を参照してください。この yaboot.conf の設定を変更することにより、デフォルトで起動する OS (Mac OS / Mac OS X / Linux など) を切替えたりすることもできます。

安定バージョン(STABLE KERNEL)が 2.6.16-0vl60、テストバージョン(TEST KERNEL)が 2.6.16-0vl60.1 として yaboot のメニューに追加するには次のようにします。

もともとある、ラベル linux のエントリをコピーして image の行の vmlinux のバージョン と initrd の行の initrd.img のバージョンを指定します。

例 IV.19-2yaboot の設定ファイル yaboot.conf に新しいエントリを追加する
(...前半は省略...)

image=hd:11,/boot/vmlinux
	label=linux
	read-only
	initrd=/boot/initrd.img
	append="root=LABEL=/"

image=hd:11,/boot/vmlinux.old
	label=linux-old
	read-only
	initrd=/boot/initrd.old.img
	append="root=LABEL=/"

追加image=hd:11,/boot/vmlinux-2.6.16-0vl60
追加	label=linux-2.6.16-0vl60
追加	read-only
追加	initrd=/boot/initrd-2.6.16-0vl60.img
追加	append="root=LABEL=/"

追加image=hd:11,/boot/vmlinux-2.6.16-0vl60.1
追加	label=linux-2.6.16-0vl60.1
追加	read-only
追加	initrd=/boot/initrd-2.6.16-0vl60.1.img
追加	append="root=LABEL=/"

IV.19.2.2. カーネルを自分の設定で作り直す

標準の設定ではハードウェアが動かない場合、必要なサービスが設定されてい ない場合、カーネルをシェイプアップしたい場合などには、カーネルを自分の 設定で作りなおすことができます。自分でカーネルソースを取ってきてコンパ イルすることもできますが、Vine Linux 用に配布されているカーネルパッケー ジから自分用のカーネルパッケージを作成しなおすほうが安全で簡単です。

■カーネルパッケージを作り直す

Project Vine から配布されているカーネルパッケージから、自分で設定をしなおしたパッケージを作成することができます。生成したパッケージは、「カーネルパッケージのアップグレード」の手順に従って扱うことができます。

Vine Linuxには mkkpkg というスクリプトが含まれており、これを利用することで簡単にカーネルパッケージを作成することができます。

カーネルの設定方法はデフォルトで menuconfig です。変更したい場合は、引数の最後に「config」や「xconfig」をつけ加えることができます。

$ /usr/sbin/mkkpkg <ソースパッケージのあるディレクトリ>/kernel-VER-REL.src.rpm

このスクリプトでは、生成するパッケージのリビジョン番号を指定できます。バー ジョン管理のために、「.<自分用のリビジョン>」を付加するのがお勧め です。例えば、kernel-2.6.16-0vl2 に対しては、リビジョンを「0vl2.1」 「0vl2.2」「0vl2.3」…とするのがお勧めです。

カーネルパッケージは標準で ~/rpm/RPMS/i386/~/rpm/SRPMS/ ディレクトリ内に作成され ます。

■ソースツリーから作成する

インストールされたカーネルソースや、自分で取ってきたカーネルソースを利用してカーネルを作ることもできますが、RPM の管理を壊してしまう可能性があるため、あまりお勧めできません。Vine Linuxのシステム構成やカーネルについて熟知した上で行ってください。

標準のカーネルパッケージに含まれていないパッチを利用したい場合はにこの方法がお手軽ですが、mkkpkg の途中で spec ファイルを編集してちゃんとしたパッケージを作るのが理想的です。

$ cd /usr/src/linux-VER
$ sudo make menuconfig

で自分好みの設定に変えます。設定を保存したら、

$ sudo make dep clean bzImage modules modules_install

とします。

make menuconfig の前に

$ sudo cp configs/kernel-VERSION-ARC.config .config
$ sudo make oldconfig
とすると、あらかじめ Vine Linux 用に設定されたものを用いることができます。 そのあとで make menuconfig などを行って自分好みの設定を行ってください。

  • / (ルートパーティション)が SCSI ディスク上や SATA のディスク上にある場合は

    $ sudo /sbin/mkinitrd /boot/initrd-VER.img VER

    を実行します。

■仕上げ

最後に作成された vmlinuz と System.map を /boot にインストールします。

$ sudo make install

/boot/vmlinuz/boot/System.map といったようにバージョンなどのつかない名前になるので、必要であれば

cp /boot/vmlinuz /boot/vmlinuz-VER-REL
cp /boot/System.map /boot/System.map-VER-REL
のようにバージョンも付けた名前でコピーを作成してください。

以上の作業が終了したら、新しいカーネルで起動できる様に/boot/grub/menu.lstを編集してください。