INDEX
カーネルとユーザラウンドバイナリの再構築
OpenBSD に不具合が見付かるとソースツリーが更新されます。その内容をホストに反映するために更新されたソースを取得し、再コンパイルをする。
- OpenBSD FAQ: 5 - Building the System from Source
ソースの展開
ソースを展開します。
- 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へ。