3.1版から 3.2版へアップグレードする

ここでは OpenBSD を 3.1版から 3.2版へアップグレードする手順を紹介します。 基本的には、同じ版の中で修正パッチを適用する手順と同じですが、 機能の追加/変更/削除もあるので、その対応も必要になります。 なお、これはアップグレードの手順の一例にすぎません。 環境や設定が異なれば、この手順のままではうまくいかない可能性もあります。

参考: OpenBSD FAQ: Upgrading OpenBSD (日本語訳)

ソースを更新する

  1. ソースの更新に、Anonymous CVS を使うため、インターネットへの接続できる環境を整えます。
  2. /usr/src 配下を更新するため、以下のようなスクリプトを実行します。
    #!/bin/sh -e
    CVSROOT=anoncvs@anoncvs.jp.openbsd.org:/cvs
    CVS_RSH=/usr/bin/ssh
    export CVSROOT CVS_RSH
    cd /usr/src
    cvs -d $CVSROOT -q up -rOPENBSD_3_2 -Pd
    
  3. 必要であれば、XFree86 を更新するため、以下のようなスクリプトを実行します。
    #!/bin/sh -e
    CVSROOT=anoncvs@anoncvs.jp.openbsd.org:/cvs
    CVS_RSH=/usr/bin/ssh
    export CVSROOT CVS_RSH
    cd /usr/XF4
    cvs -d $CVSROOT -q up -rOPENBSD_3_2 -Pd
    
  4. 必要であれば、ports を更新するため、以下のようなスクリプトを実行します。
    #!/bin/sh -e
    CVSROOT=anoncvs@anoncvs.jp.openbsd.org:/cvs
    CVS_RSH=/usr/bin/ssh
    export CVSROOT CVS_RSH
    cd /usr/ports
    cvs -d $CVSROOT -q up -rOPENBSD_3_2 -Pd
    

コンパイル前の準備を行う

  1. 以下のグループIDを追加します。 セキュリティ向上のための権限分離で使われるものです。
    sshd:*:27:
    _portmap:*:28:
    _identd:*:29:
    _rstatd:*:30:
    _rusersd:*:32:
    _fingerd:*:33:
    _sshagnt:*:34:
    _x11:*:35:
    crontab:*:66:
    authpf:*:72:
    
  2. 以下のユーザIDを追加します。 セキュリティ向上のための権限分離で使われるものです。
    sshd:*:27:27::0:0:sshd privsep:/var/empty:/sbin/nologin
    _portmap:*:28:28::0:0:portmap:/var/empty:/sbin/nologin
    _identd:*:29:29::0:0:identd:/var/empty:/sbin/nologin
    _rstatd:*:30:30::0:0:rpc.rstatd:/var/empty:/sbin/nologin
    _rusersd:*:32:32::0:0:rpc.rusersd:/var/empty:/sbin/nologin
    _fingerd:*:33:33::0:0:fingerd:/var/empty:/sbin/nologin
    _x11:*:35:35::0:0:X server:/var/empty:/sbin/nologin
    
  3. gcc を再構築します。 これは、__attribute__((sentinel)) の使用に対処するためです。 __attribute__((sentinel)) は、 exec(3) がNULLポインタで終端していない状態で使用された場合に警告を発するために 使用されるとのことです。
    # rm -r /usr/obj/gnu/egcs/gcc/*
    # cd /usr/src/gnu/egcs/gcc
    # make -f Makefile.bsd-wrapper clean
    # make -f Makefile.bsd-wrapper obj
    # make -f Makefile.bsd-wrapper depend
    # make -f Makefile.bsd-wrapper
    # make -f Makefile.bsd-wrapper install
    # make -f Makefile.bsd-wrapper clean
    # make -f Makefile.bsd-wrapper depend
    # make -f Makefile.bsd-wrapper
    # make -f Makefile.bsd-wrapper install
    
  4. 更新済みの libiberty を構築します。 これは、新しい binutils (2.11.2) が必要とするためです。
    # cd /usr/src/gnu/egcs/libiberty
    # make -f Makefile.bsd-wrapper cleandir
    # make -f Makefile.bsd-wrapper obj
    # make -f Makefile.bsd-wrapper depend
    # make -f Makefile.bsd-wrapper
    # make -f Makefile.bsd-wrapper install
    
  5. 必要とされるディレクトリを全て生成します。
    # cd /usr/src/etc
    # make DESTDIR=/ distrib-dirs
    

カーネルをコンパイルする

  1. カーネルをカスタマイズしていた場合には、 カーネルオプションの内容が以前と変わっている可能性があるので、 新旧の GENERIC を比較する などして違いを調べ、 必要に応じて、カーネル定義ファイルを変更します。
  2. カーネルをコンパイルします。
    カスタマイズしたカーネルのコンパイルは、以下の GENERIC の部分を差し替えて実行します。 なお、トラブル時に GENERIC 版も必要になるかもしれないので、 両方を作っておくのが良いでしょう。
    # cd /usr/src/sys/arch/i386/conf
    # /usr/sbin/config GENERIC
    # cd /usr/src/sys/arch/i386/compile/GENERIC
    # make clean && make depend && make
    
  3. 新しいカーネルでは、 古い環境でコンパイルした Packet Filter 制御系のコマンドがエラーになります。 そのため、Packet Filter が設定通りに動作しません。 Packet Filter を使用していた環境では、セキュリティ上の問題があるので、 ネットワークとの接続を切り離しておきます。
  4. カーネルを置き換え、リブートします。
    # chmod -x bsd
    # cp bsd /bsd32
    # mv /bsd /bsd.old && ln /bsd32 /bsd
    # reboot
    

OS の他の部分をコンパイルする

  1. OS を全コンパイルします。
    # cd /usr/src
    # rm -rf /usr/obj/*
    # make obj && make build
    
    これにはかなり時間が掛かります。

設定ファイル等を更新する

  1. S/Key のデータベースファイルが変更になりました。 以下のようにして変換します。
    # skeyinit -C
    # mv /etc/skeykeys /etc/skeykeys.OLD
    
    これに伴い、 全ての S/Key ディレクトリを使用するサードパーティープログラムについても 再コンパイルする必要があります。
  2. crontab や at の変更に伴い、 管理ファイルのパーミッションを変更します。
    # chgrp crontab /var/at/at.{allow,deny} /var/cron/{allow,deny}
    # chmod 0640 /var/at/at.{allow,deny} /var/cron/{allow,deny}
    # foreach f ( /var/cron/tabs/* )
          set u=`basename $f`
          chown $u.crontab $f
      end
    
  3. lp* の変更に伴い、 スプールのパーミッションを変更します。
    # find /var/spool/output /var/spool/lpd -type d \
          -execdir chgrp daemon {} \; -execdir chmod g+rwx {} \;
    # find /var/spool/output /var/spool/lpd -type f \
          -execdir chown daemon:daemon {} \;
    
  4. atrun の廃止に伴い、 crontab から /usr/libexec/atrun 起動の設定を削除します。 root 権限で crontab -e することによりエディタを起動して削除します。
  5. /etc/nat.conf の /etc/pf.conf への統合に伴い、 /etc/nat.conf の内容を /etc/pf.conf のルール定義に上に挿入します。 /etc/nat.conf は削除することができます。
  6. xdm の特権放棄に関連して /etc/fbtab に必須エントリが追加されました。 変更内容はアーキテクチャ依存なので、以下のようにして変更します。 なお、/etc/fbtab の内容をカスタマイズしていた場合には、 手動で内容をマージする必要があります。
    # cat /usr/src/etc/fbtab.head > /etc/fbtab.new
    # cat /usr/src/etc/etc.`uname -m`/fbtab >> /etc/fbtab.new
    # cat /usr/src/etc/fbtab.tail >> /etc/fbtab.new
    # mv /etc/fbtab.new /etc/fbtab
    
  7. /etc 配下の各ファイルに変更が必要です。 以下の手順で、ワーク領域に 3.2版のファイルをインストールし、 現在のファイルとそれとを比較し、必要であれば更新します。
    # mkdir /tmp/newroot
    # cd /usr/src/etc
    # make DESTDIR=/tmp/newroot distribution-etc-root-var
    
    なお、当方の環境では以下のファイルを更新しました。 参考にしてください。
    新ファイルを参考にして変更したもの:
    /etc/inetd.conf
    /etc/rc.conf
    /etc/ssh/ssh_config
    /etc/ssh/sshd_config
    /etc/sysctl.conf
    
    新ファイルで置き換えたもの:
    /etc/afs/*                      /etc/mtree/*
    /etc/bootptab                   /etc/netstart
    /etc/changelist                 /etc/ppp/*
    /etc/daily                      /etc/protocols
    /etc/exports                    /etc/rc
    /etc/ftpusers                   /etc/remote
    /etc/kerberosIV/*               /etc/security
    /etc/kerberosV/*                /etc/services
    /etc/ksh.kshrc                  /etc/skel/.[a-z]*
    /etc/login.conf                 /etc/sudoers
    /etc/lynx.cfg                   /etc/systrace/*
    /etc/mail/*                     /etc/ttys
    /etc/mrouted.conf
    
  8. 廃止されたコマンド、不要になった設定ファイルを削除します。 当方では、以下のファイルとディレクトリを削除しました。 なお、この中には既に3.1版で廃止されたのに残っていたものも含まれます。
    /sbin/ipf                       /usr/bin/rlogin
    /sbin/ipfstat                   /usr/libexec/atrun
    /sbin/ipnat                     /usr/libexec/kfd
    /sbin/photurisd                 /usr/libexec/rexecd
    /sbin/startkey                  /usr/libexec/rlogind
    /usr/sbin/ab                    /usr/libexec/safe_finger
    /usr/sbin/ifmcstat              /usr/games/dm
    /usr/sbin/mk-amd-map            /usr/games/hide/
    /usr/sbin/mkisofs               /etc/dm.conf
    /usr/sbin/trsp                  /etc/photuris/
    /usr/bin/kf                     /var/at/spool/
    
  9. /dev 配下のファイルの更新も必要です。 当方では、以下の手順によりディレクトリごとファイルを生成し直しました。
    # mkdir /dev.new
    # cd /dev.new
    # cp -p /tmp/newroot/dev/MAKEDEV* .
    # ./MAKEDEV all
    # cd ..
    # mv dev dev.old && mv dev.new dev
    
  10. reboot します。 新しい /etc/* ファイルの設定に基づき起動するので、その動作を確認します。 パケットフィルタの動作状況は、 pfctl -s info などにより確認できます。

その他の更新

  1. XFree86 も新くなっている(4.2.1)ので、 使用しているのなら、コンパイル、インストールします。
  2. ports で提供されているプログラムも、新くなっているものがあるので、 必要に応じて、インストールし直します。