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

ここでは OpenBSD/i386 を 3.2版から 3.3版へアップグレードする手順を紹介します。 今までの版と同様に、ソースコードを更新し、 自分でコンパイルする手順でアップグレードするつもりでしたが、 コンパイルの途中で SEGV が発生して、完了することができませんでした。 その問題を解決するのには手間がかかりそうだったので、 CD-ROMからブートしてバイナリーアップグレードを行いました。 なお、ここに記載した手順は一例にすぎません。 環境や設定が異なれば、この手順のままではうまくいかない可能性もあります。

備考: 3.3版から江藤博明氏による ProPoliceスタック保護拡張機能が導入された関係で、 実行形式ファイルと DLL(*.so)ファイルとでバージョンに不整合があると、 実行時に SEGV になってしまうようです。 OSをコンパイルする途中では新旧のバージョンが混在するので、 MINI-FAQ: Upgrading OpenBSD で指定された手順で進めたつもりなのですが、 不整合が発生したようです。

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

ソースを更新する

バイナリーアップグレードではソースを必要としませんが、 アップグレード後の色々な作業の都合で、事前にソースを更新しておきます。 ここでは、Anonymous CVS を使う手順をあげておきます。

  1. /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_3 -Pd
    
  2. 必要であれば、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_3 -Pd
    
  3. 必要であれば、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_3 -Pd
    

バイナリーアップグレードを行う

  1. マシンを停止(halt)します。
  2. セキュリティ上の問題が発生する可能性を考慮し、外部ネットワークとの接続を切り離します。
  3. OpenBSD 3.3 CD-ROM の CD1 を使って起動します。
  4. ブートに成功すると、以下の質問で止まるので、 u を入力してアップグレードを選びます。
        ・・・
    (I)nstall, (U)pgrade or (S)hell? u〈Enter〉
    
  5. 各種の質問に答えながら、アップグレードの準備を進めます。
    Welcome to the OpenBSD/i386 3.3 upgrade program.
        ・・・
    Terminal type? [vt220] 〈Enter〉
    Do you wish to select a keyboard encoding table? [n] 〈Enter〉
        ・・・
    Proceed with upgrade? [n] y〈Enter〉
    Cool!  Let's get to it...
    Available disks are: wd0.
    Which one is the root disk? (or 'done') [wd0] 〈Enter〉
    Root filesystem? [wd0a] 〈Enter〉
    Checking root filesystem (fsck -fp /dev/wd0a) ... OK.
    Mounting root filesystem ... Done.
    Enable network using configuration stored on root filesystem? [y] 〈Enter〉
        ・・・
    Do you want to do any manual network configuration? [n] 〈Enter〉
        ・・・
    You can edit the fstab now, before it is used, but the edited fstab will only
    be used during the upgrade. It will not be copied back to disk.
    Edit fstab with ed? [n] 〈Enter〉
        ・・・
    
    この後、ルート以外のパーティションを対象にして fsck が走るので、 ディスクの大きさによっては、とても時間が掛かります。 その場合、fstab を編集して不要なパーティション(/home 等)をマウントしないようにすれば、 時間を節約できるでしょう。
  6. インストール元を指定し、何をインストールするかを選択して、 アップグレードを実行します。
    Sets can be located on a (m)ounted filesystem; a (c)drom, (d)isk or (t)ape
    device; or a (f)tp, (n)fs or (h)ttp server.
    Where are the upgrade sets? (or 'done') c〈Enter〉
    Available CD-ROMs are: cd0.
    Which one contains the upgrade media? (or 'done') [cd0] 〈Enter〉
    Pathname to the sets? (or 'done') [3.3/i386] 〈Enter〉
    
    The following sets are available. Enter a filename, 'all' to select
    all the sets, or 'done'. You may de-select a set by prepending a '-'
    to its name.
    
            [X] bsd
            [ ] bsd.rd
            [X] base33.tgz
            [X] etc33.tgz
            [X] misc33.tgz
            [X] comp33.tgz
            [X] man33.tgz
            [X] game33.tgz
            [ ] xbase33.tgz
            [ ] xshare33.tgz
            [ ] xfont33.tgz
            [ ] xserv33.tgz
    
    File name? (or 'done') [bsd.rd] all〈Enter〉
        ・・・
    File name? (or 'done') [done] 〈Enter〉
    Ready to upgrade sets? [y] 〈Enter〉
        ・・・
    
  7. あと少しの質問に答えて、アップグレードを完了させます。
    Sets can be located on a (m)ounted filesystem; a (c)drom, (d)isk or (t)ape
    device; or a (f)tp, (n)fs or (h)ttp server.
    Where are the upgrade sets? (or 'done') done〈Enter〉
    What timezone are you in? ('?' for list) [Japan] 〈Enter〉
    Setting local timezone to 'Japan'...done.
        ・・・
    CONGRATULATIONS! Your OpenBSD upgrade has been successfully completed!
    To boot the new system, enter halt at the command prompt. Once the
    system has halted, reset the machine and boot from the disk.
    # halt〈Enter〉
    syncing disks... done
    
    The operating system has halted.
    Please press any key to reboot.
    
  8. CD-ROM を取り出し、何かキーを押してリブートします。

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

  1. 以下のグループIDを追加します。
    _lkm:*:61:
    _spamd:*:62:
    _radius:*:63:
    _token:*:64:
    _shadow:*:65:
    
  2. 以下のユーザIDを追加します。
    _spamd:*:62:62::0:0:Spam daemon:/var/empty:/sbin/nologin
    
  3. 幾つかのファイルのグループとパーミッションを変更します。 なお、必ずしも全てのファイルが存在するわけではないので、 ファイル無しのエラーは無視します。
    # chgrp _lkm /dev/lkm
    # chgrp _radius /etc/raddb /etc/raddb/servers
    # chmod g+x /etc/raddb
    # chmod g+r /etc/raddb/servers
    # chgrp _token /etc/activ.db /etc/crypto.db /etc/snk.db
    # chmod 0640 /etc/activ.db /etc/crypto.db /etc/snk.db
    # chgrp _shadow /etc/spwd.db
    # chmod 0640 /etc/spwd.db
    
  4. at が cron に統合されたのに伴い、管理ファイルを変更します。 なお、allow と deny ファイルは必ずしも存在するわけではないので、 ファイル無しのエラーは無視します。 しかし、crontab を root 以外の一般ユーザーに許可する/しないを制御するものなので、 man crontab を参考にして、適切な設定をするようにしましょう。 これは、at.allow, at.deny も同様です。
    # mv /var/at/* /var/cron
    # rmdir /var/at
    # mv /var/cron/jobs/* /var/cron/atjobs
    # rmdir /var/cron/jobs
    # mv /var/cron/allow /var/cron/cron.allow
    # mv /var/cron/deny /var/cron/cron.deny
    # kill `cat /var/run/cron.pid`
    # /usr/sbin/cron
    
  5. /etc/pf.conf の仕様の一部が変更されたので、シンタックスエラーが発生するならば、 man pf.conf および PF: OpenBSDパケットフィルタ を参考にして、修正します。 当方で確認した限りでは、 "flags S" というパラメタは "flags S/SAFR" などに変える必要がありました。
    なお、PFは、3.3版になって、かなり機能拡張されたようなので、 新しい機能を使用するように、設定全体を見直したほうが良いように思います。
  6. 以下の手順で 3.3版の各種設定ファイルをワーク領域にインストールします。
    # mkdir /root/newroot
    # cd /usr/src/etc
    # make DESTDIR=/root/newroot distribution-etc-root-var
    
  7. named が bind4 から bind9 になったのに伴い、named の設定ファイルを変更します。
    当方では、/var/named を /var/named.old にリネームし、 /root/newroot/var/named を /var/named に cp -rp でコピーした後、 /var/named/etc/named.conf は /var/named.old/named.boot を参考にしつつ新規作成し、 ゾーン情報のファイルは /var/named.old の配下からコピーしました。
  8. その他の /etc 配下のファイルについて、 ワーク領域(/root/newroot)にインストールしたものと比較するなどした上で、 必要に応じて更新します。
    当方の環境では以下のファイルを更新しました。 参考にしてください。
    新ファイルを参考にして変更したもの:
    /etc/ftpusers
    /etc/inetd.conf
    /etc/mail/aliases
    /etc/newsyslog.conf
    /etc/rc.conf
    
    新ファイルで置き換えたもの:
    /etc/afs/afsd.conf
    /etc/changelist
    /etc/daily
    /etc/kerberosIV/krb.extra
    /etc/ksh.kshrc
    /etc/locate.rc
    /etc/mrouted.conf
    /etc/mtree/4.4BSD.dist
    /etc/mtree/special
    /etc/netstart
    /etc/protocols
    /etc/rc
    /etc/remote
    /etc/security
    /etc/services
    /etc/spamd.conf
    /etc/systrace/usr_sbin_lpd
    /etc/systrace/usr_sbin_named
    /etc/weekly
    
  9. reboot します。 新しい設定ファイルに基づき起動するので、その動作を確認します。

その他の作業

  1. 必要に応じて、カーネルを再コンパイルしておきます。
    カーネルをカスタマイズする
  2. 必要に応じて、ユーザーランドを再コンパイルしておきます。
    ソースを更新し、再コンパイルする
  3. Perlのバージョンが 5.8.0 になりました。 XSモジュールのAPIが変更されたため、 全てのXSモジュールは再コンパイル、再インストールが必要です。
  4. XFree86 は新くなっていませんが(4.2.1のまま)、 ProPoliceスタック保護拡張機能を有効にするには再コンパイルが必要です。 再コンパイル、再インストールしておきましょう。
  5. portsで、および、その他の方法でインストールしたプログラムも、 ProPoliceスタック保護拡張機能を有効にするには再コンパイルが必要です。 再コンパイル、再インストールしておきましょう。