ソースを更新し、再コンパイルする
OpenBSD に不具合が見付かると、その修正のためのソースパッチが公開されます。
それを自分の環境に取り込むためには、OS を再コンパイルする必要があります。
ここでは、CD-ROM からソースをインストールし、そこに不具合の修正を取り込み、
再コンパイルする手順を示します。
なお、これらの作業は全て root で行います。
備考: current 版で良ければ、
バイナリー・スナップショットが公開されているので(FTP で入手可能)、
それをインストールすることで、最新版にすることは可能なようです。
ただし、機能追加/仕様変更も含まれているので、
情報収集を十分にしないとトラブルになる可能性があります。
参考: Patch Branches
(日本語訳)
-
ソースの入っている CD-ROM (2.9版は CD#1、3.0版と3.1版は CD#3) をマウントします。
# mkdir /mnt/cdrom ← 既存なら不要
# mount -t cd9660 -r /dev/cd0a /mnt/cdrom
-
以下のようにして、ソースをインストールします。
# cd /usr/src
# tar xzvf /mnt/cdrom/src.tar.gz
# tar xzvf /mnt/cdrom/srcsys.tar.gz ← 2.9版の場合のみ
-
必要であれば、XFree86 のソースをインストールします。
※ 2.9版の場合、XFree86 は CD#2 に入っているので、CD-ROM を交換します。
# cd /usr
# tar xzvf /mnt/cdrom/XF4.tar.gz
-
必要であれば、ports のソース(定義ファイル?のみ)をインストールします。
ports は各種のアプリケーション・プログラムについて、
ソース取得、パッチ当て、コンパイル、インストールを自動的に行うツールで、
環境構築がとても楽になります。
ただし、自力でソースを入手してコンパイルするのに比べて、
バグ修正への対応が遅くなってしまうので、セキュリティ上の問題が生じる可能性があります。
また、コンパイル時に独自のカスタマイズをするのが困難です。
ports は、それらの問題点を考慮した上で利用する必要があります。
※ 2.9版の場合、ports も CD#2 に入っています。
# cd /usr
# tar xzvf /mnt/cdrom/ports.tar.gz
-
CD-ROM をアンマウントします。
# umount /mnt/cdrom
-
ソースの更新に、Anonymous CVS
を使うため、インターネットへ接続できるようにネットワーク環境を整えます。
なお、この方法は、長時間のインターネット接続が必要になる可能性があるので、
ダイアルアップ環境では注意する必要があります。
なお、重要なパッチは、
Errata & patch list
(日本語訳)
から入手できるので、手動でパッチを当てることもできます。
ただし、この場合の修正は、Anonymous CVS での更新に比べて限定されているようです。
-
/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 サーバ
から適当なサーバを選ぶことも可能です。
-
必要であれば、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
^^^^^版数により異なる
-
必要であれば、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
^^^^^版数により異なる
-
以下のようにして、カーネルを再コンパイルします。 少し時間が掛かります。
独自にカスタマイズしたカーネルを使っている場合は、
トラブル発生に備えて、カスタマイズしたカーネルだけでなく、
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
-
カーネルを置き換え、リブートします。
# chmod -x bsd
# mv /bsd /bsd.old; cp bsd /bsd
# reboot
-
OS のその他の部分を再コンパイルします。 かなり時間が掛かります。
これでインストールまで行われます。
# cd /usr/src
# rm -rf /usr/obj/*
# make obj && make build
-
再び、リブートします。
-
必要なら、XFree86 や ports の各パッケージを再コンパイルします。
※ 具体的な手順は、別稿でまとめる予定です。