<!--DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.2//EN"-->

<chapter id="kernel-upgrade">
  <title>カーネルのアップグレード、設定の方法</title>

<!--docinfo>

  <authorgroup>
    <author>
      <firstname>Daisuke</firstname>
      <surname>SUZUKI</surname>
    </author>
    <author>
      <firstname>Shoji</firstname>
      <surname>MATSUMOTO</surname>
    </author>
    <author>
      <firstname>Masaki</firstname>
      <surname>Kawamura</surname>
    </author>
    <editor>
      <firstname>Takuya</firstname>
      <surname>Kobayashi</surname>
    </editor>
    <othercredit>
      <firstname>Ryoichi</firstname>
      <surname>INAGAKI</surname>
      <contrib>Convertion Linuxdoc to DocBook</contrib>
    </othercredit>
  </authorgroup>

  <abstract>
    <para>
Vine Linuxのカーネルには、標準で配布されているカーネルソースに加えて、様々な改良、コンフィギュアが施されています。また、種々のシステムのサービスを簡単に利用できるように、多くのハードウェアに対応できるようになっています。配布されているカーネルを自分でコンパイルして利用することもできますが、様々な不整合が起こる可能性もあるため、あまりお勧めできません。この文書には、Project Vine が配布しているカーネルパッケージのアップグレードと設定方法が書いてあります。ここでは、対応アーキテクチャを i386 に限定します。
     </para>
  </abstract>

  <pubdate>2007/9/29</pubdate>
</docinfo-->


<sect1 id="kernel-upgrade-1">
<title>カーネルパッケージ</title>
  
<sect2 id="version">
<title>カーネルパッケージのバージョン</title>

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

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

</sect2>


<sect2 id="kernel-packages">
<title>カーネルパッケージの構成</title>

<variablelist>

<varlistentry>
 <term>
   <filename>
     kernel-<replaceable>VER</replaceable>-<replaceable>REL</replaceable>.src.rpm
   </filename>
 </term>
 <listitem>
 <para>
   カーネルのソースRPMパッケージです。カーネルRPMを自分でコンパイルする場合に利用され、
以下のバイナリパッケージすべてを生成します。
 </para>
 </listitem>
</varlistentry>

<varlistentry>
 <term>
   <filename>
     kernel-<replaceable>VER</replaceable>-<replaceable>REL</replaceable>.i386.rpm
   </filename>
 </term>
 <listitem>
 <para>
   カーネル本体とカーネルモジュールが含まれています。複数のカーネルパッケージを同時にインストールすることができます。
 </para>
 <para>
   Vine 3.x までは SMPカーネルがありましたが、Vine Linux 4.0 からは標準のカーネルで SMP 対応になっています。
 </para>
 </listitem>
</varlistentry>

<varlistentry>
 <term>
   <filename>
     kernel-source-<replaceable>VER</replaceable>-<replaceable>REL</replaceable>.i386.rpm
   </filename>
 </term>
 <listitem>
 <para>
カーネルのソースです。<filename class="directory">/usr/src/linux-VER</filename> にインストールされます。複数のリビジョンを同時にインストールすることはできませんが、複数のバージョンをインストールすることはできます。
 </para>
 </listitem>
</varlistentry>

<varlistentry>
 <term>
   <filename>
     kernel-doc-<replaceable>VER</replaceable>-<replaceable>REL</replaceable>.i386.rpm
   </filename>
 </term>
 <listitem>
 <para>
カーネルのドキュメントです。<filename class="directory">/usr/share/doc/kernel-<replaceable>VER</replaceable></filename> にインストールされ、カーネルの設定などに必要な情報が書かれています。複数のリビジョンを同時にインストールすることはできませんが、複数のバージョンをインストールすることはできます。
 </para>
 </listitem>
</varlistentry>

<varlistentry>
 <term>
   <filename>
     kernel-devel-<replaceable>VER</replaceable>-<replaceable>REL</replaceable>.i386.rpm
   </filename>
 </term>
 <listitem>
 <para>
カーネル用のモジュールを構築するための開発パッケージです。<filename class="directory">/usr/src/kernels/VER-REL-ARC</filename> にインストールされます。複数のリビジョンを同時にインストールすることはできませんが、複数のバージョンをインストールすることはできます。
 </para>
 </listitem>
</varlistentry>

</variablelist>

<note><title>一般的なアプリケーションの開発に必要なパッケージについて</title>
<para>
kernel 2.4 の時の kernel-<emphasis>headers</emphasis> のパッケージは、
kernel 2.6 では kernel-<emphasis>devel</emphasis> と <emphasis>glibc-kernheaders</emphasis> の 2つのパッケージになりました。
</para>

<para>
glibc-devel が必要としていた kernel-headers の中の一般的なアプリケーション用のヘッダーファイルは
glibc-kernheaders のパッケージに含まれるようになりました。
</para>
<para>
glibc-kernheaders は kernel-<replaceable>VER</replaceable>-<replaceable>REL</replaceable>.src.rpm からは作成されません。
そのため、kernel の特定のバージョンに依存することはなくなりました。
</para>
</note>

</sect2>
</sect1>


<sect1 id="kernel-upgrade-2">
<title>カーネルパッケージのアップグレード</title>

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

<para>
最低限必要なパッケージは、
</para>

<itemizedlist>

  <listitem>
  <para><filename>
    kernel-<replaceable>VER</replaceable>-<replaceable>REL</replaceable>.i386.rpm
  </filename></para>
  </listitem> 

</itemizedlist>

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

<!--
<para>
もし、SMPカーネルを必要とする場合は、
<filename>kernel-<replaceable>VER</replaceable>-<replaceable>REL</replaceable>.i386.rpm</filename>
ではなく、
<filename>kernel-smp-<replaceable>VER</replaceable>-<replaceable>REL</replaceable>.i386.rpm</filename>をお使い下さい。また、以下では適宜読み変えて下さい。
</para>
-->

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

<screen># rpm -<emphasis>i</emphasis>vh kernel-<replaceable>VER</replaceable>-<replaceable>REL</replaceable>.i386.rpm</screen>

<para>
または、
</para>

<screen># apt-get install kernel-<replaceable>VER</replaceable>-<replaceable>REL</replaceable>.i386.rpm</screen>

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

<screen>
$ apt-cache show kernel
<computeroutput>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 は複数のパッケージで提供されているバーチャルパッケージです。
</computeroutput>
$ rpm -q kernel
<computeroutput>kernel-2.6.16-0vl60
</computeroutput>
</screen>

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

<screen>
# apt-get install kernel#2.6.16-0vl62
<computeroutput>パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  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%]
完了
</computeroutput>
</screen>

<para>
インストールするパッケージを選択しなかった場合には、
まだインストールされていないものの中でバージョンの一番新しいものがインストールされます。</para>
<para>
kernel#2.6.16-0vl62 をインストールしてなければ kernel#2.6.16-0vl62 が、
kernel#2.6.16-0vl62 をインストールしてあれば kernel#2.6.16-0vl61 がインストールされることになります。
</para>

<screen>
# apt-get install kernel
<computeroutput>パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
'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%]
完了
</computeroutput>
</screen>

<sect2 id="kernel-upgrade-3">
  <title>アップグレード作業の終了</title>
  <para>
カーネルソースやドキュメントやモジュール構築用の開発パッケージが必要ならばインストールします。
  </para>

<screen># rpm -Uvh kernel-doc-<replaceable>VER</replaceable>-<replaceable>REL</replaceable>.i386.rpm
# rpm -Uvh kernel-source-<replaceable>VER</replaceable>-<replaceable>REL</replaceable>.i386.rpm
# rpm -Uvh kernel-devel-<replaceable>VER</replaceable>-<replaceable>REL</replaceable>.i386.rpm</screen>

  <para>
または
  </para>

  <screen># apt-get install kernel-{doc,source,devel}</screen>

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

  <screen># /sbin/shutdown -r now</screen>
  <note>
    <title>ブートローダの設定について (i386)</title>
    <para>Vine Linux 4.0から導入されたカーネルパッケージのアップグレード機構とブートローダGRUBの組合せにより、インストールされたままの設定であれば、特にブートローダの設定を変更する必要がありません。</para>

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

    <para>GRUBの設定ファイルは<emphasis>最後にインストールしたカーネル</emphasis>で起動するように設計されています。</para>
    <para>また、選択肢として、その一つ前にインストールしたカーネルがメニューにあります。</para>
    <para>インストールした順番が基準となるので、バージョンを比較して新しいものを起動するわけではありませんが、
    通常のアップグレードであれば、最後にインストールしたカーネルが最新のバージョンのカーネルとなります。</para>

  </note>

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

  <para>安定バージョン(STABLE KERNEL)が 2.6.16-0vl60、テストバージョン(TEST KERNEL)が 2.6.16-0vl60<emphasis>.1</emphasis>
として Grub のメニューに追加するには次のようにします。</para>
  <para>もともとある (Current kernel) のエントリをコピーして title の行と kernel の行の vmlinuz のバージョン と initrd の行の initrd.img のバージョンを指定します。</para>

<example id="add_new_entry_to_menu.lst"><title>GRUB の設定ファイル menu.lst に新しいエントリを追加する</title>
<screen>
default=0
timeout=5

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

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

追加title Vine Linux (STABLE KERNEL)
追加	root (hd0,1)
追加	kernel /boot/vmlinuz<emphasis>-2.6.16-0vl60</emphasis> ro root=/dev/hda2 resume2=swap:/dev/hda3 vga=0x314
追加	initrd /boot/initrd<emphasis>-2.6.16-0vl60</emphasis>.img
追加
追加title Vine Linux (TEST KERNEL)
追加	root (hd0,1)
追加	kernel /boot/vmlinuz<emphasis>-2.6.16-0vl60.1</emphasis> ro root=/dev/hda2 resume2=swap:/dev/hda3 vga=0x314
追加	initrd /boot/initrd<emphasis>-2.6.16-0vl60.1</emphasis>.img</screen></example>

  </listitem>

</varlistentry>

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

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

    <para>yabootの設定ファイルは<emphasis>最後にインストールしたカーネル</emphasis>で起動するように設計されています。</para>
    <para>また、選択肢として、その一つ前にインストールしたカーネルがメニューにあります。</para>
    <para>インストールした順番が基準となるので、バージョンを比較して新しいものを起動するわけではありませんが、
    通常のアップグレードであれば、最後にインストールしたカーネルが最新のバージョンのカーネルとなります。</para>

  </note>

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

  <para>安定バージョン(STABLE KERNEL)が 2.6.16-0vl60、テストバージョン(TEST KERNEL)が 2.6.16-0vl60<emphasis>.1</emphasis>
として yaboot のメニューに追加するには次のようにします。</para>
  <para>もともとある、ラベル linux のエントリをコピーして image の行の vmlinux のバージョン と initrd の行の initrd.img のバージョンを指定します。</para>

<example id="add_new_entry_to_yaboot.conf"><title>yaboot の設定ファイル yaboot.conf に新しいエントリを追加する</title>
<screen>

(...前半は省略...)

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<emphasis>-2.6.16-0vl60</emphasis>
追加	label=linux<emphasis>-2.6.16-0vl60</emphasis>
追加	read-only
追加	initrd=/boot/initrd<emphasis>-2.6.16-0vl60</emphasis>.img
追加	append="root=LABEL=/"

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

  </listitem>

</varlistentry>

</sect2>


<sect2 id="buildkernel">
<title>カーネルを自分の設定で作り直す</title>

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


<variablelist>

<varlistentry>
<term>■カーネルパッケージを作り直す</term>
<listitem>

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

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

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

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

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

<para>
カーネルパッケージは標準で <filename
class="directory">~/rpm/RPMS/i386/</filename> と <filename
class="directory">~/rpm/SRPMS/</filename> ディレクトリ内に作成され
ます。
</para>

</listitem>
</varlistentry>

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

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

<screen># cd /usr/src/linux-VER
# make <replaceable>menuconfig</replaceable></screen>

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

<screen># make dep clean bzImage modules modules_install</screen>

<para>
とします。
</para>

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

<blockquote>
  <itemizedlist>
  
  <listitem>
    <para>
/ (ルートパーティション)が SCSI ディスク上や SATA のディスク上にある場合は
    </para>

    <screen># /sbin/mkinitrd /boot/initrd-<replaceable>VER</replaceable>.img <replaceable>VER</replaceable></screen>

    <para>
を実行します。
    </para>
  </listitem>
  </itemizedlist>
</blockquote>

</listitem>
</varlistentry>

<varlistentry>
<term>■仕上げ</term>
<listitem>
<para>
最後に作成された vmlinuz と System.map を <filename 
class="directory">/boot</filename> にインストールします。
</para>

<!--
<screen>
# /sbin/installkernel <replaceable>VER</replaceable> arch/i386/boot/bzImage System.map
</screen>
-->

<screen># make install</screen>

<para>
<filename>/boot/vmlinuz</filename> と <filename>/boot/System.map</filename> といったようにバージョンなどのつかない名前になるので、必要であれば
<screen>cp /boot/vmlinuz /boot/vmlinuz-<replaceable>VER-REL</replaceable>
cp /boot/System.map /boot/System.map-<replaceable>VER-REL</replaceable></screen>
のようにバージョンも付けた名前でコピーを作成してください。</para>

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

</sect2>
</sect1>

<!--appendix id="copyrights">
<title>著作権</title>

<para>
この文書は松本庄司(MATSUMOTO Shoji)による著作物で、著作権は著者が有しま
す。改変、再配布についての許諾、バグ報告は <ulink url="mailto:vine@flatout.org">Project Vine</ulink> までお願いします。
</para>
<para>
2006年11月11日 追記
ドキュメントチーム発足後、オンラインマニュアルは GFDL (http://www.gnu.org/licenses/fdl.html) となっており、
Kernel 2.4 から 2.6 への変更に際してはドキュメントチームが改編しています。
</para>
</appendix-->

</chapter>
