戻る

NetBSD/i386 が起動するブータブル CD-ROM の作成

「FreeBSD が起動するブータブル CD-ROM の作成」 で紹介した方法をそのまま NetBSD/i386 に応用して, 「NetBSD/i386 が起動するブータブル CD-ROM」を作成することに成功しました. ここではその方法を説明します. なお,基本的には FreeBSD での方法をそのまま応用しているので,そちらも適宜 参照してください.(ていうかそっちを読んでからこっちを読んだほうがいいでしょう)

また,ここでは 「FreeBSD が起動するブータブル CD-ROM」を CD-FreeBSD と呼び, 「NetBSD が起動するブータブル CD-ROM」を CD-NetBSD と呼びます.

CD-NetBSD を作成する際には,以下の点に関しては CD-FreeBSD と同じなので, CD-FreeBSD の方法をそのまま同じように応用できます.

しかし,以下の部分は CD-FreeBSD と違います.ものによってはなにか対策を 考える必要があります. まずイメージ用 NetBSD のインストールですが,基本的な作り方は CD-FreeBSD の ときと同じです.ぼくは作業用の OS には FreeBSD を使用したので,HDD 上に 作業用の FreeBSD とイメージ用の NetBSD をインストールして作成することに なります.僕は NetBSD-1.5/i386 と NetBSD-1.5.1/i386 で動作確認を行いました.

イメージ用の NetBSD のインストールは,ふだん NetBSD をインストールするときと 同じようにインストールしてしまって構いません. インストール後にはイメージ用 NetBSD を起動して,各種の設定やパッケージ アプリケーションのインストールを行っておきます.

X の設定は,FreeBSD の /etc/XF86Config を流用することができますが, NetBSD ではマウスには wsmouse を使用するため,流用する場合には 以下の修正を加えます.その他の設定に関しては,そのままでもうまく動作します.

リスト1: XF86Config の修正

Section "Pointer"
#   Protocol        "SysMouse"
#   Device          "/dev/mouse"
   Protocol        "Wsmouse"
   Device          "/dev/wsmouse"
   Emulate3Timeout 50
   Resolution      100
   Buttons         3
   Emulate3Buttons
EndSection
その他に,CD-FreeBSD の作成と同様に,以下の作業を行っておきます. さらに,NetBSD のカーネルのコンパイルですが,なるべく多くの機種で 動作するように,GENERIC カーネルの設定を流用します. ただし,カーネルの起動時に CD-ROM が / にマウントされるように,config の行を 以下のように修正する必要があります.
#config               netbsd  root on ? type ?
config                netbsd  root on cd0a type cd9660
このようにしてルートファイルシステムに cd0a, cd9660 を明示することにより, カーネルの起動時に CD-ROM が / にマウントされるようになります. CD-FreeBSD ではブート用の FD イメージ中に /etc/fstab を作成することで CD-ROM を / にマウントしましたが,NetBSD では同様の方法は使えなかったのと, 他にいろいろ試したが良い方法が見つからなかったので,このようにしました.

ただし,このように設定したカーネルを make install してしまうと,HDD から イメージ用 NetBSD を起動したときに,cd0a をルートファイルシステムとして マウントしようとして失敗し,デバイスとファイルシステムのタイプを手動で 入力するよう求めてきてしまいます.(wd0a, ffs などに手動で指定してやる ことになります) このため,イメージ用 NetBSD の場合には,カーネルの make install は行わない ようにします.さらに,strip でネームテーブルを削除しておくとよいでしょう.

さらに,CD-FreeBSD と同様に以下のことを行っておきます.

次に,作業用 FreeBSD を起動して,作業用 FreeBSD 側からイメージ用 NetBSD の 設定を行います.まず,作業用 FreeBSD を起動し,

# mkdir /cdnbsd
# mount /dev/ad0s2a /cdnbsd
# mount /dev/ad0s2e /cdnbsd/usr
のようにして,イメージ用 NetBSD のパーティションを /cdnbsd にマウントします.

まず,CD-ROMからブートさせるための,ブート用のFDイメージを作成します. ブート用 FD イメージには,NetBSD の配布物に含まれる,2.88MB 用の インストール FD のイメージである boot-big.fs を流用することができました. (雑誌の付録CDなどの場合には,i386/installation/floppy などのディレクトリに あります)

CD-FreeBSD と同様に vnconfig を使用して boot-big.fs をマウントし,修正を します.

# mkdir /fd
# vnconfig -c vn0 boot-big.fs
# mount /dev/vn0c /fd
# cd /fd
# ls
boot    netbsd
# 
boot はカーネルローダ,netbsd はカーネルを gzip 圧縮したものです. ここで,イメージ用 NetBSD のカーネルを圧縮して boot-big.fs 上にコピーします.
# cp /cdnbsd/usr/src/sys/arch/i386/compile/CDNBSD/netbsd /tmp
# cd /tmp
# gzip -9 netbsd_
# mv netbsd.gz /fd/netbsd
# umount /fd
# vnconfig -u vn0
これでブート用の FD イメージが作成できました.

次に,起動時に /tmp を MFS マウントする等のための rc スクリプトを作成します. rc スクリプトには,CD-FreeBSD 作成時に使用した rc.cdrom と rc.diskless2 を 流用できます.

作業用 FreeBSD の /etc/rc.diskless2 を /cdnbsd/etc にコピーします. また,rc.cdrom も /cdnbsd/etc に置きます.

FreeBSD-4.4 の rc.diskless2 を流用する場合には,/var の作成に /etc/mtree/BSD.var.dist を参照するので,FreeBSD-4.4 の配布物から /etc/mtree/BSD.var.dist も /cdnbsd/etc にコピーする必要があります. さらにこのとき,NetBSD にはデフォルトで uucp グループが存在しないので, /cdnbsd/etc/mtree/BSD.var.dist の 74 行目の gname=uucp を,gname=daemon に 修正しておきます.

FreeBSD-4.3 の rc.diskless2 を流用する場合には,/var/log や /var/at が 作成されるように,var_dirs を修正します(FreeBSD-4.4 の rc.diskless2 を 流用する場合には,この修正は必要ありません). 修正の具体的な内容に関しては,CD-FreeBSD の作成の方法を参照してください.

さらに,起動時に rc.cdrom と rc.diskless2 が呼ばれるように, /cdnbsd/etc/rc に以下の修正を加えます.

リスト2: /etc/rc の修正(rc.patch)

--- rc.orig	Thu Sep 27 14:35:15 2001
+++ rc	Wed Oct  3 10:43:41 2001
@@ -12,6 +12,15 @@
 export HOME=/
 export PATH=/sbin:/bin:/usr/sbin:/usr/bin
 
+# for CD-ROM boot.
+#
+if [ -r /etc/rc.cdrom ]; then
+	. /etc/rc.cdrom
+fi
+if [ -r /etc/rc.diskless2 ]; then
+	. /etc/rc.diskless2
+fi
+
 . /etc/rc.subr
 . /etc/rc.conf
 
このとき,CD-FreeBSD を作成したときと同様に,オリジナルの /cdnbsd/etc/rc は /cdnbsd/etc/rc.orig として保存し,新しい /cdnbsd/etc/rc は /cdnbsd/etc/rc.cdbsd というファイル名で作成するようにします.
# cd /cdnbsd/etc
# cp /cdfbsd/etc/rc.cdrom .
# cp /cdfbsd/etc/rc.diskless2 .
# mkdir mtree
# cp /cdfbsd/etc/mtree/BSD.var.dist ./mtree
# vi ./mtree/BSD.var.dist
# mv rc rc.org
# cp rc.org rc
# patch < /tmp/rc.patch
# mv rc.org rc.orig
# mv rc rc.cdbsd
# cp rc.orig rc

さらに,NetBSD の場合には,起動時に /etc/rc.d/root が呼ばれ,root_start() と いう部分で umount -a によって MFS マウントしたディレクトリがアンマウント されてしまうので,/cdnbsd/etc/rc.d/root の17行目の umount -a を,コメントに 修正します.この際,rc と同様に root.orig, root.cdbsd を作成するのですが, これらのファイルを /etc/rc.d 以下に置いておくと,起動時に実行されてしまうので, root.orig, root.cdbsd は /cdnbsd/etc に置くように注意してください.

# cd /cdnbsd/etc
# mv rc.d/root ./root.orig
# cp root.orig rc.d/root
# cp root.orig root.cdbsd
# vi root.cdbsd

次に,fstab を修正します./cdnbsd/etc/fstab を /cdnbsd/etc/fstab.orig に コピーし,/cdnbsd/etc/fstab.cdbsd を以下のように作成します.

リスト3: fstab.cdbsd

/dev/cd0a / cd9660 ro 0 0
以上で終わりです.あとは CD-FreeBSD と同じように,作業用 FreeBSD で,
# mkimg.sh /cdnbsd CDNBSD boot-big.fs /usr/tmp/cdnbsd.img
のようにして ISO9660 イメージを作成し,CD-R に焼きつけます.

CD-NetBSD は CD-FreeBSD に比べて,起動時の FD のチェックのところの タイムアウト待ちに時間がかかるようです.でもほっておくと先に進むので 気にしない.

戻る