FreeBSD 3.X -> FreeBSD 4.X Upgrade手順

その昔、サンノゼの某社に置いてきたFreeBSD 2.1.5-RELEASEを全てリモートから3.4-STABLEに上げるなど技を磨いた結果、ついに4.8-RELEASEまでメジャーバージョンのアップグレードをリモートからする手順を確立しました。データセンタに足を運ぶのは面倒だという場合に参考にしてください。

なお、この手順があなたにもあてはまるとは限りません。
私は本番前に手元のマシンで練習してから行ってますが、

失敗しても知りませんのでそのつもりで。

つくり方

  1. 3.5.1-RELEASE 以前のバージョンなら先ずは3.5.1-RELEASEまたは最新の3.5-STABLEにする。
  2. /usr/src に 4.2-RELEASEのソースを展開する。
    なぜか4.3以降のソースだとビルドに失敗するので4.2にする。別に4.1とかでも可。
    ソースはすでにftpから手に入れることが困難になってきているので cvsupでtagをRELENG_4_2_0_RELEASEを指定してgetする。/usr/portsが古い場合はtag=.で最新にしておく。

  3. /etc/make.confを次のように設定する。

    NOPERL=true
    NOPROFILE=true
    MAKE_RSAINTL=YES
    USA_RESIDENT=NO
    CFLAGS=-O -pipe -m486
    COPTFLAGS=-O -pipe -m486
    COMPAT3X=yes

  4. ビルドする

    cd /usr/obj/
    chflags -R noschg *
    rm -rf *                        要らないものを消しておく

    cd /usr/src
    make buildworld
    make buildkernel

  5. デバイスファイルのアップデート

    cd /usr/src/sbin/mknod && make install
    cp /usr/src/etc/MAKEDEV* /dev
    cd /dev
    sh MAKEDEV all

    パーティションにあったディスクのデバイスファイルを作る.
    sh MAKEDEV ad0s1a
    sh MAKEDEV ad2s1a など
    cd /sys/boot && make install

  6. /etc/fstab を編集. wd を ad に

  7. カーネルをインストール

    cd /usr/src
    make installkernel

  8. mountdが動くとリブート時にクラッシュするので無効化。
    次のステップシングルユーザモードに落とすならどーでも良い。

    ee /etc/rc.conf
    nfs_server_enable="NO"
    nfs_client_enable="NO"

  9. リブート

    shutdown -r now

    本当はシングルユーザモードにすべきだが、リモートテクニシャンとしてはマルチユーザモードで起動。

  10. 4.2のkernel上にて 3.Xユーザーランドで動く
  11. /varを4.Xにあわせるのと /etcのアップデート

    touch /var/log/security
    touch /var/log/cron
    rm /var/cron/log*

    cp -rp /etc /etc.old        /etcを取っておく
    mergemaster -v -s -a    本当は -a をつけないでやるけど手抜き
    cd /var/tmp/temproot

    手抜きのetc更新
    rm master.passwd
    rm hosts
    rm hosts.allow
    rm group
    rm inetd.conf
    rm shells
    他にも /etcで上書きされると不味いものとか新しいものとマージする必要があればそのファイルを編集。
    cp -pr * /etc            上書き。

  12. compat3xをインストール

    cd /usr/ports/misc/compat3x/
    make install            これで installworld後のリブートも安心?

  13. インストールワールド

    cd /usr/src/gnu/usr.bin/texinfo/install-info
    make install
    ldconfig -R /usr/obj/usr/src/lib/libc
    cd /usr/src
    make installworld
    cd /usr/src/release/sysinstall && make all install

  14. perlのインストール

    ee /etc/make.conf
    #NOPERL=true
    cd /usr/src/gnu/usr.bin/perl
    (cd libperl && make all install)
    (cd perl && make all install)        エラーが出たけど無視
    make clean all install

  15. rc.confのアップデート

    ee /etc/rc.conf
    sshd_enable="YES"
    fsck_y_enable="YES"

  16. リブート

    shutdown -r now

  17. sshdのユーザ・グループを追加
    mergemaster しても良いけど、取り合えず4.8-RELEASEに上げるための最低限。

    vipw
    sshd:*:22:22::0:0:sshd privilege separation:/var/empty:/nonexistent
    smmsp:*:25:25::0:0:Sendmail Submission User:/var/spool/clientmqueue:/sbin/nologin
    ee /etc/group
    sshd:*:22:
    smmsp:*:25:

    sshdのユーザ・グループの追加を忘れると悲惨。リブート後sshd起動しません。

  18. cvsupで最新の4.X に
  19. 普通にメイクワールド
  20. リブート
  21. はい、出来上がり

参考にさせて頂きました。
http://home.jp.FreeBSD.ORG/cgi-bin/showmail/FreeBSD-users-jp/56361