                最新の FreeBSD(98) を追いかける

                                        $Date: 2003/09/19 14:03:37 $

1. はじめに

    -current や -stable は開発バージョンだということを忘れないで下さい。時
    によってはコンパイルできないかもしてませんし、コンパイルできたかたらと
    いって必ずしも動作するとは限りません。つまり何があっても自分で何とかし
    ようというガッツがある人以外にはオススメできないということです。

    現在、FreeBSD(98) 移植チームでは、AT 互換機用のリリースごとに PC98 用
    の差分をリリースしています。しかし基本的には本家に PC98 用のソースがマ
    ージされてるので PC98 用のパッチのあたったソースを用意しなくても PC98
    用のバイナリを作成することが可能です。では、なぜ PC98 用のソース差分が
    あるのか疑問の思うかもしれません。どういう差分があるかを説明してその疑
    問に答えようと思います。まず大雑把に分類すると、

     1. PC98 では役に立つのだけど、本家ソースツリーにマージできないでいる
     2. 一部コマンドの日本語対応
     3. ソースツリー中の PC98 固有部が共通部の変更と完全に同期が取れないた
        めに発生してしまった

    という 3 通りに分類されます。-stable や -current のソースを取得すると
    3 番目に相当する変更は既にされているはずです。コマンドの日本語対応は
    FreeBSD(98) 移植チームからのささやかなサービスと思って下さい。1 番に相
    当する部分が存在する理由は、

     1. 今の PC98 差分のままだと見苦しい
     2. 本家に必要性を理解してもらえない

    ということになります。

    FreeBSD(98) 移植チームでは、PC98 用の差分をすべて本家へマージすること
    を目標に作業を行なっています。しかし、実際に作業に当たる人が少なくてな
    かなか進んでいないのが現状です。

2. 情報源

    FreeBSD(98)-stable を利用する人は FreeBSD-stable メーリングリストへ、
    FreeBSD(98)-current を利用する人は FreeBSD-current メーリングリストへ
    ぜひとも加入してください。これらのメーリングリストに入るには、
    majordomo@FreeBSD.org へ

      subscribe freebsd-stable
      subscribe freebsd-current

    と書いたメールを送って下さい。これらのメーリングリストは英語で議論が行
    なわれています。日本語は送らないで下さい。

    日本語でも大丈夫なメーリングリストとして FreeBSD98-testers メーリング
    リストがあります。このメーリングリストに加入するには、
    majordomo@jp.FreeBSD.org へ

        subscribe freebsd98-testers

    と書いたメールを送って下さい。

    また 「FreeBSD ハンドブック」
    (http://www.jp.freebsd.org/www.FreeBSD.org/doc/ja_JP.eucJP/books/handbook/) の
    「Chapter 19. 開発の最前線:FreeBSD-current と FreeBSD-stable」
    (http://www.jp.freebsd.org/www.FreeBSD.org/doc/ja_JP.eucJP/books/handbook/cutting-edge.html)
    を必ず読んでください。


3. ソースツリーの取得

    FreeBSD(98) SNAPSHOT を利用してバイナリをインストールすることも可能で
    すが、自分でソースに変更を加えてコンパイルことを考えると、ソースからア
    ップデートするのが開発者向きでしょう。

    /usr/src 以下にソースツリーを用意するとしましょう。CTM や ftp でも可能
    ですが、ここでは cvsup を用いる方法だけ説明します。

    まずは cvsup をインストールしましょう。cvsup は ports や packages にあ
    ります。たとえば、

      pkg_add ftp://ftp4.jp.freebsd.jp/pub/FreeBSD/releases/i386/4.4-RELEASE/packages/All/cvsup-16.1_3.tgz

    とすると、インストールすることができます。ただし、
    FreeBSD(98) 4.3R-Rev01 以前のバージョンに付属の packages に収録されてい
    る cvsup にはバグがあるため、必ず新しいバージョンを使うようにしてくだ
    さい。

    次に cvsup の動作を指定する supfile を作成します。
    /usr/share/examples/cvsup 以下にサンプルファイルがあるので、これを元に
    して作成するといいでしょう。たとえば stable-supfile が RELENG_4 ブラン
    チ (4.x-stable) 用の supfile で、standard-supfile が HEAD ブランチ
    (5.0-current) 用の supfile です。

      # cd /usr/share/examples/cvsup
      # cp standard-supfile standard-supfile.pc98
      # vi standard-supfile.pc98

    *default host=CHANGE_THIS.FreeBSD.org となっているところを書き変えて身
    近な cvsup サーバを指定します。たとえば、cvsup2.jp.freebsd.org を使う
    とすると

      *default host=cvsup2.jp.FreeBSD.org

    となります。

    さて、supfile の準備ができたら cvsup を実行します。

      # cvsup -g -L 2 /usr/share/examples/cvsup/standard-supfile.pc98

    ネットワークの帯域にもよりますが、はじめて実行する場合は非常に時間がか
    かり 1 時間たっても終らないかもしれません。途中で中止したい場合は、
    CTRL-C で終了してください。

    無事 cvsup が終了すると、この場合は /usr/src 以下が指定した stable や
    current のソースになっています。あとは好きなときに cvsup を実行すると、
    その時点での stable や current のソースを取得できます。cron で自動的
    に cvsup を実行するようにしてもいいでしょう。


4. システムの再構築

    まずは、/usr/src/UPDATING に注意事項が書いてあるのでよく読んで、その指
    示にしたがってください。また以下の作業でつまづいた時には、もう一度この
    ファイルを読み直して下さい。対処方法が書いてあるかもしれません。

    それでは、実際にコンパイルしてみましょう。一番簡単な方法は、そのまま
    make buildworld してしまうことです。当然 PC98 用の差分に含まれている機
    能は使えなくなりますが、そういう機能を使わないと割り切ってしまいましょ
    う。

      # cd /usr/src 
      # make buildworld

    環境にもよるのですが、PentiumMMX-233MHz で 4 時間程度かかります。エラ
    ーもなく終了すると /usr/obj 以下に新しいバイナリが作成されています。つ
    ぎに kernel をコンパイルします。config file を /sys/pc98/conf/SARU とす
    ると

      # cd /usr/src
      # make buildkernel KERNCONF=SARU

    デバイス情報ファイルをインストールし、必要に応じて修正します。

      # cp /usr/src/sys/pc98/conf/GENERIC.hints /boot/device.hints
      # vi /boot/device.hints

    コンパイルされた kernel とモジュールをインストールします。

      # make installkernel KERNCONF=SARU

    新しい loader をインストールします。

      # cd src/sys/boot
      # make install

    新しい kernel をシングルユーザモードで起動し直します。新しいユーザラン
    ドは、新しいシステムコールを行なうことがあるので、make installworld を
    行なう前に新しい kernel を立ち上げるべきです。新しい kernel で起動しな
    い場合は、ちょうど壊れている時に cvsup してしまったのでしょう。まずは
    古い kernel に戻しましょう。それから、2,3 日待って cvsup からやり直し
    て下さい。

    無事に新しい kernel で起動したらまず最初に installworld に必要な最低限
    のファイルのみ更新しておきます。

      # mergemaster -p

    gcc のバージョンが上がっているので、古い形式のインクルードファイルを
    削除します。

      # rm -rf /usr/include/g++

    前準備が無事終了したらユーザーランドをインストールします。

      # cd /usr/src ; make installworld

    /etc/ 以下を修正します。/usr/sbin/mergemaster を使うとよいでしょう。

      # mergemaster

    これで、システムの再構築は完了しました。恐怖の再起動です。

      # shutdown -r now

    正常に起動したらアップデートの完了です。

    では、次に PC98 差分を含んだソースの作成の仕方を説明します。リリースさ
    れた FreeBSD(98) には 98src/patches.tar.gz というパッチが含まれています。
    これを cvsup 等で準備したソースに適用します。

      # cd /usr/src
      # tar -zxvf /..somewhere../98src/patches.tar.gz
      # cat patches/*.diff | patch -p0

    なんの問題もなく patch が完了することはまずないでしょう。reject された
    部分を必要に応じて手で修正します。ここで、patch を使わずに
    /stand/sysinstall や install.sh を使って 98src を展開してはいけません。
    なぜなら PC98 用の変更の入ったファイルを上書きすることにより PC98 用
    のソースを作成しているので、PC98 用の変更は入るのですが current や
    stable で変更された部分が消えてしまうからです。つまりソースの整合性が
    無くなってしまいます。ソースの PC98 対応化が完了したら、あとは、 make
    buildworld 以下の手順でシステムの再構築をします。

----
FreeBSD(98) 移植チーム
