Kernel-2.2.6 install memo

ご注意
このペイジに書かれている方法を用いられる場合、あくまでも、 自己責任において実施 されるようお願いいたします。
また、このペイジからリンクさせて戴いているペイジの作者の方へ、この ペイジについての質問等をされる事は、その方への迷惑になりますので、 絶対にしないで下さい。
特に商用ディストリビューションだと、この方法を実行した事によって サポートが一切受けられなくなる可能性があります。
記述ミスなど、お気づきの点は、私、 野泉まで お知らせいただけると幸いです。

目次


はじめに

このペイジに記載してある方法は、 Vine 1.0 を ベースにしています。他の RedHat系の ディストリビューションでも、ほぼ同じだと思われますが、独自拡張されて いる場合もありますので、その辺はよく理解しておく必要があります。

また、linuxconfなるものでkernelの管理する方法もあるようですが、野泉は 勉強してないので(^^;、その方法は使用しておりません。

このペイジの方法を実施する事により、以後、Vine 1.0 から次のヴァージョンへ 簡単に upgrade する事 ができなくなる可能性が大いにあります

前準備

まずは必要なモノを取って来る事から始めます。ダイヤルアップ環境の場合は、 ppxp及び、userlink を新しくしないと、ネットから必要なリソースを取得する 事が困難になりますので、絶対忘れずに取って来ておく必要があります。

あ、気持は解りますが、 取って来たものを、即座にインストールしてはいけません。

  1. 中野@成蹊大さんの私家版Linux管理メモにあるカーネル2.2,Documentation/Changesの日本語訳をよく読む。

  2. The Linux Kernel Archivesからkernel-2.2.6のソース(tar.gz)をとって来る。

  3. ring.aist.go.jp(RedHatのミラー)のサーバからRedHat5.2のkernel-2.2用rpm パッケージを自分の必要な分とってくる。
    注意
    initscript を入れる事で、/etc/rc.d/rc.local、/etc/sysconfig/i18n に影響がある為、SRPMからパッケージを作り直すもよし、

    cp /etc/rc.d/rc.local /tmp
    cp /etc/sysconfig/i18n /tmp

    などと、一旦このファイルを退避して書き戻すもよしで、 お好みの方法で何とかしませう(^^;。
    これをやらないと Vine が RedHat を名乗るようになったり、 日本語が出なくなったりします。 また、当然ですが、日本語化されたコマンドが英語版になる場合があります。

    私の場合
    initscripts-3.78-2.4.i386.rpm
    ipchains-1.3.8-0.i386.rpm
    modutils-2.1.121-0.i386.rpm
    net-tools-1.50-0.i386.rpm
    procinfo-15-0.i386.rpm
    util-linux-2.9-0.i386.rpm
    をとってきましたが、sambaは動かしてないし、でかいので 取りませんでした。

  4. ftp.jaist.ac.jp(cotrib.redhat.comのミラー)のサーバの srpm パッケージ置場から、
    sysklogd-1.3.31-2.src.rpm
    を戴いて来る。

  5. [PPxP使用時]とほほるさん の「赤帽ペンギンと暮らす」の「パッケージ置場」から、
    ppxp-0.99030108-2.src.rpm
    を戴いて来る。

  6. [PPxP使用時]Kondara MNU Linux の 「パッケージ置場」から、
    userlink-0.98a-9.2.src.rpm
    を戴いて来る。
これでだいたい必要なものは揃いました。

カーネル構築

以下は、root での作業を想定しています。 ちょいとした作業ミスで二度と起動しなくなる可能性がありますので、 root での作業は十分注意して下さい。
  1. kernelソースの展開。
    1. cd /usr/src
    2. mkdir linux-2.2.6
    3. rm linux
    4. ln -s linux-2.2.6 linux
    5. tar xvzf linux-2.2.6.tar.gz

  2. kernelのコンパイル。
    1. make mrproper
      注意
      これはまっさらのカーネルをコンパイルする前に必要です。 やり直しなど、同じヴァージョンのカーネル再構築時には 必要ありません。
    2. make menuconfig または、make xconfig
      野泉の設定
      Pentium Pro×1
      Matrox Millenium
      ADDTRON AE-380PCI(DEC DC21041)
      Sound Blaster AWE32
      I・O data GV-BCTV/PCI(Brooktree Bt848)
      Adaptec AIC-7881U
      FX120T, ATAPI CDROM drive
      APM 有効
      という構成なら、そのまま使えるやもしれませんが、あくまでも参考 程度に。
    3. make dep;make clean
    4. make
    5. make modules
    6. [再構築時]rm -rf /lib/modules/2.2.6
      これは、/lib/modules/2.2.6 というディレクトリが 存在している場合、消しておきます。ただし、FD をモジュールに して、kerneld を使い、フロッピーブートというオーダーをされて いる奇特な方はこれをやるとハマります:-)。
      フロッピーブートの場合は、カーネル再構築時にハマらない為に、 FloppyDisk SUPPORT は m にせず、Y にしましょう。
    7. make modules_install
    8. cd /boot
    9. [initrd使用時]mkinitrd --needs-scsi-modules initrd-2.2.6.img 2.2.6
      SCSI boot する場合には上の様にしましょう。
      私は IDE ハードディスクで boot してるので要らないのですが(^^;、 SCSI boot のシステムで、SCSI をモジュール化した場合、initrd を設定する必要があります。
    10. [initrd使用時]ln -sf initrd-2.2.6.img initrd.img
    11. cd /etc
    12. lilo.conf の編集

      太字が今回作成したカーネルを起動する為の記述です。 append の部分は、ブートペンギンを出す為ので、無くても構いません。 出す場合は、今はまだ追加せず、ブートする事が確認できてから、 /usr/src/linux/Documentation/fb/ 以下のドキュメントを参照して、 自分の環境に合ったパラメータを追加して下さい。単純にコピー& ペーストすると起動しない事もありえます。

      image = /boot/vmlinuz
      label = linux
      append = "video=matrox:vesa:0x31B:mtrr" # Matrox Millenium用
      initrd = /boot/initrd.img
      root = カーネルのあるデバイス /dev/hda2 等

      image = /boot/vmlinuz-2.0.36-1vl4
      label = linux-2.0.36
      vga = normal
      initrd = /boot/initrd-2.0.36-1vl4.img
      root = カーネルのあるデバイス /dev/hda2 等

      という様に該当部分を追加&書き換えて下さい。 下の部分は Vine のカーネルを指定しています。これにより、万が一 2.2.6 の構築に失敗しても、起動時に
      boot: linux-2.0.36
      とする事で、Vine のカーネルの呼び出しが可能です。

    13. cd /usr/src/linux
    14. make install
      最後に lilo が自動的に実行されて、


      Added linux *
      Added linux-2.2.3
      Added linux-2.0.36
      Added dos
      make[1]: Leaving directory `/usr/src/linux-2.2.6/arch/i386/boot'

      と、私の場合は、linux-2.2.3 と dos のエントリがありますので、 上ではそれが現われていますが、だいたいこんな感じの終り方を していれば成功(のはず)です。

その他のプログラムの更新

カーネルの構築に大変時間がかかったと思います。お疲れ様です。 しかし! 「さぁ、できた!!」と再起動するのは「ちょっと待った!」です。

カーネルは他のプログラムと連動して動いています。今回、2.0系→2.2系へは かなり大幅な変更が行われていますから、その連動するプログラム類を新しい ものに更新しない事には、起動すらしない場合がありますので、更新を行い ます。

  1. initscripts の更新
    1. cp /etc/rc.d/rc.local /tmp
    2. cp /etc/sysconfig/i18n /tmp
    3. rpm -Uvh initscripts-3.78-2.4.i386.rpm
    4. mv /tmp/rc.local /etc/rc.d
    5. mv /tmp/i18n /etc/sysconfig

  2. rpm -ivh ipchains-1.3.8-0.i386.rpm
    2.2 系では ipfwadm から、ipchains に変更になりました。
  3. rpm -Uvh modutils-2.1.121-0.i386.rpm
  4. rpm -Uvh net-tools-1.50-0.i386.rpm
  5. rpm -Uvh procinfo-15-0.i386.rpm
  6. rpm -Uvh util-linux-2.9-0.i386.rpm

とりあえず、これで kernel-2.2 を起動する準備ができました。

ここまで、自分がやった事に抜けが無いかを整理して、冷静に考えて 見直しをしましょう。下手をすると二度と起動しなくなるかもしれません。

再起動後は、
boot: linux
これで、kernel-2.2.6が起動しなければ、
boot: linux-2.0.36
で、2.0.36 のカーネルを呼び出すという事を頭に入れておいて下さい。

決心がついたら、
/sbin/shutdown -r now
などでリブートします。

kernel-2.2.6 起動&微調整

とりあえず、うまく起動した方はおめでとうございます。
さて、次は、カーネルバージョンアップに伴い、諸々のモジュールの更新です。

  1. PPxP と userlink の更新。
    2.2.4 以降では listen() の引数変更がありましたので、Vine 1.0 付属の ppxp では動かす事ができません。この ppxp に更新しても kernel-2.0.36で 動きます。
    1. rpm --rebuild ppxp-0.99030108-2.src.rpm
      このパッケージは Vine のものとは違い、rebuild すると ppxp,tkppxp,xppxp の 3 つのパッケージができます。 それぞれ作成するには以下のパッケージが必要です。

      ppxp : readline-2.2.1j980724-4,ncurses-4.2-10vl1
      tkppxp : tcl-8.0.3_jp-5,tk-8.0.3_jp-5
      xppxp : xpm-3.4j-3

      をインストールしてから rebuild して下さい。 できたら、
      1. rpm -Uvh /usr/src/redhat/RPMS/ppxp-0.99030108-2.i386.rpm
      2. rpm -Uvh /usr/src/redhat/RPMS/tkppxp-0.99030108-2.i386.rpm
      3. rpm -Uvh /usr/src/redhat/RPMS/xppxp-0.99030108-2.i386.rpm
      と 3 つ更新しましょう。
    2. rpm --rebuild userlink-0.98a-9.2.src.rpm
      1. rpm -Uvh /usr/src/redhat/RPMS/userlink-0.98a-9.2.i386.rpm

      この userlink は、とほほるさん発案の方法にて、拙者が Vine の RPM をもとに、とほほるさんのppxpからぱくぱく(^^;して作成したもので、 2.0.36←→2.2.x のどちらで起動しても、不都合が無いようになって ます。

      カーネルのバージョンが上がった場合、Vine のと同様に再コンパイル が必要ですが、rpm で再構築して無理矢理入れなおすのでは無く、
      /sbin/make-userlink
      で、/lib/modules/[version]/net または、/lib/modules/preferrd/net 以下に構築されるようになってます。

      作成にあたり、とほほるさんには色々お世話になり、いろいろ勉強に なりました。ありがとうございます>とほほるさん。

      なお、kernel 2.2.x では、カーネル作成で ethertap を有効にすると、 userlink は必要ありません。

  2. rpm --rebuild sysklogd-1.3.31-2.src.rpm
    kernel-2.2.6 を起動した際、

    kernel: Error seeking in /dev/kmem
    kernel: Error adding kernel module table entry.

    なんてのが見えて気になってる方がおられるかもしれませんが、 このモジュールを更新する事で、エラーが出なくなります。

    1. rpm -Uvh /usr/src/redhat/RPMS/sysklogd-1.3.31-2.i386.rpm
    2. /etc/rc.d/init.d/syslog restart

  3. [APM 有効時]/etc/rc.d/init.d/halt の編集
    /sbin/shutdown -h now で電源を切るようにする場合、

      *halt)
            message="The system is halted"
            command="halt"
            ;;
    
    の部分を、
      *halt)
            message="The system is halted"
            command="halt -p"
            ;;
    

    と、“-p”を追加します。

  4. kerneld を止める

    2.0.36のカーネルをほとんど使わない場合、 2.2 ではモジュールの制御が kerneld からkmod になりましたので、kerneld を止めます。
    詳しくは /usr/src/linux/Documentation/kmod.txt を参照

    1. linuxconf
    2. Control→Control Panel→Control service activity で、kerneld を Enable → Disable
    3. /etc/rc.d/init.d/kerneld stop
    4. /etc/crontab の編集
      00-59/5 * * * * root rmmod -a
      を追加すると、5 分ごとに使ってないモジュールの掃除ができます。
    5. 2.0.36 のカーネル起動時は、kerneld の起動するのをお忘れなく。

Yuji Noizumi<noizumi@tk.airnet.ne.jp>
Last modified: Mon Apr 26 23:34:03 JST 1999