kraftsrv.net

NetBSD 用 SD カードイメージファイルのカスタマイズ

NetBSD 用 SD カードイメージファイルのカスタマイズ手順です。
予め一般ユーザの作成と任意のネットワーク情報の設定を行っておくことで、Raspberry Pi 3 Model B+ 上で NetBSD の環境構築を行う際に入出力機器の用意を不要とします。

事前準備

作業用環境の準備

本稿での作業は NetBSD の環境で行うため、Hyper-V 仮想マシン等に NetBSD をインストールした環境を準備します。

SD カードイメージファイルの取得

本稿では 2021 年 5 月にリリースされた NetBSD 9.2 を使用します。
arm64.img.gz を取得して作業用環境に転送します。

SD カードイメージファイルのカスタマイズ

本稿での作業は全て root 権限で実行します。

SD カードイメージファイルの解凍

SD カードイメージファイルを解凍します。
※SD カードイメージファイルは /var/tmp 以下に転送されていることを前提とします。

root@vmhost# cd /var/tmp
root@vmhost# gunzip arm64.img.gz

SD カードイメージファイルのアタッチ

SD カードイメージファイルをアタッチします。

root@vmhost# vndconfig vnd0 /var/tmp/arm64.img

アタッチした結果を確認します。

root@vmhost# vndconfig -l
vnd0: / (/dev/sd0a) inode 942203
vnd1: not in use
vnd2: not in use
vnd3: not in use

base system 領域のマウント

SD カードイメージファイルに含まれる base system 領域 (『4.2BSD』と表示される箇所) を確認します。

root@vmhost# disklabel vnd0
# /dev/rvnd0:
type: SCSI
disk: STORAGE DEVICE
label: fictitious
flags: removable
bytes/sector: 512
sectors/track: 32
tracks/cylinder: 64
sectors/cylinder: 2048
cylinders: 1149
total sectors: 2354048
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0

8 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:   2157440    196608     4.2BSD      0     0     0  # (Cyl.     96 -   1149*)
 c:   2157440    196608     unused      0     0        # (Cyl.     96 -   1149*)
 d:   2354048         0     unused      0     0        # (Cyl.      0 -   1149*)
 e:    163840     32768      MSDOS                     # (Cyl.     16 -     95)

base system 領域をマウントします。

root@vmhost# mount /dev/vnd0a /mnt

base system 領域のマウントを確認します。

root@vmhost# ls -l /mnt
total 12536
-r--r--r--   2 root  wheel      1220 May 12 20:26 .cshrc
-r--r--r--   2 root  wheel       701 May 12 20:26 .profile
drwxr-xr-x   2 root  wheel       512 May 12 19:23 altroot
drwxr-xr-x   2 root  wheel      1024 May 12 20:24 bin
drwxr-xr-x   2 root  wheel       512 May 12 20:28 boot
drwxr-xr-x   9 root  wheel     31744 May 12 20:26 dev
drwxr-xr-x  30 root  wheel      2048 May 12 20:26 etc
drwxr-xr-x   2 root  wheel       512 May 12 20:28 kern
drwxr-xr-x   3 root  wheel      2560 May 12 20:25 lib
drwxr-xr-x   3 root  wheel       512 May 12 19:23 libdata
drwxr-xr-x   5 root  wheel       512 May 12 20:25 libexec
drwxr-xr-x   2 root  wheel       512 May 12 19:23 mnt
-rwxr-xr-x   1 root  wheel  12542784 May 12 20:28 netbsd
drwxr-xr-x   2 root  wheel       512 May 12 20:28 proc
drwxr-xr-x   2 root  wheel      3072 May 12 20:26 rescue
drwxr-xr-x   2 root  wheel       512 May 12 20:26 root
drwxr-xr-x   2 root  wheel      3072 May 12 20:25 sbin
drwxr-xr-x   3 root  wheel       512 May 12 20:24 stand
drwxrwxrwt   2 root  wheel       512 May 12 19:23 tmp
drwxr-xr-x  13 root  wheel       512 May 12 19:23 usr
drwxr-xr-x  24 root  wheel       512 May 12 19:23 var

一般ユーザの作成

以下例の情報の通り base system 領域内に一般ユーザを作成します。

ユーザ名 netbsd
パスワード netbsd
UID 1000
プライマリグループ users
追加グループ wheel
ホームディレクトリ /home/netbsd
ログインシェル /bin/sh

ホームディレクトリの作成

ホームディレクトリを作成します。

root@vmhost# mkdir -p /mnt/home/netbsd
root@vmhost# chown 1000:100 /mnt/home/netbsd

パスワードハッシュの生成

パスワード文字列『netbsd』のハッシュを生成します。

root@vmhost# pwhash netbsd
$sha1$21493$E43KtUnt$km3iIP0IzkvUcWmYehdJtzOGsqIS

ユーザ情報の設定

/mnt/etc/master.passwd に以下の設定を追加します。
第 2 フィールドの内容は先に生成したパスワードハッシュとなります。

netbsd:$sha1$21493$E43KtUnt$km3iIP0IzkvUcWmYehdJtzOGsqIS:1000:100::0:0::/home/netbsd:/bin/sh

パスワードファイル (/mnt/etc/passwd) ならびにデータベース (/mnt/etc/pwd.db, /mnt/etc/spwd.db) を作成します。

root@vmhost# pwd_mkdb -d /mnt -p /mnt/etc/master.passwd

グループ情報の設定

/mnt/etc/group の wheel グループのエントリに一般ユーザを追加します。

wheel:*:0:root,netbsd

ネットワーク情報の設定ファイルの編集

base system 領域内のネットワーク設定ファイルに任意の静的 (固定) 情報を設定します。

IP アドレス

/mnt/etc/rc.conf の『dhcpcd=YES』の設定をコメントアウト (または削除) します。

#dhcpcd=YES

/mnt/etc/ifconfig.mue0 を新規に作成して IP アドレスとネットマスク (16 進表記) を設定します。
以下は IP アドレスを『172.16.0.210/24』とする場合の例となります。

172.16.0.210 netmask 0xffffff00

ゲートウェイ

/mnt/etc/rc.conf に『defaultroute=』の設定を追加します。
以下はゲートウェイの IP アドレスを『172.16.0.1』とする場合の例となります。

defaultroute=172.16.0.1

DNS サーバ

/mnt/etc/resolv.conf を新規作成して DNS サーバの設定を行います。
以下は DNS サーバを『8.8.8.8』と『8.8.4.4』とする場合の例となります。

nameserver 8.8.8.8
nameserver 8.8.4.4

base system 領域のマウント解除

base system 領域のマウントを解除します。

root@vmhost# umount /mnt

SD カードイメージファイルのデタッチ

SD カードイメージファイルをデタッチします。

root@vmhost# vndconfig -u vnd0

SD カードイメージファイルの圧縮

SD カードイメージファイルを圧縮します。

root@vmhost# gzip arm64.img