トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

OpenBSD/Rebuild/39-i386

INDEX

カーネルとユーザラウンドバイナリの再構築

OpenBSD に不具合が見付かるとソースツリーが更新されます。その内容をホストに反映するために更新されたソースを取得し、再コンパイルをする。

ソースの展開

ソースを展開します。

  • CD-ROMから、展開する場合は、ドライブをマウントして展開
  • ftp,http経由でファイルを落とした場合は、落としたファイルを展開
  • CVS経由で全て取得してもよいが、負荷軽減のため推奨しない(ほんと?)

以下の例は、v3.9 のCD-ROMからの展開手順。パス等は適に変更のこと。

 ドライブのマウント

# mkdir /mnt/cdrom ←ディレクトリがあれば不要
# mount -t cd9660 -r /dev/cd0a /mnt/cdrom

 /usr/src/sys に置かれるカーネルのソースコードの展開

# cd /usr/src
# tar xzf /mnt/cdrom/3.9/sys.tar.gz

 /usr/src に置かれるユーティリティのソースコードの展開

# cd /usr/src
# tar xzf /mnt/cdrom/3.9/src.tar.gz

 /usr/ports に置かれる ports のソースコードの展開

ports を使用する場合は展開する。今回は使わないので展開しない。

# cd /usr
# tar xzf /mnt/cdrom/3.9/ports.tar.gz

 /usr/XF4 に置かれる X-Window ソースコードの展開

X Windowを使用している場合は展開する。今回は使わないので展開しない。

# cd /usr
# tar xzf /mnt/cdrom/3.9/XF4.tar.gz

 ドライブのアンマウント

# umount /mnt/cdrom

最新のソースの取得

Anonymous CVS サーバより最新のカーネルソースを取得してくる。OpenBSD Anonymous CVS から近場のCVSサーバを選ぶ。また、指定したCVSサーバに初めてつなぐ場合、以下のようにフィンガープリントの確認が行われる。これは、~/.ssh/known_hosts に保存されるため2回目以降は表示されない。

 最新のソースの取得(初回のみ)

tar.gz のソースファイルを展開していない場合、CVSよりチェックアウトする。

cd /usr
export CVSROOT=anoncvs@anoncvs.example.org:/cvs
cvs -d$CVSROOT checkout -rOPENBSD_3_9 -P src ports XF4

 最新のソースの取得

CVSでアップデートして最新のソースに更新する。

# cd /usr/src
# export CVSROOT=anoncvs@anoncvs.jp.openbsd.org:/cvs
# cvs -d$CVSROOT up -rOPENBSD_3_9 -Pd
The authenticity of host 'anoncvs.jp.openbsd.org (133.45.178.239)' can't be est
blished.
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 {Enter}
Warning: Permanently added 'anoncvs.jp.openbsd.org,133.45.178.239' (RSA) to the
list of known hosts.
cvs server: Updating .
   ... lots of output ...
cvs server: Updating usr.sbin/ztsscale
#

※jp.openbsd.org を使用。

コンパイルとインストール

 カーネルの再コンパイル

まず、カーネルを再コンパイルします。カーネルをカスタマイズしている場合は、GENERIC を読み替えて。

# cd /usr/src/sys/arch/i386/conf
# config GENERIC
Don't forget to run "make depend"
# cd ../compile/GENERIC/
# make clean && make depend && make
   ... lots of output ...

気長に待ちましょう... (2,30分くらいかな)

/usr/src/sys/ 以下を読み取り専用とする

上記の場合、/usr/src/sys/arch/i386/compile/GENERIC でコンパイルが行われる。/usr/src/sys 以下が変更されないようにする場合、以下のようにする。(例:/somewhere で作業する)

$ cd /somewhere
$ cp /usr/src/sys/arch/i386/conf/GENERIC .
$ config -s /usr/src/sys -b . GENERIC
$ make clean && make depend && make

 カーネル入れ替え

できたカーネルを入れ替えます。古いのはちゃんととっておきましょう

# ln /bsd /bsd.org
# cp bsd /nbsd
# mv /nbsd /bsd
# ls -lF ./bsd /bsd*
-rwxr-xr-x  1 root  wheel  6508875 Sep 23 05:37 ./bsd*
-rwxr-xr-x  1 root  wheel  6508875 Sep 23 10:23 /bsd*
-rw-r--r--  1 root  wheel  6508907 Sep 22 00:13 /bsd.org
-rw-r--r--  1 root  wheel  5123193 Sep 21 23:21 /bsd.rd

config -e コマンドで設定を変更している場合は、再コンパイルしたカーネルにも設定をします。

# config -ef /bsd

設定後、再起動

# reboot

新しくカーネルが入れ替えれれば、ログインした際に表示されるタイムスタンプが変る

Last login: Sun Sep  3 03:35:09 on ttyC0
OpenBSD 3.9-stable (GENERIC) #0: Sun Sep  3 05:54:00 JST 2006

Welcome to OpenBSD: The proactively secure Unix-like operating system.

起動(カーネルの作成)に失敗する場合は、古いので起動する。

boot> bsd.org

 ユーザランドの再コンパイル

ユーザランドユーティリティのコンパイルを行います。やっぱり、時間がかかるので、気長に待ちましょう...

# rm -rf /usr/obj/*
# cd /usr/src
# make obj && make build

設定後、再起動

# reboot

カーネルオプションの定義ファイルを作る

OpenBSD のカーネルをカスタマイズする手順 (OpenBSD 3.6 のとき)

なお、標準のカーネル(GENERIC)には、通常の用途に必要なものは全て含まれているので、特別な理由が無い限り、カーネルのカスタマイズは不要です。

ただし、GENERIC は、RTCはUTCで、OS上の時間は指定されたタイムゾーンの時間となる。そのため、マルチブート・仮想環境等では、他との影響が出るので RTC=JST に変更する。 タイムゾーンは、config -e で設定できるのでカスタマイズなしで変更できる。

 RTC を日本時間のままで運用するための設定

以下の行を追加して定義します。

option		TIMEZONE=-540	# RTC = JST

 ダミーの NOP 挿入を止めて性能を向上するための設定

以下の行の先頭の # を外して有効にします。

option  DUMMY_NOPS

 ネットワークバッファ領域を大きくする

以下の行を追加してバッファ領域を定義します。

option		NMBCLUSTERS=8192	# Network buff size

※3.6で設定したら、再定義で怒られてしまいました…

 ファイルシステム

使ってないファイルシステムを無効にします。

#option	EXT2FS		# Second Extended Filesystem
#option	NFSCLIENT	# Network File System client
#option	NFSSERVER	# Network File System server

 CPUクラスを指定

使用しているCPUに該当する行のみ残してコメントアウトします。

#option	I386_CPU	# CPU classes; at least one is REQUIRED
#option	I486_CPU
#option	I586_CPU
option		I686_CPU

使用してるマシンのCPUクラスは、dmesgにて確認します。

# dmesg | grep cpu
cpu0: VIA Samuel 2 ("CentaurHauls" 686-class) 600 MHz
cpu0: FPU,DE,TSC,MSR,MTRR,PGE,MMX
cpu0 at mainbus0

 浮動小数点演算のエミュレーション機能の削除

FPUがあるので、エミュレーション機能を無効にします。

#option	GPL_MATH_EMULATE	# floating point emulation.

最終更新時間:2021年01月13日 11時05分34秒 指摘や意見などあればSandBoxのBBSへ。