起動用ディスクイメージの作成

インストール用のカーネルだけを含んだ、起動用ディスクイメージを作成します。

前準備

前準備としてはvnd(4)が使用できる状態であることを確認してください。vnd(4)はvnode disk driveでファイルをディスクデバイスとして扱うためのドライバーです。以下のコマンドをエラーなく実行できることを確認してください。

# usr/sbin/vnconfig -l
vnd0: not in use
vnd1: not in use
vnd2: not in use
vnd3: not in use
#

ディスクイメージの作成

vnd(4)でアクセスするディスクイメージのファイルを以下の手順で作成します。ディスクイメージは今回の目的には8Mバイトもあれば足りるので、以下のようにして空の8Mバイトのファイルを作成します。

# dd if=/dev/zero of=disk.img bs=1m count=8
8+0 records in
8+0 records out
8388608 bytes transferred in 0.082 secs (102300097 bytes/sec)
#

次に、vnd0を構成します。

# vnconfig -c vnd0 /var/tmp/disk.img
#

ディスクラベルの作成

以前は安全策を取ってFDISKパーティションを作成しましたが、そもそもハードディスクにNetBSDだけをインストールする場合はFDISKパーティションを作成する必要はありません。そこで、ここからはディスクラベルの作成から始めます。

ディスクにディスクラベルが存在しない場合、カーネル(ディスクのドライバー)はサイズを実際のディスクの大きさに合わせた仮のディスクラベルをカーネル内に生成します。以下では、それをそのままディスクイメージに書き込んでいます。

# disklabel -Iir vnd0
Enter '?' for help
partition> P
4 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:     16384         0     4.2BSD      0     0     0  # (Cyl.      0 -      7)
 d:     16384         0     unused      0     0        # (Cyl.      0 -      7)
partition> W
Label disk [n]? y
Label written
partition> Q
#

ここでは以下の処理を行っています。

  1. disklabel(8)を対話的に、初期のディスクラベルの作成、カーネル内のディスクラベルの情報を無視して起動
  2. Pで現在の状態を確認
  3. Wでラベルを書き込み、確認を求めてくるのでyと入力
  4. Qでdisklabel(8)を終了

ファイルシステムの作成とマウント

ファイルシステムの作成とマウントを行います。

# newfs -O2 /dev/rvnd0a 
/dev/rvnd0a: 8.0MB (16384 sectors) block size 4096, fragment size 512
        using 4 cylinder groups of 2.00MB, 512 blks, 912 inodes.
super-block backups (for fsck_ffs -b #) at:
144, 4240, 8336, 12432,
# mount /dev/vnd0a /mnt
#

これで以下の処理を行っています。

  1. vnd0aにFFSv2でファイルシステムを作成
  2. /dev/vnd0a を /mnt にマウント

必要なファイルのコピー

作成したファイルシステムに必要なファイルをコピーします。

# cp -p /data/release/amd64/binary/kernel/netbsd-INSTALL.gz /mnt/netbsd 
# cd /usr/mdec
# cp -p boot /mnt
# cp /usr/src/etc/etc.amd64/boot.cfg /mnt
#

これで以下の処理を行っています。

  1. (内部にインストール用ramdiskイメージを含んだ)インストール用カーネルをコピー
  2. ブートプログラムbootをコピー
  3. boot(8)の設定ファイルboot.cfgをコピー

NetBSDのboot(8)は圧縮したままのカーネルも読めるので、そのままのコピーで済ませています。

ブートローダーの書き込み

installboot(8)を使用して、先に書き込んだbootを読み込むためのブートコードと基本設定を行います。
オプションとしてコンソールを1つ目のシリアルポートにして、速度を115200bpsにしています。

さらに、設定したオプションを表示しています。

# installboot -o timeout=30,console=com0,speed=115200 /dev/rvnd0a bootxx_ffsv2
# installboot -v -e /dev/rvnd0a
File system:         /dev/rvnd0a
Boot options:        timeout 30, flags 0, speed 115200, ioaddr 0, console com0
#

後始末

最後にファイルシステムをアンマウントして、vnd0の構成を解除します。

# umount /mnt
# vnconfig -u vnd0
#

これで /var/tmp/disk.img として必要なディスクイメージのファイルを作成できました。