ソースを更新し、再コンパイルする

OpenBSD に不具合が見付かると、その修正のためのソースパッチが公開されます。 それを自分の環境に取り込むためには、OS を再コンパイルする必要があります。 ここでは、CD-ROM からソースをインストールし、そこに不具合の修正を取り込み、 再コンパイルする手順を示します。 なお、これらの作業は全て root で行います。

備考: current 版で良ければ、 バイナリー・スナップショットが公開されているので(FTP で入手可能)、 それをインストールすることで、最新版にすることは可能なようです。 ただし、機能追加/仕様変更も含まれているので、 情報収集を十分にしないとトラブルになる可能性があります。

参考: Patch Branches (日本語訳)

CD-ROM からソースをインストールする

  1. ソースの入っている CD-ROM (2.9版は CD#1、3.0版と3.1版は CD#3) をマウントします。
    # mkdir /mnt/cdrom    ← 既存なら不要
    # mount -t cd9660 -r /dev/cd0a /mnt/cdrom
    
  2. 以下のようにして、ソースをインストールします。
    # cd /usr/src
    # tar xzvf /mnt/cdrom/src.tar.gz
    # tar xzvf /mnt/cdrom/srcsys.tar.gz  ← 2.9版の場合のみ
    
  3. 必要であれば、XFree86 のソースをインストールします。
    ※ 2.9版の場合、XFree86 は CD#2 に入っているので、CD-ROM を交換します。
    # cd /usr
    # tar xzvf /mnt/cdrom/XF4.tar.gz
    
  4. 必要であれば、ports のソース(定義ファイル?のみ)をインストールします。
    ports は各種のアプリケーション・プログラムについて、 ソース取得、パッチ当て、コンパイル、インストールを自動的に行うツールで、 環境構築がとても楽になります。 ただし、自力でソースを入手してコンパイルするのに比べて、 バグ修正への対応が遅くなってしまうので、セキュリティ上の問題が生じる可能性があります。 また、コンパイル時に独自のカスタマイズをするのが困難です。 ports は、それらの問題点を考慮した上で利用する必要があります。
    ※ 2.9版の場合、ports も CD#2 に入っています。
    # cd /usr
    # tar xzvf /mnt/cdrom/ports.tar.gz
    
  5. CD-ROM をアンマウントします。
    # umount /mnt/cdrom
    

ソースをアップデートする

  1. ソースの更新に、Anonymous CVS を使うため、インターネットへ接続できるようにネットワーク環境を整えます。 なお、この方法は、長時間のインターネット接続が必要になる可能性があるので、 ダイアルアップ環境では注意する必要があります。 なお、重要なパッチは、 Errata & patch list (日本語訳) から入手できるので、手動でパッチを当てることもできます。 ただし、この場合の修正は、Anonymous CVS での更新に比べて限定されているようです。
  2. /usr/src 配下を更新するため、以下のようなスクリプトを実行します。
    ※ これにより、全てのバグ修正が適用されたソース(stable の最新)に置き換わります。
    #!/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_1 -Pd
                                   ^^^^^版数により異なる
    
    この例では cvs コマンドを ssh でアクセスする方式で使用しています。 そのため、初めて実行した時には、以下のような確認が行われるので、 yes を入力して先へ進めます。 この情報は、~/.ssh/known_hosts ファイルに格納されるため、 2回目以降は確認なしで実行されます。
    The authenticity of host 'anoncvs.jp.openbsd.org (133.45.178.239)' can't
     be established.
    RSA key fingerprint is 80:6d:6b:9e:2b:5e:a3:fa:cc:bb:f7:fe:46:9f:ce:be.
    Are you sure you want to continue connecting (yes/no)? yes    ← 確認!
    Warning: Permanently added 'anoncvs.jp.openbsd.org,133.45.178.239' (RSA)
     to the list of known hosts.
    
    また、この例では日本国内の Anonymous CVS サーバを CVSROOT に指定していますが、 利用可能な Anonymous CVS サーバ から適当なサーバを選ぶことも可能です。
  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_1 -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_1 -Pd
                                   ^^^^^版数により異なる
    

再コンパイルとインストールを行う

  1. 以下のようにして、カーネルを再コンパイルします。 少し時間が掛かります。
    独自にカスタマイズしたカーネルを使っている場合は、 トラブル発生に備えて、カスタマイズしたカーネルだけでなく、 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
    
  2. カーネルを置き換え、リブートします。
    # chmod -x bsd
    # mv /bsd /bsd.old; cp bsd /bsd
    # reboot
    
  3. OS のその他の部分を再コンパイルします。 かなり時間が掛かります。
    これでインストールまで行われます。
    # cd /usr/src
    # rm -rf /usr/obj/*
    # make obj && make build
    
  4. 再び、リブートします。
  5. 必要なら、XFree86 や ports の各パッケージを再コンパイルします。
    ※ 具体的な手順は、別稿でまとめる予定です。